tonystpierre/aws-rcp-data-perimeter-starter
GitHub: tonystpierre/aws-rcp-data-perimeter-starter
一套面向 AWS Organizations Resource Control Policies 的数据外围防御入门套件,提供参考策略、异常治理、本地验证和分阶段推广指南。
Stars: 0 | Forks: 0
一个小巧且具有明确导向的入门套件,旨在帮助您将 AWS Organizations Resource Control Policies 作为 AWS 数据外围防御的一部分进行采纳。
本仓库是以下内容的配套产物:
`超越仅限 SCP 的外围防御:使用 Resource Control Policies 架构 AWS 数据外围防御`
配套文章:[超越仅限 SCP 的外围防御:使用 Resource Control Policies 架构 AWS 数据外围防御](https://tonystpierre.com/writing/aws-resource-control-policies-data-perimeters)
## 为什么会有这个项目
大多数 AWS 安全程序都是从管理身份开始的。这是正确的起点。IAM 策略、权限边界和服务控制策略(SCPs)仍然是必不可少的。
但身份端的控制并不能完全回答另一个问题:您的账户中的资源应该被允许通过基于资源的策略接受什么?
S3 存储桶策略、KMS 密钥策略、SQS 队列策略、Secrets Manager 资源策略和 AWS Sign-In 资源策略都可以创建入站路径。Resource Control Policies (RCPs) 为受支持服务的资源端提供了 AWS Organizations 护栏。
其中有用的部分不在于单一的拒绝语句。而在于这套操作循环:策略、异常记录、验证和分阶段推广。
这个仓库有意保持这个小循环的精简:
- 几个经过精心筛选的 RCP 示例。
- 一个互补的用于 KMS 管理的 SCP。
- 一个异常登记表。
- 一个本地验证器。
- 一份分阶段推广手册。
异常列表就是您的防御边界。
## SCPs 与 RCPs
SCPs 为 AWS Organizations 成员账户中的身份设置最大可用权限。它们不授予权限,也不管理组织外部的外部主体。
RCPs 为成员账户中受支持的资源设置最大资源端权限。它们也不授予权限。它们限制了这些资源被允许接受的内容。
这两层都不能替代 IAM。这两层都不能替代本地资源策略。一个真正的数据外围防御仍然依赖于身份策略、资源策略、SCPs、RCPs、VPC endpoint 策略、特定服务的控制、日志记录、分析以及异常管理。
## 本仓库不做的事情
这不是 Terraform、CDK、CloudFormation,也不是部署框架、策略生成器或完整的策略库。
这些策略是参考模式。它们不是可以直接用于生产环境的复制/粘贴控制手段。
## 架构
```
flowchart LR
exceptionRegister[Exception register]
validation[Local validation and CI]
analyzer[Access Analyzer and CloudTrail review]
subgraph org[AWS Organization]
root[Root]
ou[Sandbox / Workload OU]
account[Member account]
scp[SCP identity guardrails]
rcp[RCP resource guardrails]
resources[Supported resources]
resourcePolicies[Local resource policies]
end
root --> ou --> account
scp --> account
rcp --> resources
resourcePolicies --> resources
exceptionRegister --> validation --> rcp
analyzer --> exceptionRegister
analyzer --> validation
```
## 包含的示例
| 文件 | 类型 | 存在原因 |
| --- | --- | --- |
| `policies/resource-control-policies/01-trusted-identity-perimeter.json` | RCP | 当主体位于 `o-xxxxxxxxxx` 之外时,拒绝选定的受支持资源访问,不包括 AWS 服务主体。 |
| `policies/resource-control-policies/02-kms-cryptographic-boundary.json` | RCP | 拒绝组织外的主体使用客户管理的 KMS 密钥和创建授权。 |
| `policies/resource-control-policies/03-aws-service-confused-deputy-boundary.json` | RCP | 展示了如何使用源组织和源账户上下文来限制 AWS 服务主体的访问。 |
| `policies/resource-control-policies/04-s3-transport-boundary.json` | RCP | 将 HTTPS 强制执行与 S3 TLS 版本强制执行分离开来。 |
| `policies/resource-control-policies/05-console-signin-network-boundary.json` | RCP | 使用 AWS Sign-In RCP 操作,模拟谨慎的 AWS 管理控制台登录网络控制。 |
| `policies/service-control-policies/kms-grant-administration-boundary.json` | SCP | 展示了针对敏感 KMS 管理的身份端配套控制。 |
## 挂载计划
不要将这些示例简单拼接并大范围地捆绑挂载。每个 RCP 文件都是一个候选的客户托管策略文档,而不是部署单元。
在本仓库审查的配额下,`RCPFullAWSAccess` 会计入根、OU 或账户上允许的 5 个直接 RCP 挂载数量。这使得在特定挂载目标上还剩下四个客户管理的 RCP 槽位。请选择您需要的控制措施,使用验证器检查压缩后的大小,并在挂载前记录例外情况。
如果您以后通过 Terraform、CloudFormation、CDK 或其他流水线生成策略 JSON,请保持对渲染出的 JSON 进行审查,并将其通过相同的验证器运行。不要让流水线变量成为未记录的外围绕过途径。
## 重要注意事项
KMS RCP 适用于客户管理的密钥。AWS 文档说明 RCP 不适用于 AWS 托管的 KMS 密钥,且不影响 `kms:RetireGrant`。KMS 授权和密钥管理仍然需要身份端的治理,这就是为什么本仓库包含了配套的 SCP。
S3 传输示例使用 TLS 1.2 作为保守的最低要求。在没有检查 endpoint 兼容性和旧版客户端之前,不要直接转向 TLS 1.3 强制执行。
混淆代理示例不会盲目信任每个 AWS 服务主体。它也不假装服务集成很简单。在扩大范围之前,请测试日志记录、加密、事件、交付和供应商流程。
AWS Sign-In 示例可能会将人拒之门外。它不管理使用访问密钥或 SigV4 签名的 API 调用的程序化访问。在启用控制台授权之前,请测试排除的主体和恢复路径。
## 快速开始
1. 替换占位符:`o-xxxxxxxxxx`, `123456789012`, `203.0.113.0/24`, `vpc-0abc123def456789`, `REGION_HERE`, 和 `arn:aws:iam::123456789012:role/BreakGlassRole`。
2. 运行本地检查:
python tools/validate_policy_pack.py
python -m unittest
3. 将 `exceptions/exception-register.example.json` 作为真正的控制产物进行审查,而不是示例元数据。
4. 在沙盒账户或沙盒 OU 中进行测试。
5. 在有用的地方使用 IAM Access Analyzer,并查看 CloudTrail 的拒绝事件。这些工具可以减少盲区;它们不能证明绝对安全。
6. 每次只移动一个 OU。只有在进行了较低范围的验证并准备好回滚路径之后,才能在根目录挂载。
## 生产环境警告
RCPs 是预防性控制措施。它们可能会破坏工作负载、AWS 服务集成、跨账户访问、供应商访问和控制台登录。
在使用这些模式之前,请针对 RCP 受支持的服务、配额、AWS Sign-In 行为、KMS 限制和服务相关角色行为,重新查阅当前的 AWS 文档。AWS 的服务支持会随着时间的推移而变化。
## 来源说明
提供这些说明是因为过时的 AWS 假设会导致糟糕的护栏。本仓库于 2026-06-24 根据官方 AWS 文档进行了审查。
当时,AWS 文档记录了:
- RCPs 是挂载到根、OU 或账户的 AWS Organizations 策略。
- RCPs 不授予访问权限,并且仅适用于成员账户中受支持的服务。
- 客户管理的 RCPs 使用 `Effect: Deny`、`Principal: "*"`,不使用 `NotAction`,不使用 `NotPrincipal`,且不使用单纯的全局 `Action: "*"`。
- RCP 策略大小为 5,120 个字符;SCP 策略大小为 10,240 个字符。
- 最多 5 个 RCP 可以直接挂载到根、OU 或账户;`RCPFullAWSAccess` 计入该配额。
- 最多 10 个 SCP 可以直接挂载到根、OU 或账户。
- RCPs 不影响管理账户资源、服务相关角色、AWS 托管的 KMS 密钥或 `kms:RetireGrant`。
- SCPs 不影响管理账户中的用户或角色,不授予权限,也不影响组织外部的外部主体。
- AWS Sign-In RCPs 在身份验证之前使用 `signin:Authenticate`,在身份验证之后使用 `signin:AuthorizeOAuth2Access` / `signin:CreateOAuth2Token`;必须先启用控制台授权,然后语句才能生效。
在发布或使用前请重新检查:
- RCP 支持的服务。
- AWS Organizations 配额。
- AWS Sign-In 行为。
- KMS RCP 的注意事项。
## 审查过的官方参考资料
- [AWS Organizations: Resource control policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)
- [AWS Organizations: RCP syntax](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps_syntax.html)
- [AWS Organizations: Service control policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)
- [AWS Organizations: SCP syntax](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_syntax.html)
- [AWS Organizations: SCP evaluation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_evaluation.html)
- [AWS Organizations quotas and policy size limits](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html)
- [IAM: Data perimeters](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_data-perimeters.html)
- [IAM global condition context keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)
- [IAM condition operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)
- [IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)
- [Amazon S3 policy keys, including `s3:TlsVersion`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html)
- [AWS Sign-In console access control with resource policies and RCPs](https://docs.aws.amazon.com/signin/latest/userguide/console-access-control.html)
- [AWS Sign-In condition keys reference](https://docs.aws.amazon.com/signin/latest/userguide/reference-signin-condition-keys.html)
- [AWS Sign-In Service Authorization Reference](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssignin.html)
标签:AWS, DPI, Homebrew安装, 合规治理, 数据边界, 策略配置, 资源控制, 逆向工具