この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。サービスグループの武田です。
AWS CLIは好きですか?(挨拶)
AWSの操作はマネジメントコンソールを利用してぽちぽちする方法も楽ですが、自動化などしたい場合にはAWS CLIも便利です。またAWS CLIにはプロファイルにIAMロールを設定しておくだけで自動的にAssumeRole(スイッチロール)してコマンドを実行してくれる機能もあります。
さてAssumeRoleをして一時的なクレデンシャルを取得する際にはセッション名の指定が必要です。次のようにassume-roleコマンドのリファレンスでも--role-session-name
が必須パラメーターとなっています。
assume-role
--role-arn <value>
--role-session-name <value>
AWS CLIがプロファイルの設定から自動的にAssumeRoleする際には、セッション名はbotocore-session-1609426800
のような名前が自動的に与えられます。
実はこのセッション名というのは、APIコールしたユーザー名としてAWS CloudTrailに記録されます。一人しか使用しないロールであれば問題ないのですが、複数人が使用するロールの場合、上記のようなデフォルトのセッション名では「誰がそのロールを使用してAPIコールをしたのか」の追跡が困難になります。そういうわけで、責任追跡性(Accountability)を担保する必要がある場合、プロファイルにrole_session_name
を設定すると幸せになれるよ、というお話です。
role_session_nameの指定をして比較してみる
それではrole_session_name
を指定した場合としなかった場合を比較してみましょう。スイッチ用のロール(ここではblog-test-role
)はあるものとして、次のように2種類の設定をプロファイルに追加します。
~/.aws/config
[profile test-src-role]
role_arn = arn:aws:iam::123456789012:role/blog-test-role
source_profile = default
[profile test-src-role-with-name]
role_arn = arn:aws:iam::123456789012:role/blog-test-role
role_session_name = cm-takeda.takashi
source_profile = default
role_arn = arn:aws:iam::123456789012:role/blog-test-role
はスイッチ先のロールARNを指定します。source_profile = default
はスイッチ元のプロファイル名です。違いはrole_session_name
の有無だけですね。
それではrole_session_name
を指定していないプロファイルでAPIコールをします。
$ rm -rf .aws/cli/cache/
$ aws ec2 describe-vpc-endpoints --profile test-src-role --region ap-northeast-1
{
"VpcEndpoints": []
}
CloudTrailには次のように記録されています。
同様に、role_session_name
を指定しているプロファイルでも試してみます。
$ rm -rf .aws/cli/cache/
$ aws ec2 describe-vpc-endpoints --profile test-src-role-with-name --region ap-northeast-1{
"VpcEndpoints": []
}
CloudTrailで名前が確認できますね!
まとめ
セッション名のルールをチーム内で決めておけば、誰がAPIコールをしたのか簡単に判断できますね。複数人でIAMロールを共有して使用する場合は、ぜひrole_session_name
の指定をお忘れなく。