クロスアカウントアクセスでAWS CLIを叩くときにexportするのが面倒だったので簡易コマンドをメモ
■結論
これを叩く
ROLE_ARN=arn:aws:iam::${アカウント番号}:role/${ロール名};
STS=$(aws sts assume-role --role-arn $ROLE_ARN --role-session-name SESSION | jq '.Credentials');
export AWS_ACCESS_KEY_ID=$(echo $STS | jq -r '.AccessKeyId');
export AWS_SECRET_ACCESS_KEY=$(echo $STS | jq -r '.SecretAccessKey');
export AWS_SESSION_TOKEN=$(echo $STS | jq -r '.SessionToken');
aws s3 ls;
■何がしたかったのか
自己学習のためにクロスアカウントアクセスを使って色々と実験したかった。
AWSアカウントAからアカウントBに対してAdministrator権限ポリシーをアタッチしたIAMロールをPassRoleし、AssumedRoleなアカウントBからAWS CLIやCDKを使用してあれやこれややりたかった。
問題は、アカウントBのCLI上での設定のめんどくささ。
アカウントBからAssumeRoleしたあとに表示されるSTSトークンの中身を見て、ローカルのCLIで環境変数を3つもexportしないといけない。しかも、SessionTokenは文字列が長いので範囲選択も地味にめんどくさい。
% ROLE_ARN=arn:aws:iam::${アカウント番号}:role/${ロール名}
% aws sts assume-role --role-arn $ROLE_ARN --role-session-name SESSION
{
"Credentials": {
"AccessKeyId": "AXXXhogehoge",
"SecretAccessKey": "secretaccesskeyhogehoge",
"SessionToken": "sessiontokenhogehoge",
"Expiration": "2024-10-31T18:34:23+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AYYYYhogehoge:SESSION",
"Arn": "arn:aws:sts::XXXXXXXXXXX:assumed-role/test-role/SESSION"
}
}
# ここから先の貼り付け作業がめんどくさすぎる、、、
% export AWS_ACCESS_KEY_ID=AXXXhogehoge
% export AWS_SECRET_ACCESS_KEY=secretaccesskeyhogehoge
% export AWS_SESSION_TOKEN=sessiontokenhogehoge
学習中にいちいちこれやっていたらたまらないので、サクッとコピって実験できるスクリプトにしたかった。
■なぜ記事を書き始めたのか
エンジニアになってから3年弱、ずっとインプットと開発中心でやっていた。
インプットに関しては過多な状態で、行き詰まりを感じていた。
完璧思考だったり必要以上に準備をしてから物事に臨むためにそのせいで成長が遅い傾向があったので、どんな些細なことでもいいので、たとえ完成度が低くても、形や出来にとらわれずにアウトプットを始めてみたかった。
これを読んでくださってるみなさん、この記事はまったく社会貢献になっていないだろう、半分は自分の日記みたいなもんだとわかっています。成長の場として始めたいと思いました!