- 公開日
- 最終更新日
【アップデート】AWS Organizations SCP がIAMポリシー言語を完全にサポートしました
この記事を共有する

目次
はじめに
先日のアップデートで AWS Organizations のサービスコントロールポリシー(SCP)がIAMポリシー言語を完全にサポートするようになりました!
今まではAllowステートメントでの制約が多かったのですが、それが緩和されてより柔軟な記述ができるようになりました。
アップデート内容
主要な内容を記載していきます。
- Allowステートメントでの"NotAction"が利用可能
- 特定のアクション以外を許可する記述が可能になりました
- Allowステートメントでの"Resource"が利用可能
- 特定のリソースを許可する記述が可能になりました
- Allowステートメントでの"Condition"が利用可能
- タグなどの条件で制御が可能になりました
- Allow/Denyステートメントでの"NotResource"が利用可能
- 特定のリソース以外を許可/拒否する記述が可能になりました
- ワイルドカード(*/?)が任意の場所で利用可能
- 今までは単体または末尾のみに利用可能でした
詳細はAWS公式ブログをご参照ください。 Unlock new possibilities: AWS Organizations service control policy now supports full IAM language
メリット
Allowステートメントやワイルドカードの制約がなくなったことで、より柔軟な制御やポリシー記述の簡素化ができるようになりました。
今までは許可したいアクションを列挙していたところを拒否したいアクションのみ記述することができるようになったり、条件設定をすることでより細かい制御ができるようになりました。
※ Allowステートメントで"NotAction"や"NotResource"を利用する場合はデフォルトで付与されるFullAWSAccessポリシーはデタッチする必要があります。
また、"NotResource"は広範囲な「デフォルトで拒否」といったポリシーを実装するのに有効です。
動作検証
新しい機能の検証をしていきます。
FullAWSAccessポリシーはデタッチして、以下のSCPを設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"iam:CreateRole"
],
"NotResource": "arn:aws:iam:::policy/test*",
"Condition": {
"StringNotEquals": {
"aws:ResourceTag/tagkey": "tagvalue"
}
}
}
]
}
今回の新要素がモリモリで現実味がないですが、参考程度に見てください。 Admin権限があるユーザーで以下の操作を確認をしていきます。
- IAM ロール の作成(NotActionの動作確認)
- 名前にtestが入るIAM ポリシー の作成(NotResourceの動作確認)
- 名前にtestが入らずタグを付与しないIAM ポリシー の作成(NotResource&NotAction&Conditionの動作確認)
- タグ{tag_key:tag_value}がついているリソースの作成(Conditionの動作確認)
検証結果
- IAM ロール の作成:失敗
NotActionで明示しているアクションなので作成に失敗しています。
- 名前にtestが入るIAM ポリシー の作成:失敗
NotResourceで明示しているリソースなので作成に失敗しています。
- 名前にtestが入らずタグを付与しないIAM ポリシー の作成:成功
NotActionで明示していないアクションかつ、
NotResourceで明示していないリソースかつ、
Conditionで明示していないタグの値のため作成できました。
- タグ{tag_key:tag_value}がついているリソースの作成:失敗
Conditionで明示しているタグの値のため作成に失敗しています。
おまけ
今回利用したSCPのNotResource部分が、"arn:aws:iam::*:role/*test*" の場合は、どういった挙動になるでしょうか?
当初私は「testと入るロールの作成を拒否するため、それ以外のロールは作成できる」と勘違いしていたのですが、実際には、
- どんな名前でもIAM ロールの作成は失敗する
- 名前に「test」と入るIAM ロールは閲覧含めて操作不可
という結果になりました。
NotActionとNotResourceの両方に当てはまるものだけが許可されるためこのような挙動になります。
このポリシーはあくまで許可をするポリシーなので、私の予想していた「testと入るロールの作成を拒否する」という認識がそもそも間違っていました。 ここまで複雑なポリシーを書くことはないと思いますが、みなさんも気をつけてください。
まとめ
今回のアップデートをまとめると以下の3本です。
- Allowステートメントの制約が緩和されて"NotAction","Resource","NotResource","Condition"が利用可能になりました
- Denyステートメントでも"NotResource"が利用可能になりました
- ワイルドカードが任意の場所で利用可能になりました
これらによって柔軟なポリシーの記述ができるようになりました。
しかしFullAWSAccess ポリシーをデタッチしなければならない場合が多く、あまり出番は多く無いかもしれません。
ただ、できるようになることは増えていますので、様々な活用方法を考えていきたいと思っています。
この記事がどなたかの参考になれば幸いです。
この記事は私が書きました
渡邉 和貴
記事一覧CCoEをやってます。森と山に出没します。 好きなAWSサービスは IAM と CloudFormation
