IAM ロールにスイッチする際にユーザ名を伝えられるようになった

この記事を書いたメンバー:

那須 隆

IAM ロールにスイッチする際にユーザ名を伝えられるようになった

目次

ワイドグリップチンニング 9 回まではなんとかできるようになりました、那須です。
2 ヶ月ほど前に、↓このような記事を書きました。 

https://www.beex-inc.com/blog/who-use-this-role

別アカウントからスイッチロールされると、誰がやったのかわかりませんでした。
また、誰だったのかを調べるのもスイッチ元のアカウント管理者に尋ねるしかありませんでした。
先月、これを簡単に調べられるように強制できるようになったとのニュースがありましたね。


IAM ロールを使用して実行されたアクションを担当する ID を簡単に特定

aws.amazon.com

og_img

これを適用すると、以下のような環境になります。
・スイッチロール先アカウントでもユーザ名が CloudTrail で特定できる
・スイッチロール元アカウントでユーザ名を通知するのを強制できる

では実際にやってみましょう。

まずは設定

アカウント構成は以下とします。
・スイッチロール元アカウントID:111111111111 / ユーザ名:work_api
・スイッチロール先アカウントID:222222222222 / ロール名:admin
スイッチロール先アカウントで、スイッチ対象のロールの信頼関係を以下のように設定します。
Condition の内容が、ユーザ名がないとスイッチロールを拒否するものになっています。

{
  "Version""2012-10-17",
  "Statement": [
    {
      "Effect""Allow",
      "Principal": {
        "AWS""arn:aws:iam::111111111111:root"
      },
      "Action""sts:AssumeRole",
      "Condition": {
        "StringLike": {
          "sts:RoleSessionName""${aws:username}"
        }
      }
    }
  ]
}

スイッチロール元(今回は手元の PC で AWS CLI を実行)でユーザ名を渡すよう、.aws/config ファイルで以下のように role_session_name を追加します。

[profile admin]
output=json
region=ap-northeast-1
role_arn=arn:aws:iam::222222222222:role/admin_role
source_profile=default
role_session_name=work_api

これで準備完了です。

スイッチロールしてみる

.aws/config に role_session_name がなかったり実際のユーザ名と異なる場合は、以下のようなエラーになります。

$ aws sts get-caller-identity --profile admin
 
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::111111111111:user/work_api is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::222222222222:role/admin_role

role_session_name が正しく .aws/config に書かれていると、以下のようになります。
結果の中の Arn にはユーザ名が含まれていますね。

$ aws sts get-caller-identity --profile admin
{
    "UserId""AROAXXXXXXXXXXXXX:work_api",
    "Account""222222222222",
    "Arn""arn:aws:sts::222222222222:assumed-role/admin_role/work_api"
}

EC2 インスタンスの一覧を出力してみても正しく結果が返ってきます。

$ aws ec2 describe-instances --profile admin
{
    "Reservations": [
        {
            "Groups": [],
            "Instances": [...省略

上記の ec2 describe-instances のアクションを CloudTrail で確認してみましょう。
ユーザ名のところに work_api と出ていますね。

 

さいごに

これまでは AWS CLI で操作されていた場合は、いつ誰が何をしたのかが CloudTrail で追いにくくなっていました。
しかし今回のアップデートでいつ誰が何をしたのかを強制的にログに残すことが可能になりました。
しかも誰がの部分はユーザ名となりますので、誰が見てもすぐにわかる形になりましたね。
AWS アカウントのログは普段はあまり見ないとは思いますが、いざログが必要になった時に困らないようにこのようなアップデートは運用に取り込んでいきましょう。

カテゴリー
タグ

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)