aws-sdk-java 1.11.179 を参照して書いています。
AWS SDK for Java はデフォルトでいろんな場所から認証情報を読み込みます。
DefaultAWSCredentialsProviderChain の JavaDoc を見ると結構書いてあります。これと各 Provider の実装を見ながらどうなっているか見ていきます。
次のものを順番に試して最初に見つかった認証情報を利用するようになっています。
- 環境変数 EnvironmentVariableCredentialsProvider
-
AWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
環境変数 (Java 以外の SDK でも利用しているのでこちらのほうがオススメ) -
AWS_ACCESS_KEY
とAWS_SECRET_KEY
環境変数 - AWS STS を利用する場合は
AWS_SESSION_TOKEN
環境変数
-
- Java システムプロパティ SystemPropertiesCredentialsProvider
-
aws.accessKeyId
とaws.secretKey
システムプロパティ - AWS STS を利用する場合は
aws.sessionToken
システムプロパティ
-
- プロファイル認証情報 ProfileCredentialsProvider
- デフォルトのファイルは
~/.aws/credentials
- ファイルの場所は
AWS_CREDENTIAL_PROFILES_FILE
環境変数で指定できる - 昔使われていた
~/.aws/config
も一応読みこまれる - ファイル内には複数の認証情報を記載できる。デフォルトでは
default
プロファイルが読み込まれる -
AWS_PROFILE
環境変数、あるいはaws.profile
システムプロパティでプロファイルを指定できる - 再読込ロックが獲得できれば5分に一度再読込される
- 再読込ロックが獲得できなくても10分に一度再読込される
- デフォルトのファイルは
- EC2コンテナ内で利用可能な認証情報 EC2ContainerCredentialsProviderWrapper
-
AWS ECS タスク用の IAM ロール。
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
環境変数が使われる。 - EC2 インスタンスプロファイル。 InstanceProfileCredentialsProvider で実装される。
-
AWS ECS タスク用の IAM ロール。
環境変数やシステムプロパティを使ってかなりの設定ができるので、ほとんどの場合でデフォルトのままで十分です。自前で Credentials provider chain を作ると却って柔軟性が落ちて辛いということになりかねません。環境変数やシステムプロパティが利用できず、どうしてもカスタムしたいときは DefaultAWSCredentialsProviderChain
を鎖の最後につなげておけば良いでしょう。