# Data Perimeters 数据防护边界

AWS的数据边界通过IAM条件键和策略实现，确保只有可信身份、可信资源和预期网络可以访问数据。确保数据的安全性和合规性的同时提高运营效率。与传统的友商提供的网络防火墙相比，AWS的数据边界策略提供了更为精细化的控制，且无需额外成本。能够清晰地区分“我的AWS”和其他客户，确保只有可信的访问发生。这个“圈”包括三个核心部分：身份边界、资源边界和网络边界。云上安全防护边界能够提供基于角色的访问控制和细粒度的策略管理，支持动态调整以适应云环境的变化，而传统防火墙则在管理和配置上更为复杂和僵化。

## 为什么需要数据防护边界

使用数据防护边界可以确保只有可信的身份可以从预期的网络访问受信任的资源，减少攻击和风险暴露面。并且搭建数据防护边界是几乎免费的。通过始终有效的防护来避免过大的授权和错误的配置造成的重大安全事件。数据防护边界定义了你预期或期望发生的事情。它指的是允许的身份、资源和网络之间的访问模式。使用这三个元素，我们可以做出以下断言来定义我们边界的目标：只有当身份被信任、资源被信任、网络被预期时，才能允许访问。如果这些条件中的任何一个为假，则边界内的访问是无意的，应该被拒绝。

