aws login コマンドを実行したときに何が起きているか調べてみた

aws login コマンドを実行したときに何が起きているか調べてみた

2026.04.09

はじめに

こんにちは、けーまです。

未だに花粉症が収まらなくて辛いです。過去にないぐらい花粉症が長引いていています・・・

さて、個人アカウントにスイッチロールしてAWSで検証をしているのですが、CLIの時、どうするのが良いのかわかりませんでした。上司に聞いたところ aws login をすると良いと教えてもらい、仕組みについて整理することにしました。

結論

aws login を実行すると、以下の変化が起きます。

変化するもの 内容
~/.aws/config ログインしたプロファイルのエントリが追加される
~/.aws/credentials 変化なし
~/.aws/login/cache/*.json 一時クレデンシャルとリフレッシュトークンが書き込まれる

AWS loginとは?

2025年11月19日、AWS CLI の認証をブラウザベースで実現する新コマンド「aws login」がリリースされました。AWS マネジメントコンソールにログイン済みのブラウザで承認するだけで、ローカルの AWS CLI が利用できるようになります。

  • 開発用端末にアクセスキーを保存したくない場合に有効
  • ブラウザでの承認だけで済むため、MFA の手間が省ける

やること

aws login を実行したときに何が起きているかを、ファイルの変化を観察しながら確認します。具体的には以下を試しました。

  • aws login 実行前後でファイルがどう変わるか確認する
  • credentials ファイルを削除したらどうなるか確認する
  • キャッシュファイルを削除したらどうなるか確認する
  • プロファイル名を変えてログインしたときのキャッシュの挙動を確認する
  • キャッシュファイルの中身を確認する

環境

項目 内容
OS macOS 26.4
AWS CLI v2.34.25

やってみた

初期状態の確認

まず、ログイン前の ~/.aws/ の中身を確認しました。

$ ll ~/.aws/
drwxr-xr-x  cli/
-rw-------  config
-rw-------  credentials
drwxr-xr-x  login/

configcredentials の内容は以下のとおりです。

# ~/.aws/config
[default]
region = ap-northeast-1
output = yaml

省略
# ~/.aws/credentials
[default]
aws_access_key_id = <access-key-id>
aws_secret_access_key = <secret-access-key>

aws login を実行する

aws login --profile test を実行すると、リージョンを聞かれたあとにブラウザが起動します。マネジメントコンソールにログイン済みのブラウザでアクセスを承認するだけで認証が完了します。

$ aws login --profile test
AWS Region [us-east-1]: ap-northeast-1
Attempting to open your default browser. If the browser does not open, open the following URL.
...

Updated profile test to use arn:aws:sts::<target-account-id>:assumed-role/<username>/<username> credentials.
Use "--profile test" to use the new credentials, such as "aws sts get-caller-identity --profile test"

ファイルの変化を確認する

ログイン後、~/.aws/config[profile test] が追加されていました。

# ~/.aws/config(ログイン後)
[default]
region = ap-northeast-1
output = yaml

省略

[profile test]
login_session = arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>
region = ap-northeast-1

credentials は変化なしです。代わりに ~/.aws/login/cache/ にキャッシュファイルが新しく作られていました。

$ ll ~/.aws/login/cache/
-rw-------  1 <cache-file-hash>.json

動作確認

まず --profile なしで実行すると、デフォルトプロファイル(IAM ユーザー)の認証情報が使われます。

$ aws sts get-caller-identity
Account: '<source-account-id>'
Arn: arn:aws:iam::<source-account-id>:user/<username>

--profile test を指定するとスイッチロール先のアカウントになります。

$ aws sts get-caller-identity --profile test
{
    "UserId": "<role-id>:<username>",
    "Account": "<target-account-id>",
    "Arn": "arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>"
}

AWS_PROFILE 環境変数に test をセットすれば、--profile を省略してもスイッチロール先として動作します。

$ export AWS_PROFILE=test
$ aws sts get-caller-identity
{
    "UserId": "<role-id>:<username>",
    "Account": "<target-account-id>",
    "Arn": "arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>"
}

credentials ファイルを削除したらどうなるか

AWS_PROFILE を未設定(デフォルトプロファイル)に戻した状態で、~/.aws/credentials を削除して実行してみます。

$ unset AWS_PROFILE
$ rm ~/.aws/credentials
$ aws sts get-caller-identity
aws: [ERROR]: An error occurred (NoCredentials): Unable to locate credentials.
You can configure credentials by running "aws login".

デフォルトプロファイルは credentials のアクセスキーを使うように設定していたため、ファイルがなくなると認証できません。

一方、aws login で作成した test プロファイルに切り替えると、credentials がなくても認証が通ります。

$ export AWS_PROFILE=test
$ aws sts get-caller-identity
{
    "UserId": "<role-id>:<username>",
    "Account": "<target-account-id>",
    "Arn": "arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>"
}

aws login で作成したプロファイルは credentials ではなく ~/.aws/login/cache/ のキャッシュファイルを参照するため、credentials が存在しなくても認証できます。

キャッシュファイルを削除したらどうなるか

$ rm ~/.aws/login/cache/<cache-file-hash>.json
$ aws sts get-caller-identity
aws: [ERROR]: Error loading login session token: Unable to load a existing login session
for session arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>,
Please reauthenticate with 'aws login'.

キャッシュがなくなると認証情報を取得できなくなります。aws login を再実行すれば復帰できます。

複数プロファイルでキャッシュファイルはどうなるか

異なるプロファイル名でログインした場合

aws login --profile testVer02aws login --profile testVer03 とプロファイル名を変えてログインしても、~/.aws/login/cache/ のファイルは 同一のハッシュ名のファイル1つだけ でした。

$ ll ~/.aws/login/cache/
-rw-------  1 <cache-file-hash>.json   ← 1ファイルのみ

~/.aws/config 側には各プロファイルのエントリが追加されましたが、キャッシュファイルは1つのままです。

[profile test]
login_session = arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>
region = ap-northeast-1

[profile testVer02]
login_session = arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>
region = ap-northeast-1

[profile testVer03]
login_session = arn:aws:sts::<target-account-id>:assumed-role/<username>/<username>
region = ap-northeast-1

同じプロファイル名で再ログインした場合

testVer02 で2回連続してログインしてみたところ、キャッシュファイルのサイズが変化していました。

# 1回目
-rw-------  3682  <cache-file-hash>.json

# 2回目
-rw-------  3680  <cache-file-hash>.json

ファイル名は同じでも中身は毎回新しいトークンで上書きされています。

ドキュメントには以下の記載があります。

The authentication token is cached to disk under the .aws/login/cache directory with a filename based on the resolved profile.

「resolved profile(解決済みプロファイル)の内容をもとにファイル名が決まる」とのことなので、プロファイル名ではなく最終的に解決されたセッション情報(ログイン先のロールなど)がハッシュの元になっていると思われます。同じロールへのログインであれば、プロファイル名が違っても同じファイルが上書きされるのはこのためと考えられます。

キャッシュファイルの中身

キャッシュファイルには以下の情報が含まれていました。なお、キャッシュファイルの構造は公式ドキュメントには文書化されていないため、実際のファイル内容をもとに確認しています。

{
  "accessToken": {
    "accessKeyId": "<temp-access-key-id>",
    "secretAccessKey": "<temp-secret-access-key>",
    "sessionToken": "<session-token>",
    "accountId": "<target-account-id>",
    "expiresAt": "2026-04-08T13:19:09Z"
  },
  "tokenType": "urn:aws:params:oauth:token-type:access_token_sigv4",
  "clientId": "arn:aws:signin:::devtools/same-device",
  "refreshToken": "<refresh-token>",
  "idToken": "<id-token>",
  "dpopKey": "<dpop-private-key>"
}

各フィールドの意味は以下のとおりです。

フィールド 説明
accessToken STS が発行した一時的なクレデンシャル一式
accessToken.expiresAt 一時クレデンシャルの有効期限
tokenType トークンの種類(SigV4 署名方式)
clientId クライアント識別子(same-device = 同一端末)
refreshToken クレデンシャル期限切れ時の自動更新用トークン
idToken OpenID Connect の ID トークン(JWT 形式)
dpopKey DPoP 用の EC 秘密鍵(トークンの所有証明に使用)

expiresAt を過ぎると refreshToken を使って自動的に再取得される仕組みと思われます。公式ドキュメントによると、15分ごとに自動リフレッシュされ、最大12時間有効とのことです。

まとめ

aws login を実行したときに何が起きているかを、ファイルの変化を観察しながら確認しました。

  • ~/.aws/config にプロファイルのエントリが追加される(credentials は変化しない)
  • 一時クレデンシャルやリフレッシュトークンは ~/.aws/login/cache/ に保存される
  • aws login で作成したプロファイルは credentials に依存しないため、credentials を削除しても認証できる
  • キャッシュファイルを削除すると再認証が必要になる
  • プロファイル名が違っても同じロールへのログインであれば同じキャッシュファイルが上書きされる

アクセスキーをローカルに置かなくてよくなるのは大きなメリットだと感じました。

参考

この記事をシェアする

関連記事