「AWS Organizationsに、まずどのSCPを入れればいい?」——最低限のガードレールを、コピペできるSCP/RCPのJSON雛形付きで整理します。監査/検知の保護・root禁止・リージョン制限から、TLS必須・組織境界のRCP、そして既存ワークロードを壊さない適用順序まで。
01まず、どのSCPを入れる?
AWS Organizationsの仕組みと設計で「Root・OUにガードレール(SCP/RCP)を敷く」と書きました。では具体的にどれを、どのJSONで入れればいいのか——コピペできる雛形付きで、最低限のセットを示します。
この記事のポリシーは、AWS公式ドキュメントと公式サンプル(aws-samples/Control Tower)由来です。${Account} / [PrivilegedRole] / o-xxxxxxxxxx などはプレースホルダなので自環境の値へ置換してください。
02前提 — 評価モデルとDenyリスト戦略
雛形を貼る前に、これだけは押さえます。ここを誤ると事故ります。
- 評価順:明示的Deny > 暗黙的Deny > 明示的Allow。SCPは Root→OU→アカウントの全階層でAllowが揃って初めて通り、Denyは1か所でもマッチすれば即拒否。
- Denyリスト戦略:各エンティティに
FullAWSAccess(SCP)/RCPFullAWSAccess(RCP)が付いている前提で、Deny文だけを足す。この2つを外すと全拒否になるので絶対に外さない。 - 管理アカウント除外:SCP/RCPは管理アカウントに効かない。だから管理アカウントにワークロードを置かない(→ アカウント戦略)。
- サイズ上限:SCP/RCPは1つ最大5,120文字。巨大ポリシーは分割やOU設計で対応。
03① 監査・検知を止めさせない(最初に入れる)
最初に入れるべきはこれ。誰の業務も止めず、いざという時の証跡と検知を守ります。CloudTrail・Config・GuardDuty・Security Hub の停止/削除/改変を禁止(運用ロールだけ例外)。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "ProtectSecurityServices",
"Effect": "Deny",
"Action": [
"cloudtrail:StopLogging", "cloudtrail:DeleteTrail", "cloudtrail:UpdateTrail",
"config:StopConfigurationRecorder", "config:DeleteConfigurationRecorder",
"config:DeleteDeliveryChannel",
"guardduty:DeleteDetector", "guardduty:DisassociateFromMasterAccount",
"securityhub:DisableSecurityHub", "securityhub:DisassociateFromMasterAccount"
],
"Resource": "*",
"Condition": {
"ArnNotLike": { "aws:PrincipalArn": "arn:aws:iam::*:role/[SecurityAdminRole]" }
}
}]
} aws-samples/service-control-policy-examples)はサービスごとに分かれ、上記よりアクションが網羅的です。Macie / IAM Identity Center / Access Analyzer 保護の例も同リポジトリにあります。組織トレイル・Config集約を使う場合は Resource を絞るとより堅牢。04② rootユーザーの利用を禁止
メンバーアカウントの root による操作を全面禁止(監査ログ改ざん等の最終手段を封じる)。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyRootUser",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringLike": { "aws:PrincipalArn": "arn:aws:iam::*:root" }
}
}]
} Action:"*" を NotAction:["s3:GetBucketPolicy","s3:PutBucketPolicy","s3:DeleteBucketPolicy"] に変えます。ただし2026年の本命は「rootを縛る」より「rootを消す」——Centralized Root Access でメンバーの root 資格情報(パスワード/アクセスキー/MFA)を中央から削除し、必要時のみ短期の sts:AssumeRoot を使う。SCPは多層防御として併用します。05③ 組織離脱・アカウント閉鎖を禁止
メンバーアカウントが勝手に組織を抜ける/閉鎖されるのを防ぎます(短く、影響も読みやすい)。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyLeaveAndClose",
"Effect": "Deny",
"Action": [
"organizations:LeaveOrganization",
"account:CloseAccount"
],
"Resource": "*"
}]
} account:CloseAccount は AWS Account Management のアクションです。06④ リージョンを制限する
許可リージョン外の操作をDeny。攻撃対象・コンプラ面で効きますが、グローバルサービスを壊さない除外が肝。下は要点版で、aws:RequestedRegion の配列に許可リージョンを入れます。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyOutsideAllowedRegions",
"Effect": "Deny",
"NotAction": [
"iam:*", "organizations:*", "sts:*", "cloudfront:*", "route53:*",
"support:*", "globalaccelerator:*", "waf:*", "wafv2:*",
"budgets:*", "ce:*", "health:*", "account:*"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [ "ap-northeast-1", "us-east-1" ]
},
"ArnNotLike": {
"aws:PrincipalArn": "arn:aws:iam::*:role/AWSControlTowerExecution"
}
}
}]
} us-east-1(IAM/CloudFront/Route53のエンドポイント)とホームリージョンは必ず許可に含める——含めないとグローバル操作が壊れます。5,120文字上限にも注意。07⑤ 危険な設定変更を禁止
暗号化の無効化・パブリック化・ログ削除といった"取り返しのつかない緩和"を禁止します(運用ロールだけ例外)。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyDangerousChanges",
"Effect": "Deny",
"Action": [
"ec2:DisableEbsEncryptionByDefault",
"ec2:DeleteFlowLogs",
"s3:PutAccountPublicAccessBlock",
"s3:PutBucketPublicAccessBlock"
],
"Resource": "*",
"Condition": {
"ArnNotLike": { "aws:PrincipalArn": "arn:aws:iam::*:role/[PrivilegedRole]" }
}
}]
} iam:UpdateRole/DeleteRole/PutRolePolicy/AttachRolePolicy 等をDeny)も定番です。08RCP — TLS必須と「組織の外から触らせない」
SCPが"組織内プリンシパル"を縛るのに対し、RCP(2024/11新設)はリソース側の上限で、組織外からのアクセスも止められます(データ境界)。社外ベンダーの越境アクセスはSCPでは止まりません。
TLS必須(暗号化されていない通信を拒否):
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "EnforceTLS",
"Effect": "Deny",
"Principal": "*",
"Action": [ "s3:*", "sts:*", "kms:*", "sqs:*", "secretsmanager:*" ],
"Resource": "*",
"Condition": {
"BoolIfExists": { "aws:SecureTransport": "false" }
}
}]
} 組織境界(自組織のプリンシパル以外を拒否・AWSサービスは除外):
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "EnforceOrgPerimeter",
"Effect": "Deny",
"Principal": "*",
"Action": [ "s3:*", "sts:*", "kms:*", "sqs:*", "secretsmanager:*" ],
"Resource": "*",
"Condition": {
"StringNotEqualsIfExists": { "aws:PrincipalOrgID": "o-xxxxxxxxxx" },
"Bool": { "aws:PrincipalIsAWSService": "false" }
}
}]
} BoolIfExists / ...IfExists はサービス統合の誤爆を防ぐための書き方です。09宣言的ポリシー — 設定を"恒久的に"固定する
宣言的ポリシー(2024新)は、SCP/RCPと違いサービスのコントロールプレーンで強制され、コンソール/CLI/SDK/新API追加後も維持されます。構文は @@assign を使う独自形式(現状は主にEC2系)。
IMDSv2 を強制(v1を塞ぐ):
{
"ec2_attributes": {
"instance_metadata_defaults": {
"http_tokens": { "@@assign": "required" },
"http_put_response_hop_limit": { "@@assign": "2" }
}
}
} VPCのパブリックアクセスをブロック:
{
"ec2_attributes": {
"vpc_block_public_access": {
"internet_gateway_block": { "mode": { "@@assign": "block_ingress" } }
}
}
} http_tokens_enforced を有効化する場合は、IMDSv1利用の棚卸しを先に(未対応のまま強制すると起動失敗)。EBS既定暗号化は宣言的ポリシーの対象外なので、アカウント設定の有効化+⑤のSCP(ec2:DisableEbsEncryptionByDefault 拒否)で担保します。EBSスナップショットやAMIのパブリック共有ブロックも宣言的ポリシーで固定できます。10Control Towerを使うなら、多くは標準装備
自前で全部書く前に。AWS Control Tower を使うと、これらの多くが必須/推奨コントロールとして自動適用されます(管理アカウント除く)。
| 本記事のガードレール | Control Towerでの対応 |
|---|---|
| 監査・検知の保護 | CloudTrail/Config変更禁止は必須コントロール(LZ4.0で組織トレイル化に伴い一部置換) |
| リージョン制限 | Region deny コントロール(選択・網羅リストをAWSがメンテ) |
| root | 中央root管理(ランディングゾーン機能)+root MFA検知 |
| S3/VPCパブリックブロック | 必須/強く推奨コントロール |
| RCP(TLS/境界) | RCPベースの configurable managed controls(2024/11〜) |
| IAMロール保護 | Control Tower作成ロールの変更禁止(必須) |
11壊さない適用順序
最後に、既存ワークロードを壊さないための順序です。ここが実務のいちばんの肝。
- ①監査・検知の保護から(誰の業務も止めない)→ ②root・離脱防止(影響が読みやすい)→ ③リージョン・危険設定は要検証で後回し。
- Policy Staging OU か別組織で先にテストし、影響を確認してから狭いOU→広いOUへ。
- CloudTrailで対象アクションの実利用を棚卸し(特にIMDSv1・config/cloudtrail変更・使用リージョン)。RCPで組織境界を締める前は IAM Access Analyzer で外部共有を洗い出す。
- 除外は特権ロール(運用/IaC/CI-CDロール)に限定。
ArnNotLike aws:PrincipalArnで。例外を広げすぎない。 FullAWSAccess/RCPFullAWSAccessは絶対に外さない(Denyリスト戦略の大前提)。
Deny * を本番OUに付けない。ポリシーの点検には「貼るだけ診断」ツール(IAM最小権限・リソースポリシー公開診断)も使えます。12まとめ — 監査保護から、段階的に
最低限は①監査・検知の保護/②root禁止/③離脱防止の3点セット。ここまでは影響が小さく、すぐ入れられます。そのうえで④リージョン制限/⑤危険設定禁止/RCP/宣言的ポリシーを、検証しながら段階的に。Control Towerを使えば多くが標準で入ります。
EMWは、マルチアカウントのガードレール設計・SCP/RCPの棚卸し・段階適用を、既存構成を壊さない形でお手伝いします。仕組みの全体像はAWS Organizationsの仕組みと設計もどうぞ。
13よくある質問(FAQ)
SCPを付けたら権限が増えますか?
増えません。SCP/RCPは上限(ガードレール)で、許可はIAMポリシー側で別途必要です。実効権限は「SCP ∩ RCP ∩ IDポリシー」の論理積になります。
最初にどれを入れるべきですか?
監査・検知の保護(CloudTrail/Config/GuardDuty/Security Hubの停止・削除を禁止するSCP)です。誰の業務も止めず、いざという時の証跡を守れます。次にroot禁止・離脱防止、その後に検証してからリージョン制限・危険設定を段階適用します。
管理アカウントにSCPは効きますか?
効きません。SCPもRCPも管理アカウントのプリンシパル/リソースには適用されないため、管理アカウントにはワークロードを置かず、別途IAM・監視で守ります。
いきなり本番OUに付けても大丈夫ですか?
危険です。特にリージョン制限や広いDenyは既存ワークロードを壊します。Policy Staging OUや別組織で検証し、CloudTrailで対象アクションの実利用を棚卸ししてから、狭いOUへ段階適用してください。FullAWSAccessは絶対に外さないこと。
マルチアカウントのガードレール設計・SCP/RCPの棚卸し・段階適用でお困りなら、既存構成を壊さない形で一緒に整えます。
相談する