# 🛡️ 了解 AWS Organizations 中的 Service Control Policies (SCPs)
Source: Dev.to
介绍
SCP 解决了什么问题?
服务控制策略(Service Control Policies,SCP)与 IAM 权限不同,不授予权限,而是限制权限。它们常被称为 护栏,是 AWS 治理以及制定企业安全合规准则的关键工具。
在继续之前,需要先了解一些前置概念:
IAM Policy
一种 IAM 策略,用于向 AWS 用户和角色授予权限。
AWS Organizations
AWS Organizations 是一项服务,可集中管理和治理多个 AWS 账户。使用 Organizations 可以:
- 创建和管理 AWS 账户(Account Management)
- 集中管理 AWS 账户的费用(Billing)
- 与 IAM Identity Center 一起管理账户权限(Identity and Access Management)
- 向 AWS 账户应用安全策略(SCPs)
- 启用多账户服务(Multi‑account)
- 按组织单元(Organizational Units)对账户进行分组(组织层级)
- 审计多账户环境(Audit)
- 在多个账户之间共享资源(Resource sharing)
- 通过 CloudFormation 自动化创建多账户(Multi‑account)
Service Control Policies (SCPs)
AWS Organizations 的一种策略类型,用于限制属于组织的 AWS 账户的权限。
SCP 的结构

SCP 的主要元素
| 元素 | 功能 |
|---|---|
| Statement | 策略的主容器。一个 SCP 可以包含多个 statement(注意:字符数有限制)。 |
| Effect | 定义 statement 是允许 (Allow) 还是拒绝 (Deny) 操作。注意:Allow 不支持条件。 |
| Action | 指定允许或拒绝的 AWS 操作(例如 s3:PutObject)。 |
| Resource | 指明策略适用于哪些 AWS 资源(例如特定的 bucket)。 |
| Condition (可选) | 为 statement 添加仅在特定情况下生效的条件。 |
| NotAction | 与 Action 相反:指定在 SCP 中免除的操作。 |
| NotResource | 与 Resource 相反:指定在 SCP 中免除的资源。 |
| Sid (可选) | 为 statement 提供一个友好的标识名称。 |
| Version | 指定策略语言的版本(始终使用 "2012-10-17")。 |
SCP 的行为
为了更好地理解 SCP 的工作方式,可将其行为归纳为四大类:
1. 基本原则
- 本质: 不授予权限,只限制权限。
- 评估: 只有当存在允许的 IAM 策略 且 SCP 允许或未拒绝 时,权限才会生效。最终评估逻辑请参见 AWS 官方文档。
2. 范围:影响对象
- 成员账户: SCP 限制所有用户和角色的权限,包括 root 用户。
- 受委托管理员: 也受影响,因为他们位于成员账户中。
- 关键例外: 管理账户(Management Account) 不受 SCP 影响。
3. 与其他策略的交互
- IAM Deny: 始终优先于任何 SCP。
- SCP Deny: 明确阻止操作,即使 IAM 授予了
AdministratorAccess。 - Permission Boundaries: 最终评估需要满足:IAM Allow + SCP Allow + Boundary Allow。
4. 技术例外
- Service‑Linked Roles: 不能被 SCP 限制,因为它们是 AWS 服务正常运行的必要角色。
- 基于资源的策略(Resource‑Based Policies): 不受 SCP 影响;如果资源策略允许,外部对资源的访问仍然有效(例如 S3 bucket)。
- 外部用户: 不受 SCP 影响,即使他们访问受限账户内的资源。
SCP 应用的范围
在 AWS Organizations 中,SCP 适用于属于组织的 AWS 账户以及组织单元(OUs)。OU 类似于文件夹,用于对账户进行分组。
下面是 AWS Organizations 中组织层级的示意图:

组织层级的组成部分
- 根账户(Root): 组织的主账户。重要提示: 对根账户应用 SCP 会影响组织内所有账户,且没有例外。
- 组织单元(OUs): 用于对账户进行分组的文件夹。对 OU 应用 SCP 会影响该 OU 下的所有账户。
- 账户: 组织内的每个 AWS 账户。对单个账户应用 SCP 只影响该账户本身。
注意: 通过策略继承,SCP 可以一次性作用于多个账户。
实验室:创建 SCP
实验成本: $0
⚠️ 警告: 切勿在生产账户或包含生产账户的环境中直接应用 SCP。请始终使用测试账户先验证 SCP 的行为,再在多个账户中推广。
A. 搭建实验环境以测试 SCP
🔐 前置条件
- 拥有一个用于创建组织的主 AWS 账户(payer)。
- 对该账户拥有管理员权限。
- 创建第二个账户不需要额外的付款方式。
✅ 步骤 1:在 AWS 中创建组织(如果尚未创建)
- 登录管理员(payer/root)账户。
- 打开 AWS Organizations 服务。
- 若尚未有组织,点击 Create Organization 并确认创建。
🎉 现在可以使用 SCP 了。
✅ 步骤 2:为测试创建一个组织单元(OU)
- 在 AWS Organizations 中,进入 AWS accounts。
- 选中根 OU(root),点击 Actions。
- 选择 Create new organizational unit (OU)。
- 为 OU 起一个清晰的名称(例如
lab-scp-test),并确认。
✅ 步骤 3:在该 OU 中创建一个成员账户
- 在 AWS Organizations 中,进入 AWS Accounts → Add an AWS account → Create an AWS account。
- 填写以下信息:
- Account name:
lab-scp-member(或你喜欢的名称)。 - Email address: 使用与你的管理员账户相同的邮箱别名。
- Account name:
- 完成创建;这将是你用于验证 SCP 的“测试账户”。
(随后根据需要继续配置策略并进行测试。)