アプリケーションサービス部の山本です。
教育部門で中途入社社員の教育に勤しんでいます。
が、日々教えられることばかりです。
aws login で AWS CLI の認証がこう変わる
結論
| 今まで | これから | |
|---|---|---|
| 手順 | アクセスキーを発行 → ~/.aws/credentials,~/.aws/config に設定 |
マネジメントコンソールでログインやスイッチロールした状態で aws login |
| 認証情報の管理 | 自分でアクセスキーをローテーション | 不要。アクセストークンは15分で期限切れになるが、CLI がコマンド実行時に自動で再取得する(セッションは最大12時間持続) |
| セキュリティ | 長期アクセスキーがローカルに残る | 一時認証情報のみ。aws logout で即削除可能 |
認証情報の発行が要らなくなるし、自動でローテーションしてくれます。
aws login とは
2025年11月に追加された AWS CLI のコマンドです。 ブラウザでマネジメントコンソールにサインインするだけで、CLI用の一時認証情報を取得できます。
AWS CLI v2.32.0 以降で利用可能です。
やってみた
1. マネジメントコンソールにログイン
IAM ユーザーや IAM ロールで AWS マネジメントコンソールにログインします。

2. aws login の実行
AWS CLI が利用可能なターミナルを使用します。
実行コマンドは aws login だけでもいいですが、私の環境では default プロファイルがあるため、エラーになりました。
~ > aws login aws: [ERROR]: An error occurred (Configuration): Profile 'default' is already configured with Access Key credentials. You may run 'aws login --profile new-profile-name' to create a new profile with the specified name. Otherwise you must first manually remove the existing credentials from 'default'. ~ >

--profile を付与し、プロファイル名 test-aws-login を新しく命名して実行します。
実際の運用時にはその AWS アカウントを表すような命名 (例えば production-ec-system など)がいいでしょう。
aws login --profile test-aws-login
標準入力でリージョンを聞かれたので ap-northeast-1 (東京) としました。
~ > aws login --profile test-aws-login No AWS region has been configured. The AWS region is the geographic location of your AWS resources. If you have used AWS before and already have resources in your account, specify which region they were created in. If you have not created resources in your account before, you can pick the region closest to you: https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html. You are able to change the region in the CLI at any time with the command "aws configure set region NEW_REGION". AWS Region [us-east-1]: ap-northeast-1 Attempting to open your default browser. If the browser does not open, open the following URL. If you are unable to open the URL on this device, run this command again with the '--remote' option.

ブラウザが自動で開かない場合は、ターミナルに表示される URL をコピーしてブラウザに貼り付けても OK です。
3. ブラウザで認証
AWS マネジメントコンソールにログインしている WEB ブラウザで認証画面が開きます。 今ログインしている IAM ロールを選択します。

認証に成功したと表示されます。

4. CLI で確認
AWS CLI の画面に戻ります。
最初に命名したプロファイル名 test-aws-login で AWS CLI が使えるようになったと記載されています。

Updated profile test-aws-login to use arn:aws:sts::123456789012:assumed-role/ServerworksControlRoleRO/yamamoto@serverworks.co.jp credentials. Use "--profile test-aws-login" to use the new credentials, such as "aws sts get-caller-identity --profile test-aws-login"
実際に aws sts get-caller-identity --profile test-aws-login と実行すると、マネジメントコンソールにサインインした IAM ロールと同じになっていました。

