Help us understand the problem. What is going on with this article?

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

More than 3 years have 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 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 を鎖の最後につなげておけば良いでしょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away