aws-cliはAWSリソースをコマンドラインから操作するツールとなりますが、コマンドを実行するためには、AWSアカウントの認証情報や設定情報が必要となります。
aws-cliではこの認証情報や設定情報は、基本的にはconfigファイルとcredentialsファイルに保存された情報を利用してコマンドを実行していく事になりますが。
本記事ではaws-cliで利用する認証情報と設定情報についてまとめます。
なお本記事で取り扱っている環境はWindows環境となります。
今回利用する環境
- Windows 11 24H2
- PowerShell 7.6.0-preview.4
- aws-cli/2.27.34 Python/3.13.3 Windows/11 exe/AMD64
認証情報と認証情報の優先順位について
Authentication and access credentials for the AWS CLI
aws-cliを利用するにあたり最低限は理解しておきたい事柄として認証情報と設定上の優先順位があります。
aws-cliで利用する認証情報や設定情報を設定する方法は複数あり(コマンドラインオプションとして渡す、システム環境変数・ユーザー環境変数に設定する、ローカルの設定ファイルに設定する などなど)
登録した場所に応じて優先順位があります。
これを知らずにaws-cliを利用すると、意図しない認証情報や設定情報を使用してコマンドを実行してしまうケースがあるので注意が必要です。
1.コマンドラインオプション
2.環境変数
3.ロールの継承
4.ウェブ ID によるロールの継承
5.AWS IAM Identity Center
6.認証情報ファイル
7.カスタムプロセス
8.設定ファイル
9.コンテナ認証情報
10.Amazon EC2 インスタンスプロファイルの認証情報
ドキュメントを参照すると上記10個の順番が紹介されていますが。
全部を組み合わせて使う、なんてことはなく。
- コマンドラインオプションで引数として渡した場合はその値が最優先される。
- 環境変数に設定がある場合は認証情報ファイル(credentials)、設定ファイル(config)より優先される
- スイッチロールを利用する場合は一時的な認証情報がキャッシュファイルに保存され認証情報ファイル(credentials)、設定ファイル(config)より優先される
- EC2のインスタンスプロファイルの認証情報は最後
といった所を押さえておけば、だいたいのケースに対応できる気はします。
上記の優先順位を確認するには実際に動かして試してみるのが手っ取り早いので下記のように設定とコマンドを実行して確認していきます。
優先順位がどうなるか実際に確認してみる
ここでは実際に複数の設定を行い、いくつかのパターンでどの情報が優先されるのかをコマンドを実行して確認してみます。
credentialsとconfigファイルの保存場所について
Windows環境では認証ファイルは設定ファイルは通常下記に保存されます。
認証ファイル:C:\Users\<ユーザー名>\.aws\credentials
設定ファイル:C:\Users\<ユーザー名>\.aws\config
上記のファイルは aws configureを利用して設定追加する事もありますが、ドキュメントに記載されているフォーマットに従ってテキストエディタで直接変更する事も可能です。
以下、credentials ファイルの準備とconfig ファイルの準備で認証情報と設定情報を用意していますが、今回はaws configure list コマンドといった何の認証情報が読み込まれたか確認するコマンドで確認したいだけなので、有効な認証情報ではありません。
credentials ファイルの準備
~/.aws/credentials ファイルに、以下のように複数のプロファイルとダミーのアクセスキーを記述します。
[default]
aws_access_key_id = AKIA_DUMMY_DFT
aws_secret_access_key = SECRET_DUMMY_DFT
[dev-profile]
aws_access_key_id = AKIA_DUMMY_DEV
aws_secret_access_key = SECRET_DUMMY_DEV
[prod-profile]
aws_access_key_id = AKIA_DUMMY_PRD
aws_secret_access_key = SECRET_DUMMY_PRD
config ファイルの準備
~/.aws/config ファイルに、各プロファイルのリージョンや出力形式を設定します。
[default]
region = ap-northeast-1
output = json
[profile dev-profile]
region = us-east-1
output = text
[profile prod-profile]
region = us-west-2
output = table
オプションなしで実行してみる(デフォルト設定が利用される)
まずは何も指定せずにコマンドを実行します。
# aws configure listとでどの設定が読み込まれているかを確認できる
aws configure list
# aws configure listではoutputは出力されないのでconfigure get outputで確認
aws configure get output
実行すると上記のように表示されます。
アクセスキー、シークレットキー、リージョンのType項目がshared-credentials-fileやconfig-fileと表示され、先ほど設定した認証情報と設定情報ファイルから読み込まれていることが確認できます。
またaws configure list ではアクセスキーとシークレットキーは末尾4桁だけ表示されるので、表示された_DEFの部分からdefaultに設定した値が利用されている事が確認できます。
コマンドラインオプションを利用してprofileを指定してみる
パラメータを付けない場合、defaultに設定した情報が利用されますが、ここではprofileオプションでdefault以外の別のオプションを指定して実行してみます。
aws configure list --profile dev-profile
aws configure get output --profile dev-profile
この場合はdefaultではなく、順番的に最上位で優先される項目となるため、オプションをつけた場合profileオプションで指定されたdev-profileが優先され利用されます。
環境変数を利用してプロファイルを指定してみる
aws-cliでは環境変数AWS_PROFILEを設定する事でリージョンを指定できます。
# PowerShellで下記を実行すると現在のセッション中で有効な環境変数AWS_PROFILEが定義される
$Env:AWS_PROFILE="prod-profile"
aws configure list
aws configure get output
profileのtypeがenvとなり、設定した環境変数から読み込まれている事がわかります。
configファイルのdefaultではap-northeast-1を指定していますが、環境変数で設定したprod-profileではus-west-2と設定していたため、こちらの値が優先され設定されています。
環境変数、オプションを両方指定するとどうなるか
ここでは環境変数では dev-profile , オプションprofileではprod-profileを設定して実行してみます。
# PowerShellで下記を実行すると現在のセッション中で有効な環境変数AWS_ACCESS_KEY_IDが定義される
$Env:AWS_PROFILE="dev-profile"
aws configure list --profile prod-profile
aws configure get output --profile prod-profile
環境変数とオプション両方設定を行いましたが、優先順位はオプションの方が高いため、オプションでしていした prod-profileの値が設定されている事がわかります。
credentialsファイルとconfigファイルの詳細
最後に、今回設定した2つのファイルについて、もう少し詳しく役割を確認していきます。
credentials ファイル (~/.aws/credentials)
- 役割: 認証情報(アクセスキー)を保管
-
aws_access_key_idとaws_secret_access_keyのペアを記述
config ファイル (~/.aws/config)
- 役割: AWS CLIの動作に関する設定情報や、アクセスキー以外の認証方法(IAM Identity CenterやAssumeRoleなど)を定義
-
書式:
[profile プロファイル名](default以外) - 主な設定項目:
-
region: コマンド実行時のデフォルトリージョン -
output: 出力形式 (json,text,table) -
source_profile: AssumeRole(スイッチロール)で利用する認証情報を持つプロファイルを指定 -
role_arn: AssumeRoleで引き受けるIAMロールのARNを指定
-
まとめ
本記事では、AWS CLIが利用する認証・設定情報の優先順位と、その管理ファイルであるcredentialsとconfigについて解説しました。
ここで説明した認証情報の優先順位のルールを理解しておくことで、「設定したはずなのに反映されない」「意図しない場所にリソースが作成された」などといったトラブルを防ぐことができます。



