Я пытаюсь загрузить файл в корзину S3. Сначала я создаю клиента AmazonS3 с помощью InstanceProfileCredentialsProvider и получаю учетные данные IAM из метаданных экземпляра:
final AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new InstanceProfileCredentialsProvider(false))
.withRegion("eu-west-1").build();
Роль, связанная с этим экземпляром, имеет политику доступа и загрузки файлов в корзину:
{
"Version":"2012-10-17",
"Statement":{
"Action":[
"kms:Decrypt",
"kms:DescribeKey",
"kms:Encrypt",
"kms:GenerateDataKey",
"kms:ReEncryptFrom",
"kms:ReEncryptTo",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject*"
],
"Effect":"Allow",
"Resource":[
"arn:aws:kms:eu-west-1:[account-id]:key/[key-id]",
"arn:aws:s3:::[bucket-name]",
"arn:aws:s3:::[bucket-name]/[path-were-to-save-file]/*"
]}}
Я пытаюсь загрузить файл так:
final PutObjectRequest request = new PutObjectRequest("[bucket-name]", file.getName(), file);
s3Client.putObject(request);
но я получаю Отказ в доступе AmazonS3ClientException. Есть идеи, что мне не хватает?
Я также попытался включить ключ kms в запрос:
final PutObjectRequest request = new PutObjectRequest("[bucket-name]", file.getName(), file)
.withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams("[key-id]"));
но он пытается получить ключ из моей учетной записи:
arn:aws:kms:eu-west-1:[my-account-id]:key/[key-id]
не указанная в полисе учетная запись:
arn:aws:kms:eu-west-1:[account-id]:key/[key-id]
и выдает KMSNotFoundException