0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

aws loginを使用したCLIアクセスを試す。

0
Posted at

はじめに

昨年の2025年11月に新たに公開されたaws loginを使うことで、アクセスキー、シークレットアクセスキーを使った永続キーによるアクセスではなく、一時キーでAWS CLIによるアクセスができるようになりました。

aws loginコマンドを使ったやり方や動作、今までと同じようにアクセスするための設定等をまとめていこうと思います。

aws loginについて

同じく一時キーを使ったAWSのサービスとなるIAM Identity Centerでは、以前から一時キーでマネジメントコンソールアクセスやAWS CLIアクセスができましたが、Identity Centerを使用する場合、一般的にはAWS Organizationも使用する必要があることから導入のハードルが高いものとなります。

今回、aws loginの追加により、通常のIAMユーザでのアクセスでも永続キーを払い出さなくて済むようになったため、永続キーの漏洩によるリスク等が軽減されました。

そのため、IAMユーザのアクセスキー、シークレットアクセスキーを使ったAWS CLIアクセスを行っているシステムは早急にaws loginを使った一時クレデンシャルアクセスへの切り替えを検討しましょう。

aws loginによるAWS CLIログイン

AWS CLI v2を導入し、aws loginコマンドを使用したCLIアクセスを行うまでの手順を以下よりまとめていこうと思います。

テスト用IAMユーザの作成

CLI設定を行う前に、先にテスト用のIAMユーザを作成しておきます。

マネジメントコンソールの検索ボックスから「IAM」を検索し、「ユーザー」→「ユーザーの作成」より作成を行います。

aws loginの仕組みとして、マネジメントコンソールへログインした際のクレデンシャルを使ってAWS CLIを実行する動きとなるため、以下のようにAWSマネジメントコンソールへのアクセスは提供するようにしてください。

Monosnap_20260222_133821.png

AWS CLI v2のインストール

aws loginは以下のAWS CLI v2の変更ログを見ると2.32.0で導入されているようです。

AWS CLI v2がインストールされていない、もしくは古いバージョンを使用している場合は以下の手順を参考にインストール・アップデートしましょう。

aws loginでのCLI接続

私のテスト環境にはdefaultプロファイル設定が存在していることから、aws loginコマンドでの接続を確認するため、一旦「~/.aws/config」と「~/.aws/credentials」に記載されているdefaultプロファイルをコメントアウトしておきます。

コメントアウト後、適当なAWS CLIコマンドを実行すると、この時点では何もしていないので、以下のようにコマンドが失敗します。

親切なことに、aws loginを使用して認証情報を取得できると紹介してくれています。

defaultプロファイルコメントアウト後のコマンド実行
$ aws s3 ls

Unable to locate credentials. You can configure credentials by running "aws login".

この状態でaws loginコマンドを実行します。

aws loginコマンドの実行
aws login

まだマネジメントコンソールにログインしているブラウザが無ければ、以下のようにログインを促されるため、「ルートまたはIAMユーザーで続行」を選択し、マネジメントコンソールへログインを行います。

Monosnap_20260222_132135.png

既にマネジメントコンソールにログインしているブラウザがある場合は、以下のように表示されるため、使用するセッションを選択します。

また、マルチセッションにも対応しているため、マルチセッションを有効にしている場合は以下の画面に複数のセッションが表示されます。

Monosnap_20260222_142818.png

ログイン出来ると、ログインした際のユーザのアクセス権限でAWS CLIを実行できます。

なお、「~/.aws/config」に以下のような設定がされていなかった場合は、aws login実行時に自動的に追加されます。

初回ログイン時に~/.aws/configに追加される設定
[default]
login_session = arn:aws:iam::123456789012:user/aws_login_test

aws logoutでのログアウト

aws logoutコマンドを実行することでローカルに保存されている認証情報がクリアされ、コマンド実行できない状態に戻ります。

aws logoutコマンドの実行
aws logout

aws logout実行時に出力される以下メッセージにも記載されておりますが、aws loginで取得したアクセストークンを開発ツール等に引き渡している場合、引き渡し先のツールの認証情報は消えないため注意が必要となります。

aws logoutコマンド実行時の表示例
Removed cached login credentials for profile 'default'. 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.

aws login実行時にローカルに保存される認証情報

aws loginを実行すると、「~/.aws/login/cache」配下に、以下のようなJSON形式のセッショントークンが保存され、AWS接続時にこちらの情報を使用します。
※以下、見やすくするよう整形しています

