Tagbangers Blog

AWS SDK for Java の Credential Provider Chain

AWS の API にアクセスするには AWS の認証情報(アクセスキーとシークレットキー)が必要になる。
AWS SDK for Java ではサービスクライアントに認証情報を引数で指定しない場合、 default credential provider chain を用いて、アクセスキーとシークレットキーは次のクラスが順番で見つかるまで探す。

  1. EnvironmentVariableCredentialsProvider
  2. SystemPropertiesCredentialsProvider
  3. ProfileCredentialsProvider
  4. InstanceProfileCredentialsProvider

1. EnvironmentVariableCredentialsProvider

OSの環境変数からアクセスキーとシークレットキーを探す。

アクセスキー AWS_ACCESS_KEY_ID AWS_ACCESS_KEY (第2候補)
シークレットキー AWS_SECRET_KEY AWS_SECRET_ACCESS_KEY (第2候補)

2. SystemPropertiesCredentialsProvider 

システムプロパティ(Java の起動オプション -D で指定できる)からアクセスキーとシークレットキーを探す。

アクセスキー aws.accessKeyId
シークレットキー aws.secretKey

3. ProfileCredentialsProvider 

~/.aws/credentials に配置した認証情報ファイルから探す。

4. InstanceProfileCredentialsProvider

EC2 のインスタンスメタデータからアクセスキーとシークレットキーを探す。
IAMRole を設定した場合に有効。

インスタンスメタデータは AWS 特有の機能で、そのインスタンスから  http://169.254.169.254/latest/meta-data/ にアクセスすると、自身のインスタンスに設定された情報が取得できるというもの。


参考URL
http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html