本文へスキップ
BecomeCoder

AWS SAP(ソリューションアーキテクト プロフェッショナル)コース · 第2章 マルチアカウント統治とガバナンス · レッスン7

SCP(サービスコントロールポリシー)でガードレールを敷く

導入

開発者にIAM権限は自由に与えたいが、リージョンは東京だけに限定したい」「誰にも組織全体のCloudTrailは止めさせたくない」―― こうした組織全体の絶対ルールを、IAMポリシーとは別のレイヤーでかけるのがSCPです。

説明

SCP(Service Control Policy) は、AWS Organizations の OU やアカウントに対してかける、権限の上限(Permission Boundary) を定めるポリシーです。SAAで学んだIAMポリシーとの一番の違いは次の点です。

比較IAMポリシーSCP
適用対象IAMユーザー・ロールOU・アカウント全体
効果権限を「付与」できる権限を「付与」しない。上限を絞るだけ
Allow単体の意味それだけで許可されるAllowを書いても、他で許可されなければ何も起きない
管理アカウントへの影響通常どおり管理アカウントには効かない

ここが最重要ポイントです。SCPはそれ単体では何も許可しません。「IAMポリシーで許可され、かつSCPでも許可されている」操作だけが実行できます。つまりSCPは「これ以上は絶対に許さない」という天井(ガードレール)であり、IAMポリシーは「実際に何ができるか」という実際の許可です。両方のANDを取った範囲だけが実行可能になります。

flowchart LR
    I["IAMポリシーの許可範囲"] --> AND{"AND<br/>(両方が許可して初めて実行可)"}
    S["SCPの許可範囲<br/>(組織のガードレール)"] --> AND
    AND --> R["実際に実行できる操作"]

よく使われるガードレールの例です。

ガードレールの目的SCPで書く内容
使ってよいリージョンを限定指定リージョン以外の操作を Deny(条件キー aws:RequestedRegion
CloudTrail・GuardDutyの停止を禁止ログ・検知系サービスの無効化アクションを Deny
root ユーザーの操作を禁止条件キー aws:PrincipalType で root を Deny
高額サービスの利用を禁止(Sandbox OU)特定サービスへの Deny(例: SageMaker 大型インスタンス禁止)
Organizations からの離脱を禁止organizations:LeaveOrganizationDeny

評価の考え方は次の順です。SCPで明示的に Deny された操作は、IAMでどれだけ許可しても絶対に実行できません。逆にSCPが Allow していても、IAM側で許可がなければ実行できません。

読んでみよう

SAPでは「開発者が誤って本番リージョン以外にリソースを作れないようにしたい」「特定OU配下では高額なインスタンスタイプを使わせたくない」といった問題で、SCPのDenyで組織全体の天井を作る選択肢が正解になりがちです。「IAMポリシーだけで頑張って各アカウントに配る」より、「SCPでOU単位に一括で天井をかける」方が運用負荷が低い、という比較で選ばれることを意識してください。