亚马逊AWS官方博客

AWS Control Tower 新增功能 – 区域拒绝和防护机制可帮助您满足数据驻留要求

许多客户(例如受到严格监管的行业和公共部门的客户)都希望能够控制其数据的存储和处理位置。AWS 已经提供了许多符合当地法律法规的工具和功能,但我们希望提供一种简化的方法,将数据驻留要求转化为可应用于单账户和多账户环境的控制措施。

从今天开始,您可以使用 AWS Control Tower 部署数据驻留预防侦测控制(称为防护机制)。这些防护机制将通过 AWS Control Tower 构建和管理的服务控制策略(SCP)限制对 AWS API 的访问,从而防止在不需要的 AWS 区域预置资源。这样就无法在基础设施级别在所选区域之外创建或传输内容。在这种情况下,内容可以是托管在 AWS 上进行处理或存储的软件(包括机器映像)、数据、文本、音频、视频或图像。例如,德国的 AWS 客户可以拒绝访问法兰克福以外区域的 AWS 服务,但 AWS Identity and Access Management(IAM)AWS Organizations 等全球服务除外。

AWS Control Tower 还提供了防护机制,以进一步控制基础 AWS 服务选项中的数据驻留,例如,阻止 Amazon Simple Storage Service(Amazon S3)跨区域复制或阻止创建互联网网关。

用于管理 AWS Control Tower 的 AWS 账户不受新的区域拒绝设置的限制。如果您在启用区域拒绝之前在不需要的区域中存有数据,可以使用该账户进行修正。

侦测防护机制通过 AWS Config 规则实现,可以进一步检测不应允许的意外配置更改。

您仍然保留应用程序级别数据驻留的责任共担模式,但是这些控制措施可以帮助您限制基础设施和应用程序团队在 AWS 上可以执行的操作。

在 AWS Control Tower 中使用数据驻留防护机制
要使用新的数据驻留防护机制,您需要使用 AWS Control Tower 创建登录区。有关更多信息,请参阅规划 AWS Control Tower 登录区

要查看所有可用的新控件,请在 AWS Control Tower 控制台的左窗格中选择 Guardrails(防护机制),然后在 Data Residency(数据驻留)类别中找到这些控件。结果按 Behavior(行为)排序。具有 Prevention(预防)行为的防护机制将作为 SCP 实施。那些具有 Detection(检测)行为的防护机制将作为 AWS Config 规则实施。

控制台屏幕截图。

最有趣的防护机制可能是根据请求的 AWS 区域拒绝访问 AWS 的防护机制。我从列表中选择这个防护机制,发现它与其他防护机制不同,因为它会影响所有组织部门(OU),并且无法在此处激活,但必须在登录区设置中激活。

控制台屏幕截图。

Overview(概述)下方的 Guardrail components(防护机制组件)中,有一个指向此防护机制的完整 SCP 的链接,我可以看到 AWS API 列表,启用此设置后,仍将允许这些 API 进入非管辖区域。根据您的要求,其中一些服务,例如 Amazon CloudFrontAWS Global Accelerator,可能会受到自定义 SCP 的进一步限制。

Landing zone settings(登录区设置)中,区域拒绝防护机制目前尚未启用。我选择 Modify settings(修改设置),然后启用 Region deny settings(区域拒绝设置)。

控制台屏幕截图。

在 Region deny settings(区域拒绝设置)下方,有受登录区管辖的 AWS 区域列表。当我启用 Region deny(区域拒绝)时,这些将是允许的区域。

控制台屏幕截图。

就我而言,我有四个管辖区域,两个在美国,两个在欧洲:

  • 美国东部(弗吉尼亚北部),也是登录区的主区域
  • 美国西部(俄勒冈)
  • 欧洲(爱尔兰)
  • 欧洲(法兰克福)

我选择底部的 Update landing zone(更新登录区)。更新登录区需要几分钟才能完成。现在,如果绝大多数 AWS API 没有定向到这些受管辖的区域之一,它们将被阻止。我们来做一些测试。

在沙盒账户中测试区域拒绝
使用 AWS Single Sign-On,我复制 AWS 凭证以使用具有 AWSAdministratorAccess 权限的沙盒账户。在终端中,我粘贴设置环境变量的命令以使用这些凭证。

控制台屏幕截图。

