aws login で AWS CLI の認証がこう変わる

記事タイトルとURLをコピーする

アプリケーションサービス部の山本です。
教育部門で中途入社社員の教育に勤しんでいます。
が、日々教えられることばかりです。

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 のプロファイル名として書き込まれます。 既に同じ名前のプロファイルが configcredentials に存在する場合は競合するので、既存のプロファイル名とは別の名前を指定してください。

前提条件

  • 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 ポリシーのアタッチだけ忘れずに。

参考

余談

久しく奥秩父山塊に行っていないので、恋しいです。

山本 哲也 (記事一覧)

多分インフラエンジニアです。データ分析に興味あります。

山を走るのが趣味です。今年は 100 マイルレース完走します。