aws loginで~/.aws/login/cacheに保存される認証情報
{
  "accessToken": 
  {
    "accessKeyId": "XXXXXXXXXXXXXXXXXX",
    "secretAccessKey": "XXXXXXXXXXXXXXXXXX",
    "sessionToken": "XXXXXXXXXXXXXXXXXX",
    "accountId": "123456789012",
    "expiresAt": "yyyy-mm-ddThh:mm:ssZ"
  },
  "tokenType": "urn:aws:params:oauth:token-type:access_token_sigv4",
  "clientId": "arn:aws:signin:::devtools/same-device",
  "refreshToken": "XXXXXXXXXXXXXXXXXX",
  "idToken": "XXXXXXXXXXXXXXXXXX",
  "dpopKey": "-----BEGIN EC PRIVATE KEY-----\nXXXXXXXXXXXXXXXXXX\n-----END EC PRIVATE KEY-----\n"
}

もし、セッショントークンを保存するディレクトリを別の場所にしたい場合は、.bash_profile等に、AWS_LOGIN_CACHE_DIRECTORY変数でセッショントークンを保存したいディレクトリパスを設定することで変更できます。

.bash_profile等に設定する環境変数設定例
export AWS_LOGIN_CACHE_DIRECTORY="[セッショントークン保存ディレクトリ名]"

aws loginコマンドによるCLI実行を許可する設定

aws loginの制御は以下2つのIAMアクションによって制御されており、AWS管理ポリシーにも「SignInLocalDevelopmentAccess」で以下2つのIAMアクションが付与された管理ポリシーが存在しています。

  • signin:AuthorizeOAuth2Access
  • signin:CreateOAuth2Token

例えばS3の操作系コマンドのみaws loginで実行出来るようにするには以下のようにポリシーを付与することで、aws login後、aws s3コマンドでの操作のみ実行することができます。

Monosnap_20260222_160956.png

マネジメントコンソールの操作は「PowerUserAccess」等でまとめて許可しており、aws loginでのCLIアクセスのみ拒否したい場合は、以下のようなDenyルールを追加で付与することで、aws loginコマンドによるCLI実行のみ拒否できます。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "DenyAwsLoginCommand",
			"Effect": "Deny",
			"Action": [
				"signin:AuthorizeOAuth2Access",
				"signin:CreateOAuth2Token"
			],
			"Resource": "*"
		}
	]
}

なお、aws loginでのログインに失敗した場合は以下のように400エラーとなります。

Monosnap_20260222_163509.png

aws loginを使用したTerraform実行

aws configureで登録した認証情報を使用してアクセスするようなツールは色々とありますが、私はよくAWS基盤を管理する際、Terraformを使用するため、aws loginを使用した場合にTerraformが使用できるか試してみようと思います。

結果としてはaws login初回実行時に「~/.aws/config」に追加される設定だけでは以下のようにエラーとなりました。

aws login後terraform planを実行した場合の例

 Error: No valid credential sources found

 Please see https://developer.hashicorp.com/terraform/language/backend/s3
 for more information about providing credentials.

 Error: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds: GetMetadata, request canceled, context deadline exceeded


これは、Terraform等のツールがaws loginで取得した認証情報を見つけられずに失敗する問題となるため、Terraform実行用に別のプロファイルを追加してcredential_processを使用して認証情報を読み取るようにすることでTerraformの実行を行うことができました。

aws login用のProfileを「aws_login_test」、Terraform実行用のProfileを「aws_login_test_tf」とした場合の例は以下となります。

Terraform実行するための~/.aws/config設定
[profile aws_login_test]
login_session = arn:aws:iam::123456789012:user/aws_login_test

[profile aws_login_test_tf]
credential_process = aws configure export-credentials --profile aws_login_test

Terraformを実行する場合、「aws_login_test_tf」のプロファイルを指定してからTerraformを実行することで先程のようなエラーが出ず、通常通り実行出来るようになりました。

おわりに

aws loginを使ってCLI操作やTerraformを今までと同じように使うには、そのままでは出来ない場合がありますが、今回紹介した設定を行うことで今までと同じように使うことができました。

サービス・システム全体のユーザ管理や統制まで考えてシステムを構築するのであればAWS OrganizationsとIdentity Centerを使用して全体統制したほうが良いと思いますが、システム規模や条件によりIdentity Centerを使用できないシステムも多いので、そのような場合はaws loginの利用も選択肢の一つとして検討してみようかなと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?