- AWS
AWS CLI設定|aws configureとprofile切り替え・優先順位
AWS CLI の設定とは、「どの認証情報で」「どのリージョンに」「どの形式で出力するか」を、設定ファイル・環境変数・コマンドラインオプションのいずれかで AWS CLI に伝えることです。 aws configure を1回実行すれば、ホームディレクトリの .aws フォルダに credentials と config の2つのファイルが作られ、すぐにコマンドを使い始められます。
この記事では、aws configure の対話入力で実際に作られるファイルの中身、[default] と [profile 名前] の書き分け、profile を切り替える3つの方法、そしてコマンドラインオプション → 環境変数 → AssumeRole → IAM Identity Center(SSO)→ credentials → config → コンテナ/インスタンスという優先順位を1枚の表にまとめます。AWS_PROFILE と AWS_DEFAULT_PROFILE を両方設定したときの結果や、「Unable to locate credentials」などのエラー文も、実際に出力させたものを載せています。
確認環境:Ubuntu 24.04 / AWS CLI 2.37.9(Python 3.11.15)。AWS の API をローカルで再現するツール(moto 5.2.3)で実行しました。掲載するコマンドは、実際の AWS でそのまま使える形にしています。出力中のファイルパスとユーザー名は /home/taro に置き換えています(表示は環境に合わせて置き換えています)。アクセスキーは AWS 公式ドキュメントに載っているサンプル値です。
AWS CLI設定の早見表
やりたいこと別のコマンド
| やりたいこと | コマンド |
|---|---|
| 最初の設定をする(対話形式) | aws configure |
| 名前つきの profile を作る | aws configure --profile dev |
| 1項目だけ書き込む | aws configure set region us-west-2 --profile dev |
| 1項目だけ読む | aws configure get region --profile dev |
| いま有効な設定と、その出どころを見る | aws configure list |
| profile 名の一覧を見る | aws configure list-profiles |
| いまの認証情報が誰のものか確かめる | aws sts get-caller-identity |
| 1回のコマンドだけ profile を変える | aws s3 ls --profile dev |
| シェル全体で profile を変える | export AWS_PROFILE=dev |
| 1回のコマンドだけリージョンを変える | aws ec2 describe-instances --region us-west-2 |
設定の優先順位(上ほど強い)
| 順位 | 設定の場所 | 例 | 補足 |
|---|---|---|---|
| 1 | コマンドラインオプション | --profile --region --output |
そのコマンド1回だけに効く |
| 2 | 環境変数 | AWS_ACCESS_KEY_ID AWS_PROFILE AWS_REGION |
シェルを閉じるまで効く |
| 3 | AssumeRole | config の role_arn と source_profile |
別のロールに切り替えて使う |
| 4 | Web ID を使った AssumeRole | web_identity_token_file |
トークンファイルでロールを引き受ける |
| 5 | IAM Identity Center(SSO) | aws configure sso と aws sso login |
config の sso_ で始まる項目 |
| 6 | credentials ファイル | ~/.aws/credentials |
aws configure が書き込む |
| 7 | カスタムプロセス | config の credential_process |
外部コマンドから認証情報を受け取る |
| 8 | config ファイル | ~/.aws/config |
リージョン・出力形式もここ |
| 9 | コンテナの認証情報 | Amazon ECS のタスクロール | コンテナ内で自動的に使われる |
| 10 | インスタンスプロファイル | Amazon EC2 の IAM ロール | インスタンス内で自動的に使われる |
この順序は AWS CLI ユーザーガイド「Configuring settings for the AWS CLI」に載っている一覧と同じ並びです。迷ったら aws configure list を実行すると、どの場所の値が使われているかが TYPE 列に表示されます。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「AWS CLI設定|aws configureとprofile切り替え・優先順位」
aws configure で最初の設定をする
aws configure を実行すると、4つの項目を順番に聞かれます。
aws configure
Tip: You can deliver temporary credentials to the AWS CLI using your AWS Console session by running the command 'aws login'.
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json
| 質問 | 入力するもの | 保存先 | 設定名 |
|---|---|---|---|
| AWS Access Key ID | アクセスキー ID | credentials | aws_access_key_id |
| AWS Secret Access Key | シークレットアクセスキー | credentials | aws_secret_access_key |
| Default region name | 既定のリージョン(東京なら ap-northeast-1) | config | region |
| Default output format | 出力形式(json・yaml・text・table など) | config | output |
2回目以降は [None] の部分に現在の値が表示されます(キーは末尾4文字だけ、リージョンと出力形式はそのまま)。何も入力せず Enter を押した項目は、いまの値がそのまま残ります。 リージョンだけ変えたいときは、キーの2問を Enter で飛ばせば済みます。
名前つきの profile を作るときは --profile を付けます。
aws configure --profile dev
1項目だけ書き込む・読む
対話形式を使わずに、1項目ずつ書き込むこともできます。スクリプトから設定するときに便利です。
aws configure set region ap-northeast-3 --profile stg
aws configure set output text --profile stg
aws configure get region --profile dev
aws configure get output --profile dev
aws configure get default.region
aws configure get profile.dev.region
get の4行の実行結果:
us-west-2
table
ap-northeast-1
us-west-2
default.region や profile.dev.region のように、「profile名.設定名」の形でも指定できます。
credentials と config の書式
ここまでの操作(aws configure、aws configure --profile dev、aws configure set 2回)で実際に作られたファイルの中身です。
~/.aws/credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[dev]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
~/.aws/config
[default]
region = ap-northeast-1
output = json
[profile dev]
region = us-west-2
output = table
[profile stg]
region = ap-northeast-3
output = text
2つのファイルの違い
| 比べる点 | credentials | config |
|---|---|---|
| 置き場所(Linux・macOS) | ~/.aws/credentials |
~/.aws/config |
| 置き場所(Windows) | %UserProfile%\.aws\credentials |
%UserProfile%\.aws\config |
| 入れるもの | アクセスキー、シークレットキー、セッショントークン | リージョン、出力形式、ロール、SSO などの設定 |
| 既定の profile の見出し | [default] |
[default] |
| 名前つき profile の見出し | [dev] |
[profile dev] |
| 場所を変える環境変数 | AWS_SHARED_CREDENTIALS_FILE |
AWS_CONFIG_FILE |
いちばんの注意点は見出しの書き方です。credentials では [dev]、config では [profile dev] と書きます。 [default] だけはどちらのファイルでも同じ形です。
見出しを書き間違えるとどうなるか
config に profile を付けずに [dev2] と書き、--profile dev2 で呼んでみます。
[default]
region = ap-northeast-1
[dev2]
region = us-west-2
aws configure list --profile dev2
NAME : VALUE : TYPE : LOCATION
profile : dev2 : manual : --profile
aws: [ERROR]: The config profile (dev2) could not be found
反対に、credentials に [profile dev3] と書いた場合も同じエラーになり、aws configure list-profiles には profile dev3 という名前で表示されました。
| 書いた見出し | ファイル | 結果 | 正しい書き方 |
|---|---|---|---|
[dev2] |
config | The config profile (dev2) could not be found | [profile dev2] |
[profile dev3] |
credentials | The config profile (dev3) could not be found | [dev3] |
手で編集したあとは aws configure list-profiles で名前を見直すと、書き間違いにすぐ気づけます。
同じ profile が両方のファイルにあるとき
アクセスキーは config にも書けます。同じ名前の profile で両方にキーがある場合を確かめます。まず config だけに書いた状態です。
NAME : VALUE : TYPE : LOCATION
profile : both : manual : --profile
access_key : ****************0002 : config-file :
secret_key : ****************cret : config-file :
region : ap-northeast-1 : config-file : /home/taro/.aws/config
続いて、credentials にも [both] を書き足した状態です。
NAME : VALUE : TYPE : LOCATION
profile : both : manual : --profile
access_key : ****************0001 : shared-credentials-file :
secret_key : ****************cret : shared-credentials-file :
region : ap-northeast-1 : config-file : /home/taro/.aws/config
TYPE 列が config-file から shared-credentials-file に変わり、credentials のキーが優先されました。公式ドキュメントにも「両方のファイルに同じ名前の profile の認証情報がある場合、credentials ファイルのキーが優先される」と書かれています。キーは credentials、それ以外は config、と分けておくと見通しがよくなります。
いまの設定を確認する3つのコマンド
aws configure list:値と出どころを見る
aws configure list
NAME : VALUE : TYPE : LOCATION
profile : <not set> : None : None
access_key : ****************MPLE : shared-credentials-file :
secret_key : ****************EKEY : shared-credentials-file :
region : ap-northeast-1 : config-file : /home/taro/.aws/config
| TYPE 列の表示 | 意味 |
|---|---|
manual |
コマンドラインオプション(--profile など)で指定 |
env |
環境変数から取得 |
shared-credentials-file |
credentials ファイルから取得 |
config-file |
config ファイルから取得 |
assume-role |
role_arn の設定でロールを引き受けて取得 |
custom-process |
credential_process の外部コマンドから取得 |
None |
どこにも設定がない |
aws configure list-profiles:profile 名の一覧
aws configure list-profiles
default
dev
stg
credentials と config の両方から名前が集められます。
aws sts get-caller-identity:誰として接続しているか
aws sts get-caller-identity
{
"UserId": "AKIAIOSFODNN7EXAMPLE",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:user/moto"
}
--profile dev を付けると、dev の output = table が効いて表形式になります。
aws sts get-caller-identity --profile dev
----------------------------------------------------
| GetCallerIdentity |
+---------+----------------------------------------+
| Account| 123456789012 |
| Arn | arn:aws:sts::123456789012:user/moto |
| UserId | AKIAIOSFODNN7EXAMPLE |
+---------+----------------------------------------+
ローカルの再現ツールで実行しているため Arn の末尾が user/moto になっています。実際の AWS では、ここに IAM ユーザー名や引き受けたロール名が表示されます。作業を始める前に Account と Arn を見て、意図したアカウントにつながっているかを確かめるのがおすすめです。
| コマンド | わかること | 通信 |
|---|---|---|
aws configure list |
使われる値と、その出どころ | しない(手元の設定を読むだけ) |
aws configure list-profiles |
定義されている profile 名 | しない |
aws sts get-caller-identity |
アカウント ID と、誰として認証されたか | する(認証情報が有効かも確かめられる) |
profile を切り替える3つの方法
| 方法 | 書き方 | 効く範囲 | 向いている場面 |
|---|---|---|---|
| コマンドラインオプション | aws s3 ls --profile dev |
そのコマンド1回 | たまに別の環境を見る |
| 環境変数(その場だけ) | AWS_PROFILE=dev aws s3 ls |
そのコマンド1回 | スクリプトの1行 |
| 環境変数(シェル全体) | export AWS_PROFILE=dev |
シェルを閉じるまで | しばらく同じ環境で作業する |
--profile で切り替える
aws configure list --profile dev
NAME : VALUE : TYPE : LOCATION
profile : dev : manual : --profile
access_key : ****************MPLE : shared-credentials-file :
secret_key : ****************EKEY : shared-credentials-file :
region : us-west-2 : config-file : /home/taro/.aws/config
環境変数 AWS_PROFILE で切り替える
export AWS_PROFILE=dev
aws configure list
NAME : VALUE : TYPE : LOCATION
profile : dev : env : ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE']
access_key : ****************MPLE : shared-credentials-file :
secret_key : ****************EKEY : shared-credentials-file :
region : us-west-2 : config-file : /home/taro/.aws/config
元に戻すときは unset AWS_PROFILE を実行します。OS ごとの環境変数の書き方は次のとおりです(AWS CLI ユーザーガイド「Configuring environment variables for the AWS CLI」に載っている書式です)。
| 環境 | 設定 |
|---|---|
| Linux・macOS | export AWS_PROFILE=dev |
| Windows コマンドプロンプト(いまの画面だけ) | set AWS_PROFILE=dev |
| Windows コマンドプロンプト(以降に開く画面すべて) | setx AWS_PROFILE dev |
| PowerShell | $Env:AWS_PROFILE="dev" |
AWS_PROFILE と AWS_DEFAULT_PROFILE の違い
aws configure list の LOCATION 列に ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE'] と出ているとおり、AWS CLI 2.37.9 はどちらの環境変数も読み取ります。では両方に別の値を入れるとどうなるでしょうか。
AWS_PROFILE=stg AWS_DEFAULT_PROFILE=dev aws configure list
NAME : VALUE : TYPE : LOCATION
profile : stg : env : ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE']
access_key : <not set> : None : None
secret_key : <not set> : None : None
region : ap-northeast-3 : config-file : /home/taro/.aws/config
AWS_PROFILE の stg が選ばれました。 さらに --profile を付けると、そちらが最優先です。
AWS_PROFILE=stg aws configure list --profile dev
NAME : VALUE : TYPE : LOCATION
profile : dev : manual : --profile
access_key : ****************MPLE : shared-credentials-file :
secret_key : ****************EKEY : shared-credentials-file :
region : us-west-2 : config-file : /home/taro/.aws/config
| 設定した内容 | 選ばれた profile |
|---|---|
AWS_PROFILE=dev だけ |
dev |
AWS_DEFAULT_PROFILE=dev だけ |
dev |
AWS_PROFILE=stg と AWS_DEFAULT_PROFILE=dev |
stg(AWS_PROFILE) |
AWS_PROFILE=stg と --profile dev |
dev(--profile) |
公式ドキュメントの環境変数一覧に載っているのは AWS_PROFILE です。これから設定するなら AWS_PROFILE に統一しておくと、両方が設定されていて迷う場面がなくなります。
優先順位を実際に確かめる
早見表の順位が、実際にどう表れるかを順に見ていきます。
環境変数のキーと profile の関係
環境変数にアクセスキーを入れた状態で、何も指定せずに実行します。
export AWS_ACCESS_KEY_ID=AKIAENVEXAMPLE00001
export AWS_SECRET_ACCESS_KEY=x
aws configure list
NAME : VALUE : TYPE : LOCATION
profile : <not set> : None : None
access_key : ****************0001 : env :
secret_key : ****************x : env :
region : ap-northeast-1 : config-file : /home/taro/.aws/config
credentials に [default] があっても、環境変数のキーが使われました(順位2が順位6より強い)。同じ状態で AWS_PROFILE=dev を足しても、キーは環境変数のままです。
NAME : VALUE : TYPE : LOCATION
profile : dev : env : ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE']
access_key : ****************0001 : env :
secret_key : ****************x : env :
region : us-west-2 : config-file : /home/taro/.aws/config
リージョンは dev のものに変わったのに、キーは環境変数のまま、という組み合わせになっています。一方、--profile dev をコマンドラインで付けると、dev のキーが使われました。
aws configure list --profile dev
NAME : VALUE : TYPE : LOCATION
profile : dev : manual : --profile
access_key : ****************MPLE : shared-credentials-file :
secret_key : ****************EKEY : shared-credentials-file :
region : us-west-2 : config-file : /home/taro/.aws/config
| 環境変数のキー | profile の指定方法 | 使われたキー |
|---|---|---|
| あり | 指定なし | 環境変数 |
| あり | AWS_PROFILE=dev |
環境変数 |
| あり | --profile dev |
dev の credentials |
「profile を切り替えたのに別のアカウントにつながる」ときは、AWS_ACCESS_KEY_ID が環境変数に残っていないかを確かめると原因が見つかりやすくなります。env | grep AWS_ で一覧でき、unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN で外せます。
リージョンの優先順位
AWS_REGION=eu-west-1 AWS_DEFAULT_REGION=us-east-1 aws configure list
region : eu-west-1 : env : ['AWS_REGION', 'AWS_DEFAULT_REGION']
両方あるときは AWS_REGION が選ばれました。AWS_DEFAULT_REGION=us-east-1 だけを設定して --profile dev(config では us-west-2)を付けた場合は、次のように環境変数が勝ちます。
region : us-east-1 : env : ['AWS_REGION', 'AWS_DEFAULT_REGION']
--region を付ければ、それが最優先です。dev(us-west-2)を指定したうえで --region eu-central-1 を付けて、返ってくるリージョン名を確かめました。
aws ec2 describe-availability-zones --region eu-central-1 --profile dev \
--query 'AvailabilityZones[0].RegionName' --output text
eu-central-1
出力形式の優先順位
AWS_DEFAULT_OUTPUT=text aws sts get-caller-identity
AWS_DEFAULT_OUTPUT=text aws sts get-caller-identity --output yaml
123456789012 arn:aws:sts::123456789012:user/moto AKIAIOSFODNN7EXAMPLE
Account: '123456789012'
Arn: arn:aws:sts::123456789012:user/moto
UserId: AKIAIOSFODNN7EXAMPLE
config の output = json より環境変数の text が強く、さらに --output yaml がそれより強い、という結果です。
項目ごとの優先順位まとめ
| 項目 | 1番目 | 2番目 | 3番目 | 4番目 |
|---|---|---|---|---|
| profile | --profile |
AWS_PROFILE |
AWS_DEFAULT_PROFILE |
[default] |
| リージョン | --region |
AWS_REGION |
AWS_DEFAULT_REGION |
config の region |
| 出力形式 | --output |
AWS_DEFAULT_OUTPUT |
config の output |
既定の json |
| アクセスキー | --profile で選んだ profile |
環境変数 AWS_ACCESS_KEY_ID |
credentials | config |
よく使う環境変数
| 環境変数 | 役割 |
|---|---|
AWS_ACCESS_KEY_ID |
アクセスキー ID |
AWS_SECRET_ACCESS_KEY |
シークレットアクセスキー |
AWS_SESSION_TOKEN |
一時的な認証情報のセッショントークン |
AWS_PROFILE |
使う profile 名 |
AWS_REGION |
リージョン(AWS SDK と共通。AWS_DEFAULT_REGION より優先) |
AWS_DEFAULT_REGION |
既定のリージョン |
AWS_DEFAULT_OUTPUT |
出力形式 |
AWS_CONFIG_FILE |
config ファイルの場所 |
AWS_SHARED_CREDENTIALS_FILE |
credentials ファイルの場所 |
AWS_PAGER |
出力を表示するページャー(空にするとそのまま表示) |
AWS_CA_BUNDLE |
HTTPS の検証に使う証明書バンドルのパス |
AWS_ENDPOINT_URL |
すべてのサービスの接続先エンドポイント |
AWS_MAX_ATTEMPTS |
再試行の最大回数 |
AWS_RETRY_MODE |
再試行の方式(legacy・standard・adaptive) |
AWS_EC2_METADATA_DISABLED |
EC2 インスタンスメタデータの利用をやめる |
AWS_CONFIG_FILE と AWS_SHARED_CREDENTIALS_FILE を作業フォルダ内のファイルに向けると、普段の ~/.aws に触れずに設定を試せます。この記事の確認もその方法で行いました。
export AWS_CONFIG_FILE=$PWD/cfg/config
export AWS_SHARED_CREDENTIALS_FILE=$PWD/cfg/credentials
ロールの切り替え・外部コマンド・SSO の profile
アクセスキーを直接書く以外の profile も、config に書けます。
AssumeRole の profile(role_arn と source_profile)
[profile admin]
role_arn = arn:aws:iam::123456789012:role/AdminRole
source_profile = default
role_session_name = taro
region = ap-northeast-1
source_profile は「このロールを引き受ける元になる profile」です。--profile admin を付けるだけで、CLI がロールの引き受けまで行います。
aws sts get-caller-identity --profile admin
aws configure list --profile admin
{
"UserId": "AROARZPUZDIKBWFEGQJ4N:taro",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/AdminRole/taro"
}
NAME : VALUE : TYPE : LOCATION
profile : admin : manual : --profile
access_key : ****************CF7L : assume-role :
secret_key : ****************nxf2 : assume-role :
region : ap-northeast-1 : config-file : /home/taro/.aws/config
Arn が assumed-role/AdminRole/taro になり、TYPE 列は assume-role と表示されました。公式ドキュメントでは、role_arn には source_profile か credential_source のどちらか一方を組み合わせる、と説明されています。EC2 インスタンスやコンテナの中で使うときは、credential_source に Environment・Ec2InstanceMetadata・EcsContainer のいずれかを指定します。
credential_process の profile
認証情報を外部コマンドから受け取る設定です。コマンドは、決められた形の JSON を標準出力に返します。
[profile ext]
credential_process = /home/taro/bin/getcred.sh
region = ap-northeast-1
#!/bin/sh
# getcred.sh
cat <<JSON
{"Version": 1, "AccessKeyId": "AKIAPROCEXAMPLE00001", "SecretAccessKey": "procsecret"}
JSON
aws configure list --profile ext
NAME : VALUE : TYPE : LOCATION
profile : ext : manual : --profile
access_key : ****************0001 : custom-process :
secret_key : ****************cret : custom-process :
region : ap-northeast-1 : config-file : /home/taro/.aws/config
TYPE 列が custom-process になり、スクリプトが返したキーが使われています。
IAM Identity Center(SSO)の profile
AWS CLI v2 では、IAM Identity Center を使ったサインインにも対応しています。公式ドキュメントに載っている config の書式は次のとおりです。
[profile dev]
sso_session = my-sso
sso_account_id = 111122223333
sso_role_name = SampleRole
[sso-session my-sso]
sso_region = us-east-1
sso_start_url = https://my-sso-portal.awsapps.com/start
[sso-session 名前] という見出しにサインイン先をまとめ、各 profile から sso_session で参照する形です。公式ドキュメントによると、この設定は aws configure sso を実行すると書き込まれ、aws sso login でサインインすると認証情報が使えるようになります。
SSO の項目がない profile に対して aws sso login を実行すると、次のメッセージが出ます。
aws sso login --profile dev
aws: [ERROR]: An error occurred (Configuration): Missing the following required SSO configuration values: sso_start_url, sso_region. To make sure this profile is properly configured to use SSO, please run: aws configure sso
profile の種類まとめ
| 種類 | config に書く主な項目 | aws configure list の TYPE |
|---|---|---|
| アクセスキー | (credentials に aws_access_key_id など) |
shared-credentials-file |
| AssumeRole | role_arn と source_profile(または credential_source) |
assume-role |
| 外部コマンド | credential_process |
custom-process |
| IAM Identity Center | sso_session sso_account_id sso_role_name |
サインイン後に利用できる |
エラーの原因と直し方
エラー早見表
| エラー文 | 主な原因 | 直し方 |
|---|---|---|
| Unable to locate credentials | どの場所にも認証情報がない/選んだ profile にキーがない | aws configure で設定する/--profile と AWS_PROFILE を見直す |
| The config profile (xxx) could not be found | 指定した名前の profile がない/見出しの書き間違い | aws configure list-profiles で名前を確かめる/[profile xxx] と [xxx] を書き分ける |
| You must specify a region | リージョンがどこにも設定されていない | --region を付ける/aws configure set region で保存する |
| Partial credentials found in env, missing: AWS_SECRET_ACCESS_KEY | 環境変数のキーが片方だけ | 両方そろえる/使わないなら unset する |
Unable to locate credentials
設定ファイルが1つもない状態で、リージョンだけ指定して実行します。
aws sts get-caller-identity --region ap-northeast-1
aws: [ERROR]: An error occurred (NoCredentials): Unable to locate credentials. You can configure credentials by running "aws login".
設定ファイルがあっても、選んだ profile にキーがなければ同じエラーになります。config にリージョンだけを書いた stg を指定した例です。
aws sts get-caller-identity --profile stg
aws: [ERROR]: An error occurred (NoCredentials): Unable to locate credentials. You can configure credentials by running "aws login".
確認の手順は次の表のとおりです。
| 順番 | 確認すること | コマンド |
|---|---|---|
| 1 | どの profile が選ばれ、キーが <not set> になっていないか |
aws configure list |
| 2 | 環境変数で別の profile が指定されていないか | echo $AWS_PROFILE |
| 3 | profile 名が存在するか | aws configure list-profiles |
| 4 | キーを保存する | aws configure --profile stg |
設定ファイルがない状態の aws configure list は、すべて <not set> と表示されます。
NAME : VALUE : TYPE : LOCATION
profile : <not set> : None : None
access_key : <not set> : None : None
secret_key : <not set> : None : None
region : <not set> : None : None
The config profile (xxx) could not be found
aws sts get-caller-identity --profile prod
aws: [ERROR]: The config profile (prod) could not be found
環境変数で存在しない名前を指定している場合は、--profile を付けていないコマンドすべてで同じエラーが出ます。
export AWS_PROFILE=prod
aws s3 ls
aws: [ERROR]: The config profile (prod) could not be found
| 原因 | 見分け方 | 直し方 |
|---|---|---|
| 名前の打ち間違い | aws configure list-profiles に出てこない |
正しい名前を指定する |
| 環境変数に以前の名前が残っている | echo $AWS_PROFILE で値が出る |
unset AWS_PROFILE |
config に [prod] と書いた |
一覧に出てこない | [profile prod] に直す |
credentials に [profile prod] と書いた |
一覧に profile prod と出る |
[prod] に直す |
You must specify a region
config に region がなく、環境変数にもない状態です。
aws ec2 describe-instances
aws: [ERROR]: An error occurred (NoRegion): You must specify a region. You can also configure your region by running "aws configure".
--region を付けると通ります。
aws ec2 describe-instances --region ap-northeast-1
{
"Reservations": []
}
| 直し方 | コマンド | 効く範囲 |
|---|---|---|
| その場で指定 | --region ap-northeast-1 |
コマンド1回 |
| 環境変数 | export AWS_REGION=ap-northeast-1 |
シェルを閉じるまで |
| 設定ファイルに保存 | aws configure set region ap-northeast-1 |
既定の profile でずっと |
| profile ごとに保存 | aws configure set region us-west-2 --profile dev |
その profile でずっと |
認証情報もリージョンもない状態では、今回の環境ではリージョンのエラーが先に表示されました。1つ直したら次のエラーが出ることもあるので、aws configure list で4行すべてを見ておくと早く片づきます。
環境変数のキーが片方だけのとき
export AWS_ACCESS_KEY_ID=AKIAENVEXAMPLE00001
aws sts get-caller-identity --region ap-northeast-1
aws: [ERROR]: Partial credentials found in env, missing: AWS_SECRET_ACCESS_KEY
AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY はセットで設定します。
設定を整えるためのチェックリスト
| 確認すること | コマンド・方法 |
|---|---|
| 意図したアカウント・ユーザーにつながっているか | aws sts get-caller-identity |
| 値の出どころが想定どおりか | aws configure list の TYPE 列 |
| 環境変数に以前のキーが残っていないか | env | grep AWS_ |
| profile の見出しが正しいか | credentials は [dev]、config は [profile dev] |
| profile の環境変数は1つに統一されているか | AWS_PROFILE を使う |
| リージョンと出力形式が profile ごとに決まっているか | aws configure get region --profile dev |
| 設定を試すときに普段のファイルを守れているか | AWS_CONFIG_FILE と AWS_SHARED_CREDENTIALS_FILE を作業用に向ける |
よくある質問
Q. credentials と config はどう使い分けますか?
A. アクセスキー・シークレットキー・セッショントークンは credentials、リージョン・出力形式・ロールや SSO の設定は config に書くのが基本です。見出しは credentials が [dev]、config が [profile dev] です。両方に同じ profile のキーがある場合は credentials が優先されます。
Q. AWS_PROFILE と AWS_DEFAULT_PROFILE はどちらを使えばよいですか?
A. AWS_PROFILE がおすすめです。AWS CLI 2.37.9 ではどちらも読み取られ、両方に別の値があるときは AWS_PROFILE が選ばれました。公式ドキュメントの環境変数一覧に載っているのも AWS_PROFILE です。
Q. profile を切り替えたのに、別のアカウントにつながります。
A. 環境変数に AWS_ACCESS_KEY_ID が残っている可能性があります。AWS_PROFILE で切り替えた場合は環境変数のキーが使われ、--profile で切り替えた場合はその profile のキーが使われました。aws configure list の TYPE 列が env になっていないかを確かめ、不要なら unset します。
Q. 設定ファイルを直接編集してもよいですか?
A. はい、テキストエディタで編集できます。編集後は aws configure list-profiles で名前が正しく読まれているか、aws configure list --profile 名前 で値が想定どおりかを見ておくと安心です。
まとめ
aws configureで credentials(キー)と config(リージョン・出力形式)の2ファイルが作られる- 見出しは credentials が
[dev]、config が[profile dev]。[default]だけは共通 - 優先順位はコマンドラインオプション → 環境変数 → AssumeRole → SSO → credentials → config → コンテナ/インスタンスの順
- profile の切り替えは
--profile、AWS_PROFILE、export AWS_PROFILEの3通り。両方の環境変数があるときはAWS_PROFILEが選ばれた - 環境変数のキーは
AWS_PROFILEより強く、--profileには譲る。切り替わらないときはenv | grep AWS_で確認 aws configure listの TYPE 列で値の出どころ、aws sts get-caller-identityで接続先を確かめる- 3つのエラーは、認証情報・profile 名・リージョンのどれが見つからないかを示している。エラー早見表から直し方を選ぶ
参考・出典
- AWS CLI ユーザーガイド「Configuring settings for the AWS CLI」 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
- AWS CLI ユーザーガイド「Configuration and credential file settings in the AWS CLI」 https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
- AWS CLI ユーザーガイド「Configuring environment variables for the AWS CLI」 https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「AWS CLI設定|aws configureとprofile切り替え・優先順位」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。