デフォルトは $HOME/.aws/credentials および $HOME/.aws/config に認証情報を設定します1。

参考

Configuration and credential file settings in the AWS CLI

credentails と config

おもに creadentials には秘匿情報を config にはそれ以外の情報を記載する。 $HOME/.aws/config に named profile(default 以外のプロファイル)を書く場合は [profile profile名] というセクション名が必要です。ただし default プロファイルだけは例外で、config ファイルでも credentials ファイルと同じく [default] と書きます([profile default] とは書きません)。 $HOME/.aws/credentials はどのプロファイルも profile プレフィックスが必要ありません。

AWS CLI / AWS SDK の認証情報探索順序

AWS CLI や AWS SDK は認証情報が必要になった場合に以下順序(上ほど優先度が高い)で認証情報を探索します。 使用できる環境変数は AWS CLI でサポートされている環境変数 を参照してください。

  1. --profile や --region など CLI オプション(コマンドラインで明示的に指定した値が最優先)
  2. 環境変数 ( AWS_PROFILE, AWS_DEFAULT_REGION, AWS_ACCESS_KEY_ID, etc.)
  3. $HOME/.aws/credentials(ファイルの場所は環境変数 AWS_SHARED_CREDENTIALS_FILE で変更可能)
  4. $HOME/.aws/config(ファイルの場所は環境変数 AWS_CONFIG_FILE で変更可能)
  5. コンテナ/インスタンスに割り当てられた IAM ロールの認証情報(実行環境によりエンドポイントが異なる)
    • EC2 インスタンス:インスタンスメタデータサービス (IMDS) 169.254.169.254 から取得
    • ECS タスク:IMDS とは別のエンドポイント 169.254.170.2(環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI で示されるパス)から取得。169.254.169.254 の IMDS では ECS タスクロールの認証情報は取得できません。

[!NOTE] 最近の SDK のデフォルトの挙動は認証情報を $HOME/.aws/credentials のみ参照します。
AWS_SDK_LOAD_CONFIG=1 を設定すると $HOME/.aws/config も参照します。

トラブルシュート

ローカル端末やEC2以外の環境では、通常 インスタンスメタデータサービス (IMDS) 169.254.169.254 から EC2 インスタンスプロファイルの認証情報を取得する処理 が実行されることは想定されていないのでエラーになります。以下のエラーは認証情報が見つからず インスタンスメタデータサービス (IMDS) を探索してエラーになる例です。

Error retrieving credentials from the instance profile metadata service.
cURL error 7: Failed to connect to 169.254.169.254 port 80
  1. AWS_CONFIG_FILEでパスを指定することもできます。参考:AWS CLI でサポートされている環境変数 。 ↩