【AWS】AWS CLI ~ aws sts ~

■ はじめに

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
{
    "Account": "123456789012",
    "UserId": "XXXX*****************",
    "Arn": "arn:aws:iam::123456789012:user/demo-user"
}

【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
IAM ~ 別AWSアカウントのS3にファイルアップロード ~
https://dk521123.hatenablog.com/entry/2024/03/08/003841
jq コマンド ~ コマンドで JSON を扱う ~
https://dk521123.hatenablog.com/entry/2020/02/01/000000
バッチ ~ コマンド結果を変数に格納する ~
https://dk521123.hatenablog.com/entry/2023/02/24/000000