您可以通过使用**权限防护机制**来建立数据边界，以限制组织边界以外的访问。这是通过三个主要的亚马逊云功能来实现的：亚马逊组织[服务控制策略](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCP)、[基于资源的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)和[VPC端点策略](https://docs.amazonaws.cn/vpc/latest/privatelink/vpc-endpoints-access.html)。

**边界的目标**是确保授权的三个条件成立，也就是**仅可信身份**，**仅可信资源**，**仅预期的网络**。每个授权条件均有两个目标。对应使用的策略类型和IAM条件如下：

<table><thead><tr><th width="139">授权条件</th><th width="191">边界目标</th><th width="131">使用策略类型</th><th>IAM条件</th></tr></thead><tbody><tr><td>仅可信身份</td><td>确保只有<strong>可信身份</strong>才能访问我的资源。</td><td>资源策略</td><td>aws:PrincipalOrgId, aws:PrincipalIsAWSService,<br>aws:PrincipalOrgPaths,<br>aws:PrincipalAccount</td></tr><tr><td></td><td>确保只有<strong>可信身份</strong>才能从我的网络进行访问</td><td>VPC端点策略</td><td>aws:PrincipalOrgId, aws:PrincipalIsAWSService</td></tr><tr><td>仅可信资源</td><td>确保我的身份只能访问<strong>可信资源</strong>。</td><td>SCP</td><td>aws:ResourceOrgId</td></tr><tr><td></td><td>确保只能从我的网络访问<strong>可信资源</strong>。</td><td>VPC端点策略</td><td>aws:ResourceOrgId</td></tr><tr><td>仅预期的网络</td><td>确保我的身份只能从<strong>预期的网络</strong>访问资源。</td><td>SCP</td><td>aws:SourceIp, <br>aws:SourceVpc, aws:ViaAWSService</td></tr><tr><td></td><td>确保只能从<strong>预期的网络</strong>访问我的资源。</td><td>资源策略</td><td>aws:SourceIp, <br>aws:SourceVpc, aws:ViaAWSService, aws:PrincipalIsAWSService</td></tr></tbody></table>

### 仅可信身份 <a href="#ref99105743" id="ref99105743"></a>

<https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/perimeter-implementation.html#only-trusted-identities>

仅可信身份的目标是<mark style="color:purple;">**确保只有可信身份访问我的资源**</mark>。并且只有可信身份可以访问我的网络。目标将通过<mark style="color:orange;">**资源策略**</mark>和<mark style="color:orange;">**VPC端点策略**</mark>实现。

确保可信身份的关键就是在策略中指定`aws:PrincipalOrgId`条件，这个条件可以限制访问资源的主体来自您的AWS组织。

类似的，你也可以使用`aws:PrincipalAccount` 或 `aws:PrincipalOrgPaths`限制访问资源的主体来自指定的账号或者组织。下图展示了这些控制如何防止意外主体访问您的资源或使用您的网络。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FG6tg9cmcnFf5zOuNfxla%2Fimage.png?alt=media&#x26;token=4bb551c5-adbd-445e-8c54-bba67e2563f3" alt=""><figcaption><p>在基于资源的策略和 VPC 端点策略中防止意外主体</p></figcaption></figure>

### 仅可信资源

假设你的A账号的权限丢失，攻击者自己的账号是B，攻击者将B账号的S3存储桶策略修改为允许A账号写入，这样在没有资源边界的情况下，A账号的存储桶会拷贝到B账号中。

仅可信资源的目标是<mark style="color:purple;">**确保可信身份，从我的网络只能访问可信资源**</mark>。目标将通过SCP和VPC端点策略实现。

需要使用`aws:ResourceOrgId`这个条件，限制所访问的资源是**组织内的资源**。

在某些情况下，您可能需要**直接访问 AWS 以外的资源**。这些资源可能是 AWS 提供的Amazon S3 存储桶，存放有 Amazon Linux 软件包、CloudWatch 代理安装或公共数据存储库 。它们也可能是公共 SSM 参数等资源。当你使用 [cfn-hup ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-hup.html)时，它支持 `on.command` 钩子，允许你使用 Amazon SQS 消息来调用 cfn-hup 操作。在 AWS Elastic Beanstalk 环境中，cfn-hup 守护进程会检索 AWS CloudFormation 的特定凭证，以查询 AWS 拥有的 Amazon SQS 队列。请记住，SCP 并不适用于 Service-Linked Role 或 AWS 服务 principals，因此当您需要创建例外以允许它们访问 VPC 中的资源时，**您需要使用 VPC 端点策略**。例如，为了使用 AWS CloudFormation 等待条件信令（该信令使用亚马逊 S3 预签名 URL 访问 AWS 拥有的存储桶），您必须在 VPC 端点策略中创建一个例外，以允许这种访问。

**您需要同时使用 SCP 和 VPC 端点策略来创建必要的例外。**&#x5728; VPC 端点策略中，你可以在允许语句的资源元素中明确列出受信任的资源。但在 SCP 中，只能在拒绝语句中列出特定资源。在这种情况下，我们不想拒绝资源，而是要允许它们。相反，您可以修改需要 aws:ResourceOrgId 的受信任资源 SCP。该语句可以使用 NotAction 元素来免除满足 aws:ResourceOrgId 条件的特定操作。通过这种组合方法，您可以将 SCP 中的特定操作从 aws:ResourceOrgId 护栏中排除，并通过在 VPC 端点策略中明确允许这些操作，确保只有特定资源才能使用这些权限进行访问。

在其他一些情况下，您可以使用代表您的服务与不属于您组织的资源进行交互。例如，AWS Service Catalog 和 AWS Data Exchange 会将数据写入不属于您的 Amazon S3 存储桶。Amazon Athena 也可以将数据写入您不拥有的存储桶。在前一种情况下，AWS 拥有这些服务存储数据的存储桶，但在后一种情况下，Athena 的存储桶可能被任何人拥有。因此，您可能不希望使用 aws:ViaAWSService 条件为访问外部资源创建一个广泛的例外。并非所有可通过 AWS 服务访问的资源都应被视为可信资源。相反，您可以使用 `aws:CalledVia` 条件来明确允许服务以这种方式运行。

可以根据 [AWS data perimeter policy examples repo](https://github.com/aws-samples/data-perimeter-policy-examples) 关于创建所需的SCP和VPC端点策略的模板和指引。尤其推荐查看 [resource perimeter policy](https://github.com/aws-samples/data-perimeter-policy-examples/blob/main/service_control_policies/resource_perimeter_policy.json) 和 [default endpoint policy](https://github.com/aws-samples/data-perimeter-policy-examples/blob/main/vpc_endpoint_policies/default_endpoint_policy.json)。

### 仅预期的网络

目标是<mark style="color:purple;">**确保只有从我预期的网络可以发起请求**</mark>。目标将通过SCP和资源策略实现。

在SCP策略中，您可以使用`aws:SourceIp`定义预期的IP地址，或者使用`aws:SourceVpc`定义预期的VPC。下图假设您允许可信身份从公司的网络访问AWS资源，但是不能从咖啡馆访问。这样就算身份凭据丢失，攻击者也无法从自己的网络访问资源。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FjJjtIpaW4bCqyaKH8Tal%2Fimage.png?alt=media&#x26;token=c1ae78ee-6a07-407d-968d-300930cbd168" alt=""><figcaption></figcaption></figure>

## 注意点

1. SCP仅对子账号有效，无法控制管理账号的资源，因此管理账号要特殊防护，可以参考[Management Account的最佳实践](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html)。
2. SCPs 可以使用的前提条件是只有当organization 的所有功能都启用才行（ [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html)）。如果贵组织只启用了合并计费功能，则无法使用 SCP。更多详细信息可以参考： [Enabling and disabling policy types](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_enable-disable.html)。
3. SCP不授予任何权限，只能限制权限范围，缩小权限。管理员仍必须将基于身份或基于资源的策略附加到 IAM 用户或角色，或附加到账户中的资源，才能实际授予权限。有效权限是 SCP 允许的权限与 IAM 和基于资源的策略允许的权限之间的逻辑交叉点。
4. SCP的配额参见[此文档](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html#min-max-values)，您可以使用 控制台"服务配额 "申请增加其中一些值。Organization  "是一项全球服务，物理托管在美国东部（弗吉尼亚州北部）区域 (us-east-1)。因此，在使用 "服务配额 "控制台、AWS CLI 或 AWS SDK 时，必须使用 us-east-1 访问 "Organization "配额。
5. SCP 会影响附加账户中的所有用户和角色，包括根用户。唯一的例外是那些[不受 SCP 限制的任务和实体。](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html#not-restricted-by-scp)
6. SCP 并不适用于 Service-Linked Role 或 AWS 服务 principals。

## Global region

### 参考资料

\[Overview] [Data perimeters on AWS](https://aws.amazon.com/identity/data-perimeters-on-aws/)

\[Workshop] [Data perimeter workshop](https://catalog.us-east-1.prod.workshops.aws/v2/workshops/a11f0f32-cc23-4c95-b243-43c53bdc7177/)

\[blog] [Establishing a data perimeter on AWS: Allow only trusted resources from my organization](https://aws.amazon.com/blogs/security/establishing-a-data-perimeter-on-aws-allow-only-trusted-resources-from-my-organization/)

\[blog] [Establishing a data perimeter on AWS: Allow only trusted identities to access company data](https://aws.amazon.com/blogs/security/establishing-a-data-perimeter-on-aws-allow-only-trusted-identities-to-access-company-data/)

\[blog] [Establishing a data perimeter on AWS: Allow access to company data only from expected networks](https://aws.amazon.com/blogs/security/establishing-a-data-perimeter-on-aws-allow-access-to-company-data-only-from-expected-networks/)

\[blog] [Establishing a data perimeter on AWS: Overview](https://aws.amazon.com/blogs/security/establishing-a-data-perimeter-on-aws/)

\[blog] [IAM makes it easier for you to manage permissions for AWS services accessing your resources](https://aws.amazon.com/blogs/security/iam-makes-it-easier-to-manage-permissions-for-aws-services-accessing-resources/)

\[blog] [How to use policies to restrict where EC2 instance credentials can be used from](https://aws.amazon.com/blogs/security/how-to-use-policies-to-restrict-where-ec2-instance-credentials-can-be-used-from/)

\[Whitepaper] [Building a Data Perimeter on AWS](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/building-a-data-perimeter-on-aws.html)

\[youtube] [Building a data perimeter in AWS - AWS Online Tech Talks](https://www.youtube.com/watch?v=eukTW9xdheQ)

\[Github] [Data Perimeter Policy Examples](https://github.com/aws-samples/data-perimeter-policy-examples/tree/main)

\[blog] [Managing permissions at scale ](https://aws.amazon.com/blogs/security/iam-makes-it-easier-to-manage-permissions-for-aws-services-accessing-resources/)

\[blog] [How to control access to AWS resources based on AWS account, OU, or organization ](https://aws.amazon.com/blogs/security/how-to-control-access-to-aws-resources-based-on-aws-account-ou-or-organization/)

\[doc] [CalledVia Condition Key ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)

\[doc] [Using Athena with CalledVia context keys ](https://docs.aws.amazon.com/athena/latest/ug/security-iam-athena-calledvia.html)

\[VPC endpoints control] [How can I restrict access to my Amazon S3 bucket using specific VPC endpoints or IP addresses? ](https://aws.amazon.com/premiumsupport/knowledge-center/block-s3-traffic-vpc-ip/)

\[VPC endpoints control] [Controlling access from VPC endpoints with bucket policies ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

<https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html>

\[doc] [VPC endpoint document](https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html)

\[blog][Establishing a data perimeter on AWS: Require services to be created only within expected networks](https://aws.amazon.com/blogs/security/establishing-a-data-perimeter-on-aws-require-services-to-be-created-only-within-expected-networks/)

## China region

[\[AWS docs\] 服务控制策略 (SCP)](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_scps.html)

[\[白皮书\]亚马逊云科技白皮书 为云上数据构建安全边界](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/whitepapers/Whitepaper_BDP_CN.pdf)

<https://www.amazonaws.cn/iam/data-perimeters/>

\[AWS blogs] [在 Amazon 上建立数据边界：概述](https://aws.amazon.com/cn/blogs/china/establishing-a-data-perimeter-on-aws/)

\[AWS blogs] [在 Amazon 上建立数据边界：仅允许来自我的组织的可信资源](https://aws.amazon.com/cn/blogs/china/establishing-a-data-perimeter-on-aws-allow-only-trusted-resources-from-my-organization/)

\[AWS blogs] [在 Amazon 上建立数据边界：仅允许可信身份访问公司数据](https://aws.amazon.com/cn/blogs/china/establishing-a-data-perimeter-on-aws-allow-only-trusted-identities-to-access-company-data/)

\[AWS blogs] [IAM 让您轻松管理访问资源的 Amazon 服务的权限](https://aws.amazon.com/cn/blogs/china/iam-makes-it-easier-to-manage-permissions-for-aws-services/)
