Невозможно загрузить объект в S3 с шифрованием на стороне сервера AES - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь загрузить объект в S3 корзину через Java API.Однако независимо от того, что я делаю, он выдает Access Denied исключение

private static void serverSideEncryption() throws NoSuchAlgorithmException {
    AmazonS3 S3_CLIENT = AmazonS3ClientBuilder.standard()
                                              .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                                              .withRegion(Regions.US_EAST_1)
                                              .build();
    PutObjectRequest putRequest = new PutObjectRequest(BUCKET_NAME, "dfsdf.ss",
            new File("/Users/fsdfs/Desktop/test.jpeg"));
    S3_CLIENT.putObject(putRequest);
    System.out.println("Object uploaded");
}

, когда я запускаю это, я получаю

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: AD1105A291B609D8; S3 Extended Request ID: Ls5wbbW2Yd43p75MJGSOjex0KvmgPiqNBupxpCcEvdMRkK4iptNPNCEwyOqokA=), S3 Extended Request ID: Ls5wbbW2Yd43p75MJGSOje70iqNBupxpCcEvdMRkK4iptNPNCEwyOqokA=
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1632)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1058)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4365)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4312)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1755)
    at com.xxx.aws.s3.S3Service.serverSideEncryption(S3Service.java:72)
    at com.xxx.aws.s3.S3Service.main(S3Service.java:58)

Однако, если я делаю то же самое из AWS CLI, используя

aws s3api put-object --bucket zzz-yyy-xxx --key test/testfdf --server-side-encryption AES256

Работает отлично.

Я также попробовал приведенный ниже код

private static void serverSideEncryption() throws NoSuchAlgorithmException {
    KEY_GENERATOR = KeyGenerator.getInstance("AES");
    KEY_GENERATOR.init(256, new SecureRandom());
    SSE_KEY = new SSECustomerKey(KEY_GENERATOR.generateKey());
    AmazonS3 S3_CLIENT = AmazonS3ClientBuilder.standard()
                                              .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                                              .withRegion(Regions.US_EAST_1)
                                              .build();
    PutObjectRequest putRequest = new PutObjectRequest(BUCKET_NAME, "dfsdf.ss",
            new File("/Users/xx-xx/Desktop/dfdf.jpeg")).withSSECustomerKey(SSE_KEY);
    S3_CLIENT.putObject(putRequest);
    System.out.println("Object uploaded");
}

Моя политика корзины настроена на шифрование AES

1 Ответ

0 голосов
/ 10 мая 2018

Проверьте правильность вашего имени корзины и ключей доступа, 403 означает, что ключ не существует.Это может означать ключ, указанный в названии корзины или ключ доступа.

Проверьте оба, чтобы быть уверенным.

Редактировать: в соответствии с документацией AWS S3 SSE на https://atdocs.aws.amazon.com/AmazonS3/latest/dev/SSEUsingJavaSDK.html

Чтобы загрузить объект с шифрованием на стороне сервера, необходимо использовать метод ObjectMetaData, чтобы указать ключи шифрования на стороне сервера, тогда ссылку на этот объект можно использовать в качестве параметра в PutObjectRequest.

Модификации, относящиеся к OP https://stackoverflow.com/users/1629109/damien-amen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...