■ はじめに
https://dk521123.hatenablog.com/entry/2022/05/23/000000
の続き。
https://dk521123.hatenablog.com/entry/2023/04/09/104204
で、ローカル環境からTerraform で AWS環境にデプロイする方法を書いたが、 デプロイ対象によっては権限上、Switch Roleする必要もあり、 その際には、
目次
【1】おさらい 1)STS 2)Assume Role 【2】一時クレデンシャル発行までの流れ 【3】AWS CLIコマンド 1)aws sts assume-role 2)aws sts get-caller-identity 【4】サンプル 1)Assumeするバッチ
【1】おさらい
https://dk521123.hatenablog.com/entry/2022/05/23/000000
でも扱ったが、あやふやな部分が多いのでおさらい。 以下のサイトが分かりやすい。
https://dev.classmethod.jp/articles/sts-temporality-credential/
1)STS
* AWS Security Token Serviceの略 => 一時的な認証情報を発行してくれるサービス
https://dk521123.hatenablog.com/entry/2023/04/09/104204
の認証情報 ~~~~~~ set AWS_ACCESS_KEY_ID=XXXXXX set AWS_SECRET_ACCESS_KEY=XXXXXX set AWS_SESSION_TOKEN=XXXXXX ~~~~~~ 「アクセスキー」、「シークレットキー」、「セッショントークン」
2)Assume Role
* IAM ロールに設定された権限を引き受けること cf. Assume (アシューム) = 引き受ける
【2】一時クレデンシャル発行までの流れ
[1] AWS CLI(後述「1)aws sts assume-role」)を使って assume-roleをコールする [2] 権限を委任できるかをAWS上で確認される [3] STSから一時クレデンシャルが発行され、 それが[1]のレスポンスとして返ってくる
【3】AWS CLIコマンド
1)aws sts assume-role
* IAMロールを引き受ける(Assumeする)
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html
コマンド例
aws sts assume-role \ --role-arn "arn:aws:iam::123456789012:role/example-role" \ --role-session-name AWSCLI-Session
2)aws sts get-caller-identity
* AWS Account情報(Account、User ID、ARN)の取得 => IAM ロールを引き受けたことを確認すること等に使える
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/get-caller-identity.html
コマンド例
aws sts get-caller-identity
【4】サンプル
* AWS CLI および jq をインストールする必要があるが試作してみた
jq コマンド ~ コマンドで JSON を扱う ~
https://dk521123.hatenablog.com/entry/2020/02/01/000000
1)Assumeするバッチ
set STS_ROLE_ARN=arn:aws:iam::123456789012:role/example-role set STS_PROFILE=AWSCLI-Session FOR /F %%i in (`aws sts assume-role --role-arn %STS_ROLE_ARN% --profile %STS_PROFILE%`) DO @SET response=%%i FOR /F %%i in (`echo %response% | jq .Credentials.AccessKeyId`) DO @SET access_key_id=%%i FOR /F %%i in (`echo %response% | jq .Credentials.SecretAccessKey`) DO @SET secret_access_key=%%i FOR /F %%i in (`echo %response% | jq .Credentials.SessionToken`) DO @SET session_token=%%i set AWS_ACCESS_KEY_ID=%access_key_id% set AWS_SECRET_ACCESS_KEY=%secret_access_key% set AWS_SESSION_TOKEN=%session_token% echo "Done"
関連記事
IAM ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/02/26/231046
IAM ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2022/07/03/000000
IAM ~ クロスアカウント ~
https://dk521123.hatenablog.com/entry/2022/05/23/000000
jq コマンド ~ コマンドで JSON を扱う ~
https://dk521123.hatenablog.com/entry/2020/02/01/000000
バッチ ~ コマンド結果を変数に格納する ~
https://dk521123.hatenablog.com/entry/2023/02/24/000000