# 🛡️ 了解 AWS Organizations 中的 Service Control Policies (SCPs)

发布: (2025年12月2日 GMT+8 11:47)
7 min read
原文: Dev.to

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 Syntax

SCP 的主要元素

元素功能
Statement策略的主容器。一个 SCP 可以包含多个 statement(注意:字符数有限制)。
Effect定义 statement 是允许 (Allow) 还是拒绝 (Deny) 操作。注意:Allow 不支持条件。
Action指定允许或拒绝的 AWS 操作(例如 s3:PutObject)。
Resource指明策略适用于哪些 AWS 资源(例如特定的 bucket)。
Condition (可选)为 statement 添加仅在特定情况下生效的条件。
NotActionAction 相反:指定在 SCP 中免除的操作。
NotResourceResource 相反:指定在 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 中组织层级的示意图:

Image Structure Organizations

组织层级的组成部分

  • 根账户(Root): 组织的主账户。重要提示: 对根账户应用 SCP 会影响组织内所有账户,且没有例外。
  • 组织单元(OUs): 用于对账户进行分组的文件夹。对 OU 应用 SCP 会影响该 OU 下的所有账户。
  • 账户: 组织内的每个 AWS 账户。对单个账户应用 SCP 只影响该账户本身。

注意: 通过策略继承,SCP 可以一次性作用于多个账户。

实验室:创建 SCP

实验成本: $0

⚠️ 警告: 切勿在生产账户或包含生产账户的环境中直接应用 SCP。请始终使用测试账户先验证 SCP 的行为,再在多个账户中推广。

A. 搭建实验环境以测试 SCP

🔐 前置条件

  • 拥有一个用于创建组织的主 AWS 账户(payer)。
  • 对该账户拥有管理员权限。
  • 创建第二个账户不需要额外的付款方式。

✅ 步骤 1:在 AWS 中创建组织(如果尚未创建)

  1. 登录管理员(payer/root)账户。
  2. 打开 AWS Organizations 服务。
  3. 若尚未有组织,点击 Create Organization 并确认创建。

🎉 现在可以使用 SCP 了。

✅ 步骤 2:为测试创建一个组织单元(OU)

  1. 在 AWS Organizations 中,进入 AWS accounts
  2. 选中根 OU(root),点击 Actions
  3. 选择 Create new organizational unit (OU)
  4. 为 OU 起一个清晰的名称(例如 lab-scp-test),并确认。

✅ 步骤 3:在该 OU 中创建一个成员账户

  1. 在 AWS Organizations 中,进入 AWS Accounts → Add an AWS account → Create an AWS account
  2. 填写以下信息:
    • Account name: lab-scp-member(或你喜欢的名称)。
    • Email address: 使用与你的管理员账户相同的邮箱别名。
  3. 完成创建;这将是你用于验证 SCP 的“测试账户”。

(随后根据需要继续配置策略并进行测试。)

Back to Blog

相关文章

阅读更多 »

切换账户

@blink_c5eb0afe3975https://dev.to/blink_c5eb0afe3975 正如大家所知,我正重新开始记录我的进展,我认为最好在一个不同的…

Strands 代理 + Agent Core AWS

入门指南:Amazon Bedrock AgentCore 目录 - 前置要求(requisitos‑previos) - 工具包安装(instalación‑del‑toolkit) - 创建…