У меня есть настройка S3 Bucket в AWS, которая защищена ролью IAM. Я пишу приложение, которое должно получить доступ к этому ведру. Приложение развернуто в кластере EKS и получает роль через настройку учетной записи службы (в соответствии с концепцией IRSA). Пока все работает нормально.
Но для тестирования / разработки я хочу иметь возможность запускать приложение и локально. Итак, как мне назначить роль IAM моему приложению при локальном запуске?
При работе в EKS разрешения обрабатываются кластером, поэтому из кода Java мне просто нужно создать клиент S3 по умолчанию и тогда я могу поместить объекты:
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
s3Client.putObject(bucketName, key, data);
Это, конечно, не будет работать из коробки локально.
У меня есть AWS Профиль, определенный в моем файле конфигурации:
[profile test]
role_arn = arn:aws:iam::...
source_profile = default
region = eu-central-1
### MFA Authenticated
[default]
region = eu-central-1
При входе в систему я могу видеть корзину с моей консоли, используя:
aws s3api list-objects --bucket <bucketname> --profile test
Я подключил свой профиль к приложению, предоставив переменные среды:
AWS_PROFILE=test
AWS_REGION=eu-central-1
Я тоже пытался с AWS_PROFILE="profile test"
.
При запуске моего кода я получаю
com.amazonaws.services.s3.model.AmazonS3Exception:
Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4.
(Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument;
Я использую Java SDK 1.11.738 и убедился в том, что Maven. xml что sdk-s3, sdk-core и sdk-kms имеют одинаковую версию:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.738</version>
<exclusions>
<exclusion>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-kms</artifactId>
</exclusion>
<exclusion>
<groupId>com.amazonaws</groupId>
<artifactId>jmespath-java</artifactId>
</exclusion>
</exclusions> </dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.738</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-kms</artifactId>
<version>1.11.738</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>jmespath-java</artifactId>
<version>1.11.738</version>
</dependency>