Edited at

AWS SDK for Java がデフォルトで参照する credential

More than 1 year has passed since last update.

aws-sdk-java 1.11.179 を参照して書いています。

AWS SDK for Java はデフォルトでいろんな場所から認証情報を読み込みます。

DefaultAWSCredentialsProviderChain の JavaDoc を見ると結構書いてあります。これと各 Provider の実装を見ながらどうなっているか見ていきます。

次のものを順番に試して最初に見つかった認証情報を利用するようになっています。


  1. 環境変数 EnvironmentVariableCredentialsProvider



    • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 環境変数 (Java 以外の SDK でも利用しているのでこちらのほうがオススメ)


    • AWS_ACCESS_KEYAWS_SECRET_KEY 環境変数

    • AWS STS を利用する場合は AWS_SESSION_TOKEN 環境変数



  2. Java システムプロパティ SystemPropertiesCredentialsProvider



    • aws.accessKeyIdaws.secretKey システムプロパティ

    • AWS STS を利用する場合は aws.sessionToken システムプロパティ



  3. プロファイル認証情報 ProfileCredentialsProvider


    • デフォルトのファイルは ~/.aws/credentials

    • ファイルの場所は AWS_CREDENTIAL_PROFILES_FILE 環境変数で指定できる

    • 昔使われていた ~/.aws/config も一応読みこまれる

    • ファイル内には複数の認証情報を記載できる。デフォルトでは default プロファイルが読み込まれる


    • AWS_PROFILE 環境変数、あるいは aws.profile システムプロパティでプロファイルを指定できる

    • 再読込ロックが獲得できれば5分に一度再読込される

    • 再読込ロックが獲得できなくても10分に一度再読込される



  4. EC2コンテナ内で利用可能な認証情報 EC2ContainerCredentialsProviderWrapper



環境変数やシステムプロパティを使ってかなりの設定ができるので、ほとんどの場合でデフォルトのままで十分です。自前で Credentials provider chain を作ると却って柔軟性が落ちて辛いということになりかねません。環境変数やシステムプロパティが利用できず、どうしてもカスタムしたいときは DefaultAWSCredentialsProviderChain を鎖の最後につなげておけば良いでしょう。