~ > aws sts get-caller-identity --profile test-aws-login
{
"UserId": "AAAAAAAAAAAAA:yamamoto@serverworks.co.jp",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/ServerworksControlRoleRO/yamamoto@serverworks.co.jp"
}
config に追加された内容
aws login を実行すると、~/.aws/config にプロファイルが自動追加されます。
従来のアクセスキー方式と比較すると、設定内容がかなりシンプルです。
今まで(アクセスキー + スイッチロール)
踏み台アカウント経由の場合:
# ~/.aws/credentials [fumidai] aws_access_key_id = AKIAXXXXXXXXXXXXXXXX aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ~/.aws/config [profile my-account] role_arn = arn:aws:iam::123456789012:role/ServerworksControlRoleRO source_profile = fumidai mfa_serial = arn:aws:iam::000000000000:mfa/yamamoto region = ap-northeast-1
検証アカウントのIAMユーザーを直接使う場合:
# ~/.aws/credentials [my-account] aws_access_key_id = AKIAXXXXXXXXXXXXXXXX aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ~/.aws/config [profile my-account] region = ap-northeast-1
これから(aws login)
# ~/.aws/config [profile test-aws-login] login_session = arn:aws:sts::123456789012:assumed-role/ServerworksControlRoleRO/yamamoto@serverworks.co.jp region = ap-northeast-1
アクセスキーもMFAシリアルもスイッチロール設定も不要。login_session の1行だけです。
認証情報自体は ~/.aws/login/cache/ にキャッシュされ、CLI が自動管理します。
キャッシュの中身
~/.aws/login/cache/ 配下に、プロファイル名のハッシュをファイル名とした JSON が保存されます。
{ "accessToken": { "accessKeyId": "ASIAXXXXXXXXXXXXXXXX", "secretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "sessionToken": "XXXXXXXX...(省略)", "accountId": "123456789012", "expiresAt": "2026-04-15T07:40:06Z" }, "tokenType": "urn:aws:params:oauth:token-type:access_token_sigv4", "clientId": "arn:aws:signin:::devtools/same-device", "refreshToken": "XXXXXXXX...(省略)", "idToken": "XXXXXXXX...(省略)", "dpopKey": "-----BEGIN EC PRIVATE KEY-----\nXXXXXXXX...(省略)\n-----END EC PRIVATE KEY-----\n" }
一時的なアクセスキー・シークレットキー・セッショントークンに加えて、自動リフレッシュ用の refreshToken や署名用の dpopKey(秘密鍵)が含まれています。
aws logout を実行するとこのファイルが削除されます。
--profile の名前に注意
aws login --profile <名前> で指定した名前は、そのまま ~/.aws/config のプロファイル名として書き込まれます。
既に同じ名前のプロファイルが config や credentials に存在する場合は競合するので、既存のプロファイル名とは別の名前を指定してください。
前提条件
- AWS CLI v2.32.0 以降
- マネジメントコンソールにサインインできる IAM ユーザーまたはロール
- 対象の IAM プリンシパルに
SignInLocalDevelopmentAccessマネージドポリシーがアタッチされていること
3つ目が重要です。このポリシーがないとブラウザ側で以下の 403 エラーが表示されます。

You don't have the required permissions to use console credentials with the AWS CLI, SDKs, and local developer tools. Attach the SignInLocalDevelopmentAccess AWS-managed policy to your identity or ask your administrator to update your permissions, then retry aws login.
組織のポリシー管理によっては、管理者への確認が必要です。
SignInLocalDevelopmentAccess ポリシーの中身
これは AWS マネージドポリシーのため、AWS によって内容が更新される可能性があります。 以下は 2026年4月時点(v3)の内容です。最新の定義は AWS Managed Policy Reference で確認してください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "signin:AuthorizeOAuth2Access", "signin:CreateOAuth2Token" ], "Resource": "arn:aws:signin:*:*:oauth2/public-client/*" } ] }
許可されるのは signin サービスの2つのアクションだけです。
| アクション | 内容 | アクセスレベル |
|---|---|---|
signin:AuthorizeOAuth2Access |
ブラウザ経由で認証し、OAuth 2.0 認可コードを取得する | Read |
signin:CreateOAuth2Token |
認可コードをアクセストークン・リフレッシュトークンに交換する | Read |
このポリシーを追加する影響範囲
- 影響は
aws loginの認証フローのみです。S3 や EC2 など他の AWS サービスへの権限は一切含まれていません - アクセスレベルはどちらも Read で、AWS リソースの変更・作成・削除は行いません
- Resource の
arn:aws:signin:*:*:oauth2/public-client/*は、以下の2つの認証方式を両方許可するワイルドカードですlocalhost— 同一デバイス認証。aws loginを実行したマシンのブラウザが自動で開き、そのまま認証する方式remote— リモート認証。aws login --remoteで使う方式。ブラウザがないサーバー(EC2など)でCLIを実行し、表示されたURLを手元のPCのブラウザで開いて認証コードを貼り付ける
- 例えばEC2上での
aws loginを禁止したい場合は、Resource をarn:aws:signin:*:*:oauth2/public-client/localhostに絞ったカスタムポリシーを作成すれば、--remoteだけ拒否できます - Organizations の SCP で
signin:AuthorizeOAuth2Access/signin:CreateOAuth2Tokenを Deny すれば、メンバーアカウント全体でaws loginの利用を禁止できます
つまり、このポリシーをアタッチしても「aws login の認証フローが使えるようになる」だけで、それ以上の権限は付与されません。
認証情報の有効期間
| 項目 | 内容 |
|---|---|
| 自動リフレッシュ | アクセストークンの有効期限は15分。期限切れ後に CLI コマンドを実行すると自動で再取得される |
| 最大セッション期間 | IAM プリンシパルに設定されたセッション期間(最大12時間) |
| 期限切れ時 | 再度 aws login が必要 |
| キャッシュ場所 | ~/.aws/login/cache/ |
| アクセストークンの有効期限 | 15分 |
| ログアウト | aws logout で削除 |
ログアウト時の注意
aws logout --profile <プロファイル名> でキャッシュされた認証情報を削除できます。
~ > aws logout --profile test-aws-login Removed cached login credentials for profile 'test-aws-login'. Note, any local developer tools that have already loaded the access token may continue to use it until its expiration. Access tokens expire in 15 minutes.
ただし、ログアウト時点で既にツールに読み込まれたアクセストークンは、有効期限(15分)が切れるまで使えてしまいます。 最大15分待てば失効します。
まとめ
aws login で、アクセスキーの発行・管理・ローテーションから解放されます。
マネジメントコンソールにログインできれば使えるので、普段のコンソール操作の延長で CLI が使えるようになります。
SignInLocalDevelopmentAccess ポリシーのアタッチだけ忘れずに。
参考
- aws login で AWS への開発者アクセスをシンプルに(AWS公式ブログ日本語訳)
- Login for AWS local development using console credentials(AWS CLI公式ドキュメント)
- AWS CLI/SDK認証の新時代:aws login で変わる開発体験 - サーバーワークスエンジニアブログ
余談
久しく奥秩父山塊に行っていないので、恋しいです。

