![[小ネタ] CodeCommit 承認ルールの承認プール メンバーにIAMロールを加える場合、ロール名だけではダメ](https://devio2023-media.developers.io/wp-content/uploads/2019/05/aws-codecommit.png)
[小ネタ] CodeCommit 承認ルールの承認プール メンバーにIAMロールを加える場合、ロール名だけではダメ
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
大阪オフィスの川原です。
AWS CodeCommitではプルリクエストに承認ルールを付与することが出来ます。 承認ルールを作成することで、一定数以上の承認 もしくは 特定のユーザー/ロールの承認を得た場合のみ マージできるような仕組みを作ることができます。
承認ルール、および承認ルールテンプレートについて詳細は以下参照ください。
結論
「特定のIAMロールからの承認」をマージ可能の条件としたいケースを考えます。
このとき以下組み合わせの承認プールでは ダメです 。
- 承認者のタイプ :: IAM user name or assumed role
- 値 :: IAMロール名のみ


▲ "例" を見る限りできそうなのに・・・
以下のように ワイルドカード を指定するか、 ロール名/スイッチ元ユーザー名 としないといけません。
SomeReviewer/*(ロール名 + ワイルドカード)*/cm-kawahara.masahiro(ワイルドカード + スイッチ元 ユーザー名)SomeReviewer/cm-kawahara.masahiro(ロール/スイッチ元 ユーザー名)
試してみる

上記環境で試してみます。
IAMユーザー cm-kawahara.masahiro から IAMロール SomeReviewer にスイッチロールして、
CodeCommit プルリクエストを承認するケースです。
承認ルールとして 4パターン試してみました。
| 承認ルール名 | 承認プールのメンバー | 備考 |
|---|---|---|
| BothName | SomeReviewer/cm-kawahara.masahiro |
ロール名/スイッチ元ユーザー名 |
| OnlyRoleName | SomeReviewer |
ロール名のみ |
| OnlyUserName | cm-kawahara.masahiro |
スイッチ元ユーザー名のみ |
| WildcardRoleName | SomeReviewer/* |
ロール名とワイルドカード |
| WildcardUserName | */cm-kawahara.masahiro |
スイッチ元ユーザー名とワイルドカード |
結果は以下の通り。 ロール名/スイッチ元ユーザー名 とワイルドカードを使ったルールはルールを満たしましたが、
ロール名 or スイッチ元ユーザー名のみの承認ルールは条件を満たしていません 。

なぜか
承認ルールに関するAWSドキュメントはこちら
This option would not recognize an active session of someone assuming the role of CodeCommitReview with a role session name of Mary_Major ( arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major ) unless you include a wildcard ( *Mary_Major ). You can also specify the role name explicitly ( CodeCommitReview/Mary_Major ).
つまり、ロールのARNが arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major の場合
CodeCommitReview だけではダメで、 ワイルドカードを使って *Mary_Major とするか、
厳密に CodeCommitReview/Mary_Major としないといけないです。
IAMロールのARNについて
ちなみに IAMロールの ARNは以下構文です (参照: IAM 識別子 | AWSドキュメント)。
arn:aws:sts::account-id:assumed-role/role-name/role-session-name
ここの role-name/role-session-name の部分を CodeCommit 承認ルールでチェックしているわけですね。
role-name はそのままで、スイッチロールする際のスイッチ先ロールの名前です。
role-session-name はスイッチロール(AssumeRole)する際のパラメータの 1つで、セッション名を指定します。
マネジメントコンソール上でスイッチロールした際はこの値は スイッチ元のIAMユーザー名 になります。
以上、 ロール名/スイッチ元ユーザー名 としないといけない理由でした。
おわりに
小ネタですが、承認ルールの承認プール メンバーにIAMロールを加える場合の注意点を書いてみました。
少しでもどなたかのお役に立てば幸いです。






