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期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?