IAMユーザーにAssumeRoleの権限が無くてもスイッチロールできる(ように見える)のはなぜですか?

2021.08.31

困っていた内容

スイッチロールの信頼関係設定における AssumeRole権限について質問します。 自アカウントのIAMユーザーに、自アカウントのIAMロールにスイッチできるよう設定を行っています。

ロールの信頼関係を次のようにアカウントroot = アカウント自体 の意味になります)で指定した場合、ユーザーに「sts:AssumeRole」のアクセス権限が必要だと認識しています。

arn:aws:iam::XXXXXXXXXXXX:root

一方で、ロールの信頼関係を次のようにユーザー名で指定すると、ユーザーに「sts:AssumeRole」のアクセス権限が無くてもスイッチロールできてしまいます。

arn:aws:iam::XXXXXXXXXXXX:user/username

このような振る舞いの違いが起きるのはどうしてでしょうか? ユーザー名で指定する方法でスイッチロールする場合、ユーザーに「AssumeRole」の権限が無くてもスイッチロールできるのはなぜでしょうか?

どう対応すればいいの?

[1]のドキュメントを確認してみます。

アカウントで指定する方法については、このように記述されています。

これを行うには、信頼するアカウントの管理者が、ロールの信頼ポリシーで Principal として信頼されるアカウント番号を指定します。これにより、信頼されたアカウント内のすべてのユーザーがロールを引き受けることができるようになる可能性があります。設定を完了するには、信頼されたアカウントの管理者がそのアカウント内の特定のグループまたはユーザーにロールを切り替えるアクセス権限を付与する必要があります。

→ 設定を完了するには、アクセス権限を付与する必要がある、と記述されています。

上記のアクセス権限(ポリシー)が無い状態でスイッチロールすると、スイッチロールはエラーになります。

エラーメッセージ:1 つ以上のフィールドに無効な情報があります。情報を確認するか、管理者に連絡してください。

上記のアクセス権限(ポリシー)を付与すれば、スイッチロールできるようになります。


ユーザー名で指定する方法については、特に記述が見当たらないのですが、アクセス権限(ポリシー)を付与することなく設定を完了します。

スイッチロールを行うと、スイッチロールは成功します。

ユーザー名で指定する方法でスイッチロールする場合は、IAMユーザーに「AssumeRole」の権限が無くてもスイッチロールできるのはなぜですか?

「ユーザーにロールを切り替えるアクセス権限(sts:AssumeRole)」が不要となる訳ではありません。

マネジメントコンソール上で、該当のIAMロールの「信頼関係」タブを見てみましょう。

「信頼関係の編集」ボタンをクリックして、「信頼関係の編集」を表示すると、 下記画面のように、ポリシードキュメントの編集画面となります。 この中で "Action": "sts:AssumeRole" が指定されています。

つまり、ユーザー名で指定する方法の場合、「信頼関係」における設定により 「ユーザーにロールを切り替えるアクセス権限(sts:AssumeRole)」が許可されています。

アカウントで指定する方法の場合も同様に 「信頼関係」での設定がありますが、それだけでは不十分です。 これに加えて、ロールを切り替えるアクセス権限(ポリシー)を付与する必要があります。

設定を完了するには、信頼されたアカウントの管理者がそのアカウント内の特定のグループまたはユーザーにロールを切り替えるアクセス権限を付与する必要があります。

スイッチロールのアクセス権限の設定方法をまとめますと、以下のようになります。

スイッチロールのアクセス権限の設定方法

ロールの信頼関係でのPrincipalの指定方法 設定内容
アカウントを指定 ロールの信頼関係ユーザーのポリシーの両方で設定
ユーザー名を指定 ロールの信頼関係で設定

参考資料

[1] ロールを切り替えるユーザーアクセス許可の付与 - AWS Identity and Access Management

[2] IAM 識別子 - AWS Identity and Access Management