SCP と RCP — サービスコントロールポリシー設計
AWS Organizations の SCP と RCP (Resource Control Policy) の違い、ガードレール設計、段階的適用、Deny の局所化を SAA 基礎から SAP 高度設計まで解説。
AWS Organizations の サービスコントロールポリシー (SCP) は、 組織単位 (OU) やアカウントに適用する 許可の最大範囲 (ガードレール) を定義します。 近年登場した RCP (Resource Control Policy) はリソースレベルのガードレールを提供します。 本記事では SCP / RCP の設計を SAA / SAP 両面から整理します。
SAA レベル:基礎概念
SCP の本質 — ガードレール
SCP は IAM ポリシーと 同じ JSON 構文 ですが、本質が異なります。
SAA レベル:基礎概念
SCP の核心は 「許可を与えるのではなく、許可の上限を定める」 ことです。 IAM ポリシーで許可されていても、SCP で許可されていなければ アクセスは拒否 されます。 「SCP = ガードレール(上限の設定)」が SAA の最重要ポイントです。
# アクセスが許可される条件
IAM ポリシー (Allow) AND SCP (Allow) = 許可
IAM ポリシー (Allow) AND SCP (Deny) = 拒否
IAM ポリシー (Deny) OR SCP (Deny) = 拒否
| 条件 | IAM ポリシー | SCP | 結果 |
|---|---|---|---|
| 許可 | Allow | Allow | 許可 |
| 拒否 | Allow | Deny | 拒否 |
| 拒否 | Deny | Allow | 拒否 |
| 拒否 | Deny | Deny | 拒否 |
SAA 試験のポイント
「SCP で Allow しても、それだけではアクセスできない」 は SAA の超頻出です。 SCP の Allow は「最大範囲を設定する」だけで、IAM ポリシーでも許可が必要です。 逆に SCP の Deny は 絶対拒否(IAM ポリシーで Allow でも拒否)。 この非対称性が SAA の核心です。
SCP の適用単位
SCP は Root、OU、アカウント に適用できます。適用範囲は階層的に下位に継承します。
Root
└── SCP: FullAWSAccess (必須デフォルト)
└── Security OU
└── SCP: セキュリティサービス無効化を拒否
└── Production OU
└── SCP: リージョン制限
└── アカウント A
└── 適用される SCP: 3 つの AND
- 下位は上位の SCP を継承: 全親 OU の SCP が AND で適用
- FullAWSAccess: Root にはデフォルトで
FullAWSAccessが必要(無いと全アカウントが停止) - 管理アカウントは SCP 対象外: 管理アカウント自体は SCP の影響を受けない
SAA 頻出
管理アカウント (Management Account) は SCP の対象外 です。 これは「SCP で管理アカウント自身をロックアウトする事故」を防ぐための仕様です。 SAA で「管理アカウントに SCP は適用されるか?」というひっかけ問題が頻出します。
代表的なガードレール例
| ガードレール | 目的 | SCP の内容 |
|---|---|---|
| リージョン制限 | データ主権・コスト管理 | 許可リージョン外の新規リソース作成を Deny |
| セキュリティサービス無効化防止 | セキュリティ維持 | GuardDuty/Security Hub の無効化操作を Deny |
| ルートユーザー使用制限 | セキュリティ | ルートユーザーの日常使用を Deny |
| サービス制限 | ガバナンス | 未承認サービス(例: 未認可リージョンの Rekognition 等)を Deny |
SAP レベル:高度な設計シナリオ
段階的 SCP 適用の設計
SAP では 階層的に SCP を段階適用 して、リスクの高い操作を階層ごとに防ぎます。
SAP レベル:高度な設計シナリオ
段階的 SCP 設計の定石は 「上位 OU は広く、下位 OU は狭く」 です。 Root 直下は最小限の Deny(全組織共通の禁止事項)、 Production OU ではより厳格なリージョン制限や承認要求を追加、という階層化で 「局所的な要件は局所的な SCP で」実現します。
Root
└── SCP 1: ルートユーザー日常使用禁止、全組織共通 Deny
└── Security OU
└── SCP 2: セキュリティサービス無効化禁止
└── Production OU
└── SCP 3: リージョン制限 + 本番 IAM ロール作成に承認要求
└── Sandbox OU
└── SCP 4: 本番リージョンへのアクセス禁止
Deny の局所化原則
設計上の落とし穴
Root 直下に過剰な Deny を設定すると、意図せず全組織を停止 させるリスクがあります。 Deny はなるべく 下位 OU に局所化 し、影響範囲を最小化するのが SAP のベストプラクティスです。 特に Root 直下の Deny は「組織全体に影響」するため、慎重な設計が必要です。
リージョン制限 SCP の実装例
データ主権やコスト管理のため、許可リージョン以外でのリソース作成を禁止 する SCP は頻出です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [
"ap-northeast-1",
"us-east-1"
]
},
"ArnNotLike": {
"aws:PrincipalARN": "arn:aws:iam::*:role/AWSControlTowerExecution"
}
}
}
]
}
除外ロールの設計
リージョン制限 SCP では 自動化ロール(Control Tower 実行ロール等)を除外 する条件を入れるのが定石です。 これを忘れると、Control Tower のアカウント初期化が特定リージョンで失敗する事故に繋がります。 SAP では「誰を除外すべきか」の設計判断が問われます。
RCP (Resource Control Policy) の登場
近年登場した RCP は、SCP とは異なる リソースレベルのガードレール を提供します。
| ポリシー | 制御対象 | 代表ユースケース |
|---|---|---|
| SCP | アイデンティティ の許可上限 | アカウント内のプリンシパルが何をできるか |
| RCP | リソース へのアクセス上限 | リソースが誰からアクセスされるか |
SAP レベル:高度な設計シナリオ
RCP は 「組織外からのリソースアクセスを禁止」 というリソース側のガードレールを実現します。 従来は各リソースのリソースポリシーで個別設定していた「外部アカウント拒否」を 組織レベルで一括適用 できるのが RCP の強みです。 S3 バケット、KMS キー、Secrets Manager シークレット等の外部共有を組織的に防止できます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:PrincipalOrgID": "o-xxxxxxxxxx"
},
"Bool": {
"aws:PrincipalIsAWSService": "false"
}
}
}
]
}
この RCP は 「組織外のプリンシパルからのリソースアクセスを禁止」 します。
組織 ID (aws:PrincipalOrgID) で組織メンバーかを判定するのがキモです。
SCP と RCP の使い分け
| シナリオ | 推奨ポリシー | 理由 |
|---|---|---|
| アカウント内のアクション制限 | SCP | プリンシパルの行動を制限 |
| リソースへの外部アクセス禁止 | RCP | リソース側の受信を制限 |
| サービスの利用禁止 | SCP | アクション単位の制限 |
| データ主権の強制 | RCP | リソースへのアクセス制限 |
SCP と RCP の混同
SCP は「アイデンティティが何をできるか」、RCP は「リソースが誰からアクセスされるか」 です。 「リソースポリシーがないサービス」でも RCP で組織的ガードレールを設定できるのが新しい強みですが、 適用対象のサービスは限定されているため、対応状況を確認する必要があります。
タグポリシーと SCP の連携
タグポリシー (Tag Policy) はタグの標準化を定義しますが、単体では 強制力が弱い です。 SCP と連携することで 必須タグ未付与のリソース作成を拒否 できます。
タグポリシー: タグの標準定義(強制力なし)
+ SCP (Resource Control): 必須タグ未付与リソース作成を Deny
= タグ付けの強制
タグ強制の完成形
タグポリシー + SCP + Config Rules の 3 段構えが SAP のタグガバナンス定石です。
- タグポリシーで標準定義
- SCP で未付与リソース作成を拒否(予防的)
- Config Rules で既存リソースの不備を検知・修復(是正的)
ガードレールのテストと段階導入
SCP/RCP の誤設定は 組織全体を停止 させるリスクがあるため、段階導入が重要です。
| 段階 | 手法 | 目的 |
|---|---|---|
| 1 | Audit OU でテスト | 影響範囲を限定して検証 |
| 2 | Dry Run (CloudTrail IAM Action) | 実際の Deny 影響を事前確認 |
| 3 | Sandbox OU に適用 | 実環境での動作確認 |
| 4 | 本番 OU に段階展開 | 影響を見ながら拡大 |
ガードレール導入の鉄則
「いきなり Production OU に SCP を適用しない」 が SAP の鉄則です。 まず Sandbox / Audit OU でテストし、CloudTrail で Deny されるべき操作が実際に Deny されるか を確認してから本番展開します。
制約とクォータ
| 項目 | 制約 |
|---|---|
| SCP の適用単位 | Root / OU / アカウント |
| 1 アカウントあたり SCP | 5(クォータ拡張可) |
| 管理アカウント | SCP 対象外 |
| RCP 対象サービス | S3, KMS, Secrets Manager, SQS 等(順次拡大) |
まとめ
- SAA: SCP はガードレール(許可上限)、Allow だけでは許可されない、 管理アカウントは対象外、という基本を理解する。
- SAP: 段階的 SCP 適用、Deny の局所化、RCP との使い分け、タグポリシー連携、 段階的テスト導入が求められる。
次は AWS Organizations ガバナンス設計 で、組織全体の統制体制を統合的に学びましょう。