在多账户环境中大规模管理和保护 AWS PrivateLink 服务访问 安全博客
- 2026-01-27 13:40:53
- 11
在多账户环境中治理和保护 AWS PrivateLink 服务访问
关键要点
在当前的 AWS 多账户环境中,企业越来越多地采用 AWS PrivateLink 以便与内部服务、第三方服务安全地进行通信。随着环境的扩大,PrivateLink 连接的数量也在增加。这篇文章提供了如何在多账户环境中实现对 PrivateLink 服务的集中治理的方法,强调了预防性和侦测性控制措施,以满足组织标准和安全需求。
Amazon Web Services (AWS) 的客户们正在利用 AWS PrivateLink 进行与 AWS 服务、内部服务以及第三方服务的安全通信。随着用户环境的扩大,外发至外部服务和内收至内部服务的 PrivateLink 连接数量也逐渐增多,并且这些连接分布在多个虚拟私有云 (VPC) 账户中。尽管 AWS 身份与访问管理 (IAM) 策略可以控制对个别 PrivateLink 服务的访问,但客户希望有一个集中治理的能力,以确保符合组织标准和安全需求。
本文提供了一种在多账户环境下针对 PrivateLink 服务实现集中治理的方法,创建预防性控制的方式,以及通过事件驱动的自动化来实施侦测性控制。这使得应用团队能够在遵循组织政策的前提下访问内部和外部服务,同时提供了随着 AWS 环境增长而实现集中控制的机制。
客户面临的场景
图 1 展示了一个包含多个账户的客户环境示例,该结构可以通过 AWS Organizations 创建或使用 AWS Control Tower。各个业务单元 (BU) 具有各自的组织单位 (OU) 和账户。业务服务账户托管着若干后端服务,这些服务被多个应用使用。由于这些服务需要跨 VPC 和账户访问,因此通过 AWS PrivateLink 进行了暴露。有些服务就在业务服务账户中。
客户与合作伙伴交互以集成其应用栈。已批准的合作伙伴账户提供的服务得到云管理团队的认可。未被批准的合作伙伴账户提供的服务在客户组织中未被许可。客户还有一个专门为应用团队设立的 OU。应用账户 1 有一个应用在使用来自已批准合作伙伴账户的业务服务,而计划使用未批准合作伙伴的服务,这一操作应被阻止。应用账户 2 的应用计划通过接口端点以及已批准的合作伙伴账户使用 AWS 服务。
注意: 在本文中,“组织”指通过 AWS Organizations 创建和管理的组织。
当前挑战
对单个 PrivateLink 连接的访问可以通过 IAM 策略进行控制。然而,在大规模环境下,不同团队使用并采用 PrivateLink 进行进出连接,VPC 端点策略的创建和管理数量也在增加。随着客户环境的扩大,客户希望能够集中管理 PrivateLink资源以满足规章要求。以下为客户希望实际实施的控制措施:
预防性控制
用例 1:
允许创建 VPC 端点,只允许访问启用了 PrivateLink 的 AWS 服务。允许创建 VPC 端点,只允许发起连接到已批准的启用 PrivateLink 的第三方服务。允许创建 VPC 端点,只允许发起连接到由同组织账户拥有的内部业务服务。用例 2:
仅允许云管理员角色附加权限以连接端点服务,从而防止外部客户端连接内部 VPC 端点服务。侦测性控制
用例 3:
飞鱼 加速器侦测是否有来自不属于客户组织的 AWS 账户连接到暴露的 PrivateLink 服务。用例 4:
侦测是否有来自外部 AWS 账户 (不属于客户组织) 的连接访问客户 AWS 账户内部使用的 PrivateLink 服务。本文展示了一种利用服务控制策略SCP、AWS CloudTrail 和 AWS Config 实现治理的方法。当解决方案在您的账户中部署时,图 2 显示了架构中创建的各个组件。
现在架构中包含以下内容:
SCPs为 PrivateLink 连接提供了预防性控制。Amazon EventBridge 规则,针对在指定 OU 的特定账户中通过 CloudTrail 捕获的 API 调用事件进行触发。成员账户中的 EventBridge 规则将事件发送到审计账户的事件总线,同时在审计账户中设置一个中央 EventBridge 规则,以对与 PrivateLink 相关的 API 调用触发一个 AWS Lambda 函数。一个 Lambda 函数接收事件并验证 VPC 端点 API 调用是否被允许访问 PrivateLink 服务,并在政策被违反时通知云管理员。一条 AWS Config 规则检查 AWS 账户中创建的 PrivateLink 启用的 VPC 端点服务是否启用了自动接受客户端连接并禁用了通知。用例和解决方案方法
本节将逐个介绍每个用例,以及如何使用解决方案组件来应对这些用例。
预防性控制
用例 1:允许仅连接到 AWS 服务和已批准的内部及第三方 PrivateLink 服务的 VPC 端点连接。
此解决方案允许仅为已批准的合作伙伴 PrivateLink 服务、组织内部 PrivateLink 服务以及 AWS 服务创建 VPC 端点。可以通过使用 SCP 实现此功能,并且可以在单独账户或 OU 上强制执行。在解决方案部署期间,可以指定已批准的合作伙伴服务以及可以托管允许的 PrivateLink 服务的内部账户。客户环境中的应用团队随后可以创建与已批准合作伙伴或 AWS 服务的 PrivateLink 服务连接。然而,他们将无法创建与未批准 PrivateLink 服务的连接。
这在图 3 中得到了体现。
以下是允许此预防性控制的 SCP 示例代码片段。在此示例中,AllowPrivateLinkPartnerServiceServiceName 指代允许的合作伙伴 PrivateLink 服务名称。此外,该 SCP 还允许创建与 AllowedPrivateLinkAccount 中托管的内部 PrivateLink 服务的 VPC 端点。确保该 SCP 不干扰您在组织中创建的其他策略。该解决方案目前使用 ec2VpceServiceName and ec2VpceServiceOwner 条件来识别 AWS 服务或第三方合作伙伴的 PrivateLink 服务。这些条件可以在 SCP 中用于控制 VPC 端点的创建:
json{ Version 20121017 Statement [ { Condition { StringNotEquals { ec2VpceServiceName [ AllowedPrivateLinkPartnerServiceServiceName ] ec2VpceServiceOwner [ AllowedPrivateLinkAccount amazon ] } } Action [ ec2CreateVpcEndpoint ] Resource arnawsec2vpcendpoint/ Effect Deny Sid SCPDenyPrivateLink } ]}
用例 2:仅允许云管理员角色附加权限以连接到端点服务。
该解决方案确保客户 AWS 账户中拥有和创建的 PrivateLink 服务只能在云管理员角色允许的情况下连接。云管理员可以确保只能允许合法的内部 AWS 账户访问该服务,并限制外部客户的访问。这通过使用服务控制策略来实现,该策略将限制对 PrivateLink 端点服务权限的修改。这确保个别团队无法使用 Allow principals 配置直接为其他实体打开访问,只有具有相应权限的云管理员角色才能进行更改。
json{ Version 20121017 Statement [ { Sid Statement1 Effect Deny Action [ ec2ModifyVpcEndpointServicePermissions ] Resource [ ] Condition { StringNotEquals { awsPrincipalArn [ arnawsiamrole/CloudNetworkAdmin ] } } } ]}
这样的政策将有助于实现访问控制,如图 4 所示。云管理员使用业务服务的 PrivateLink 服务的 Allow principals 配置为应用账户 1 提供访问权限。该 SCP 仅允许云管理员进行修改,阻止团队中的其他成员绕过该流程,从而添加未获得批准的客户应用账户访问内部 PrivateLink 服务。
侦测性控制
针对侦测性控制,我们讨论两个由解决方案部署的用例,并可以根据要执行的测试启用或禁用它们。
用例 3:探测是否有外部 AWS 账户 (不属于客户组织) 连接到客户 AWS 账户所暴露的 PrivateLink 服务。
在此用例中,客户希望检测是否有来自其组织外部的账户访问其业务服务。解决方案利用各个成员账户的 CloudTrail 来捕获 API 调用事件,并跨账户集成 EventBridge。来自成员账户的 CloudTrail 事件捕获在 API 调用事件 AcceptVPCConnectionEndpoint 中接受 PrivateLink 服务连接的事件,并将其发送至审计账户的事件总线。该事件触发 Lambda 函数,捕获请求连接的实体信息以及 PrivateLink 服务的详细信息,并发送通知给云管理员。
自定义 AWS Config 规则这一侦测性控制机制适用于那些配置为手动接受客户端连接的 PrivateLink 服务。如果端点配置为自动接受连接,则 CloudTrail 在接受连接时不会生成事件。AWS PrivateLink 允许客户配置 连接通知 以将连接通知事件发送到 Amazon Simple Notification Service (Amazon SNS) 主题。云管理员可以订阅 SNS 主题以接收通知。然而,如果成员账户移除通知配置,云管理员将无法可视化新的连接,从而无法有效地实施治理要求。
为了解决这个问题,解决方案使用 AWS Config 规则来检测是否 PrivateLink 服务的创建启用了 Auto Accept Connections 设置或没有连接通知配置,并将其标记为不合规。
如图 6 所示。

