概要
Spring Boot 環境において、AWS IAM Roles and Service Account (IRSA) を使用した認証情報で、s3やsqs などのAWS リソースにアクセスするのに、情報が少なかったので記載しておきます。
前提
必要なIAM ロールや、ポリシー、OIDCプロバイダの設定、k8s ServiceAccount リソースはすでに作成済みの前提で、Spring Boot 環境で実装する部分についてのみ記載します。
必要な IAM ロール、 ServiceAccount が設定され、Deployment と紐づけられた場合、Pod 内の環境変数として、AWS_ROLE_ARN, AWS_WEB_IDENTITY_TOKEN_FILE の環境変数が設定されます。
参考 からの更新部分になりますので、アーキテクチャについては参照元をご確認ください。
pom.xml
WebIdentityTokenFileCredentialsProvider プロバイダを使用する場合は、AWS STS モジュールも必要となります。
※ STS モジュールの依存関係が設定されていない場合、「WebIdentityTokenCredentialsProvider(): To use web identity tokens, the 'sts' service module must be on the class path.」というエラーがpod のログに表示されます。
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-aws2-s3-starter</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-aws2-sqs-starter</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-aws2-sts-starter</artifactId>
<version>${camel.version}</version>
</dependency>
application.properties
2024/7/27 現在、デフォルトの認証プロバイダチェーンに WebIdentityTokenFileCredentialsProvider が含まれていますので、useDefaultCredentialsProvider を true に設定します。
DefaultCredentialsProvider では、system, environment, WebIdentity の順に認証チェーンをたどります。 WebIedntityTokenFileCredentialsProvider では、環境変数 AWS_ROLE_ARN および AWS_WEB_IDENTITY_TOKEN_FILE が存在する場合、AWS_WEB_IDENTITY_TOKEN_FILE で指定されたフルパスのディスク上のトークンを使用して、AWS_ROLE_ARN で指定されたロールの引き受けを試みます。環境変数が使用された場合、プロバイダーは AWS_ROLE_SESSION_NAME 環境変数からセッションの設定を試みます。
ここでは、-starter バージョンを使用しているので、自動構成用のオプションを使用していますが、pom.xml でaws2-s3/aws2-sqs コンポーネントを使用している場合は、useDefaultCredentialsProviderで設定します。 ( 参考 5 , 参考 6 )
camel.component.aws2-s3.use-default-credentials-provider=true
camel.component.aws2-sqs.use-default-credentials-provider=true