1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DENSOAdvent Calendar 2024

Day 2

スイッチロール元のIAMロールを制限してみた

Last updated at Posted at 2024-12-01

背景

企業でAWSを利用しているのであれば企業の共通認証基盤とAWS IAM Identitiy CenterとSSOを構築していると思います。そしてAWSで利用する権限は許可セットとして共通基盤の管理部署によって提供され、ユーザー側からは許可セットのカスタマイズができなくなっていることが多いのでしょうか。

私が関わっているチームでは、共通基盤で使えるIAMロール(許可セットをもとに生成されたもの)の権限が自分たちのチームのユースケースに合わなかったので、スイッチロールすることで自分たちに合った権限を付与することにしました。
同じ許可セットを使う人でもユースケースは異なることがあるので、スイッチロール元の人とIAMロールを絞ることでユースケースに沿った権限管理を実現しました。

このページでは、スイッチロールするときに、誰がどのIAMロールを被っているときにスイッチロールを許可あるいは拒否するかを制限する方法を記述します。

Shimazushi Miro (2).jpg

結論

信頼関係にアカウントID、ロール名、セッション名を条件として記述することで実現できます。

以下のような書き方です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<アカウントID>:role/<ロール名>"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:RoleSessionName": "<セッション名>"
                }
            }
        }
    ]
}

arn:aws:iam::<アカウントID>:role/<ロール名>を被った<セッション名>さんだけがスイッチロールできるようになっています。

検証

まずは、スイッチロール先のIAMロールを作成します。
作成画面でいきなり信頼されたエンティティタイプ「カスタム信頼ポリシー」を選んで信頼関係を記述してしまってもよいですが、
今回は権限が絞られていくことを確認するため、「AWSアカウント」を選びます。
同一アカウント内でスイッチロールしたいので↓画像のように選択します。

image.png

適当なIAMポリシーをアタッチし、名前を付けてIAMロールを作成すると↓画像の様な信頼関係が出来上がりました。

image.png

この記述は、指定したアカウントIDのどのリソースからでもスイッチロールできます。

実際にスイッチロールしてみます。

eea30644-7356-4e4a-8432-104f4d6a8a3c_png__1222×956_.png

スイッチロールできましたね。

ではこれからスイッチロールできるIAMのロールを制限していきましょう。
次に、スイッチロールを許可したいIAMロールを確認します。
必要な情報は3つです。

  • アカウントID
  • IAMロール名
  • セッション名

共通基盤経由でAWSにログインし、IAMロール'スイッチロール元A'を被ります。
右上に /<セッション名> 表示されているのでメモします。

スイッチロール先のIAMロールの信頼関係を以下のように編集します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<スイッチロール元 AのARN>"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:RoleSessionName": "<自分のセッション名>"
                }
            }
        }
    ]
}

スイッチロールは成功します。(AWSのUI変更中らしく見た目がコロコロ変わってます)
73e3a505-f1a6-4443-ae56-69a2e237d50b_png__750×1026_.png

次に絞れていることを確認するために、別のIAMロール'スイッチロール元 B'からスイッチロールを試みます。

8410f9c2-8872-4aaf-9586-b3f4a8e3048c_png__1036×326_.png

image.png

異なるロールからはスイッチロールできないようになっています。

つぎはスイッチロール元B/自分のセッション名からのスイッチロールのみを拒否します。
fb778c02-4ead-4892-b92b-d561d3518ca8_png__3008×1468_.png

スイッチロール元 Bからのスイッチロールは失敗し、
image.png

スイッチロール元 Aからのスイッチロールは成功します。
6fdb2257-89d1-449b-be14-b9c4c3b89a22_png__710×1026_.png

まとめ

スイッチロール先の信頼関係でアカウントID、ロール名、セッション名を条件にして誰がどのIAMロールを被っているときにスイッチロールを許可するかを制限することができます。もし私達のようにIAM Identity Centerと外部IdP側で権限を分けられない場合は、今回紹介した方法を試してみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?