一旦业务服务团队创建了 PrivateLink 服务,审计账户中的 AWS Config 组织规则将会检测到该事件,并由自定义 Lambda 函数检查是否存在连接通知配置。如果没有,则 AWS Config 规则会将该资源标记为不合规。云管理员可以在 AWS Config 仪表板中查看这些信息,或者通过 AWS Config 配置的通知接收通知。
用例 4:侦测是否有来自不属于客户组织的 AWS 账户连接到 PrivateLink 服务。
同样采用用例 3 中展示的方法,可以通过 CloudTrail 的 API 调用事件 CreateVPCEndpoint 检测连接到客户组织之外的 AWS 账户所暴露的 PrivateLink 服务。该事件被发送到集中事件总线,Lambda 函数根据指定条件进行检查,并向云管理员提供通知。
部署和测试解决方案
本节将逐步指引您如何部署和测试推荐的解决方案。
前提条件
在部署解决方案之前,请首先遵循以下步骤。
在您的 AWS Organizations 多账户环境中,前往管理账户并 为 AWS CloudFormation 启用可信访问, 为 AWS Config 启用可信访问,并 为 CloudTrail 启用可信访问。确定一个账户作为审计账户,并将其设置为 CloudFormation、AWS Config 和 CloudTrail 的委托管理员。执行此步骤的步骤如下:注册 CloudFormation 的委托管理员。按照 此帖 中提到的步骤注册 AWS Config 的委托管理员。注册 CloudTrail 的委托管理员。该解决方案使用 CloudFormation StackSets 的自我管理权限在审计账户中设置资源。为此,您需要在管理账户中创建 AWSCloudFormationStackSetAdministrationRole,并在审计账户中创建 AWSCloudFormationStackSetExecutionRole,使用 授予自我管理权限 主题中的步骤。在您多账户环境中不同的 AWS 账户中,创建两个 PrivateLink VPC 端点服务,按照文档中解释的方式。您可以使用 此模板 来创建测试 PrivateLink VPC 端点服务。这将作为两个合作伙伴服务,其中一个获得批准,另一个则是未获得信任并不被允许的服务。记录下它们的服务名称。部署解决方案
前往您的 AWS Organizations 多账户环境的管理账户,并使用 此 CloudFormation 模板 部署解决方案,或者点击以下发布堆栈按钮:CloudFormation 堆栈可以使用 AWS CloudFormation 控制台 或使用 AWS CLI 部署。
这将最初显示 创建堆栈 页面。保留默认输入的详细信息,然后选择 下一步。在 指定堆