现在,我尝试在非管辖区域之一的美国东部(俄亥俄)启动一个新的 Amazon Elastic Compute Cloud(Amazon EC2)实例。在登录区中,默认 VPC 被替换为 AWS Control Tower 管理的 VPC。要启动实例,我需要指定一个 VPC 子网。让我们找到一个我可以使用的子网 ID。

aws ec2 describe-subnets --query 'Subnets[0].SubnetId' --region us-east-2

调用 DescribeSubnets 操作时发生错误(未经授权的操作):
您无权执行此操作。

正如所预期的那样,我无权在美国东部(俄亥俄)执行此操作。让我们尝试在不传递子网 ID 的情况下启动 EC2 实例。

aws ec2 run-instances --image-id ami-0dd0ccab7e2801812 --region us-east-2 \
    --instance-type t3.small                                     

调用 RunInstances 操作时发生错误(未经授权的操作):
您无权执行此操作。
编码的授权失败消息:<ENCODED MESSAGE>

同样,我没有权限。更多信息包含在编码的授权失败消息中,我可以按照本文所述对其进行解码:

aws sts decode-authorization-message --encoded-message <ENCODED MESSAGE>

解码后的消息(为简洁起见我省略了这条消息)告诉我,我的请求被显式拒绝,消息中包含导致拒绝的完整 SCP。这些信息对于调试此类错误非常有用。

现在,让我们在美国东部(弗吉尼亚北部)尝试,这是四个管辖区域之一。

aws ec2 describe-subnets --query 'Subnets[0].SubnetId' --region us-east-1
"subnet-0f3580c0c5e56c210"

这次,该命令返回了请求返回的第一个子网的子网 ID。让我们使用此子网在美国东部(弗吉尼亚北部)启动一个实例。

aws ec2 run-instances --image-id  ami-04ad2567c9e3d7893 --region us-east-1 \
    --instance-type t3.small --subnet-id subnet-0f3580c0c5e56c210

正如所预期的那样,该命令有效,我可以看到 EC2 实例正在控制台中运行。

控制台屏幕截图。

同样,其他 AWS 服务的 API 也受到区域拒绝设置的限制。例如,我无法在非管辖区域中创建 S3 存储桶。

控制台屏幕截图。

当我尝试创建存储桶时,出现访问被拒绝错误。

控制台屏幕截图。

正如所预期的那样,可以在受管辖的区域中创建 S3 存储桶。

即使有人授予此账户访问非管辖区域中的存储桶的权限,我也无法将任何数据复制到该存储桶中。

其他预防性防护机制可以强制执行数据驻留,例如:

  • 禁止对 Amazon EC2、Amazon CloudFront 和 AWS Global Accelerator 进行跨区域联网
  • 禁止客户管理的 Amazon VPC 实例访问互联网
  • 禁止 Amazon 虚拟专用网络(VPN)连接

现在,让我们看看侦测防护机制的工作原理。

在沙盒账户中测试侦测防护机制
我为沙盒 OU 中的所有账户启用了以下防护机制:

  • 检测是否所有 AWS 账户都可以还原 Amazon EBS 快照
  • 检测互联网网关的路由表中是否存在公共路由

现在,我想看看如果违反这些防护机制,会发生什么情况。在 EC2 控制台中,我为之前启动的 EC2 实例卷创建了一个 EBS 快照。然后,我修改了与所有 AWS 账户共享的权限。

控制台屏幕截图。

然后,在 VPC 控制台中,我创建了一个互联网网关,将其连接到 AWS Control Tower 管理的 VPC,然后更新其中一个私有子网的路由表以使用互联网网关。

控制台屏幕截图。

几分钟后,侦测防护机制发现了沙盒账户中的不合规资源。

控制台屏幕截图。

我查看了防护机制提供的信息,并更新了我的配置以解决问题。在多账户设置中,我会联系账户所有者并要求进行修正。

可用性和定价
您可以使用数据驻留防护机制来控制任何 AWS 区域中的资源。要创建登录区,您应该从提供 AWS Control Tower 的区域之一开始。有关更多信息,请参阅 AWS 区域服务列表。使用此功能不会产生额外费用。您需要支付所使用的其他服务的费用,例如 AWS Config

此功能为您提供了一个控制框架和指导,帮助您设置满足数据驻留要求的多账户环境。您可以根据您的使用案例,使用新的数据驻留防护机制的任何子集。

使用 AWS Control Tower,根据您的数据驻留要求设置防护机制。

Danilo