AWSで「IAMロールがアクションを実行するときに AWS CloudTrail ログにロールセッション名を追加するため、アクションを実行したユーザーを簡単に特定でき流ようになりました。」と発表されました。
IAMポリシーに新しいサービスの条件 sts:RoleSessionName が使用できるようになりました。
これまで、別アカウントからユーザーが任意のロールセッションを用いて使用した場合、アクションの実行者が誰なのか記録に残らないようになっていました。
sts:RoleSessionNameを追加することでIAMロールを引き受けるときに設定する必要があるロールセッション名を定義できるようになり、スイッチロール先アカウントでもユーザ名を特定できるようになります。
使い方
AWS公式ドキュメントに掲載されている例を見てみます。
以下はアカウント111122223333のIAMユーザーがロールを引き受けるときに、セッション名としてIAMユーザー名を提供するように、sts:RoleSessionNameを使用して定義したポリシーです。これによりIAMユーザーは、ポリシーがアタッチされているロールを引き受けることができます。ユーザー名変数はIAMユーザーのみに存在するため一時的な認証情報を使用するユーザーがロールを引き受けることはできません。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RoleTrustPolicyRequireUsernameForSessionName", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Condition": { "StringLike": {"sts:RoleSessionName": "${aws:username}"} } } ] }
管理者はアクションのAWS CloudTrailログでセッション名を確認することができます。下の例ではmatjacという名前のユーザーがMateoRoleという名前のロールを使用して操作を実行したことがわかります。
"assumedRoleUser": { "assumedRoleId": "AROACQRSTUVWRAOEXAMPLE:matjac", "arn": "arn:aws:sts::111122223333:assumed-role/MateoRole/matjac" }