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

ワイドグリップチンニング 9 回まではなんとかできるようになりました、那須です。

2 ヶ月ほど前に、↓このような記事を書きました。

別アカウントからスイッチロールされると、誰がやったのかわかりませんでした。
また、誰だったのかを調べるのもスイッチ元のアカウント管理者に尋ねるしかありませんでした。

先月、これを簡単に調べられるように強制できるようになったとのニュースがありましたね。

これを適用すると、以下のような環境になります。
・スイッチロール先アカウントでもユーザ名が 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 BASIS運用保守

基幹クラウド/SAP BASIS運用保守

日々進化し続けるクラウドサービスを最大限に活用し、信頼性・柔軟性を兼ね備えた運用保守サービスを提供します。

詳細を見る

カテゴリ

タグ

BeeX Technical Blogについてのお問い合わせ

BeeX Technical Blogのエントリにご質問が御座いましたらお気軽にお問合せください。

お電話でのお問い合わせ

☎ 03-6260-6240

受付時間 平日9:30〜18:00

フォームでのお問い合わせ

お問い合わせフォーム