高盛如何利用亚马逊 S3 的 亚马逊云科技 PrivateLink

作为一家跨国投资银行和金融服务公司, 高盛(GS) 大规模 存储各种数据集,这些数据集必须始终可访问,同时保持安全并符合法规和要求。作为其流程的一部分,高盛利用 亚马逊虚拟私有云 (VPC) 为在 亚马逊云科技 中部署资源提供安全的环境,并与其服务建立安全连接。作为托管多 PB 业务数据的关键存储服务,对 亚马逊简单存储服务 (S3) 的访问既安全又 具有高性能至关重要。

如今,高盛拥有并运营着数千个用于生产和非生产工作负载和部署的账户。全公司的核心工程团队负责根据最佳实践和可重复使用的模式实现云的采用。为了提供对 亚马逊云科技 服务的安全访问,高盛将 VPC 终端节点用于混合和云原生(基于 VPC)的工作负载。具有来自本地环境的流量的混合工作负载通常通过 PrivateLink 与云原生服务进行交互。这份 2020年的re: Invent演讲 展示了一些例子,说明高盛如何大规模使用PrivateLink来做到这一点。

在这篇博客中,我们将介绍高盛的S3 VPC端点采用过程和架构演变,概述每种方法的优缺点,并分享大规模成功的关键经验。我们从基于 2015 年 推出的基 于 S3 的 网关 VPC 终端节点 的架构开始 ,该架构允许从直接托管在 相关 VPC 中的资源进行私有访问(不需要互联网或 NAT 网关)。接下来,我们将介绍基于 2019 年 推出的基于 S3 接口 VPC 终端节点(亚马逊云科技 PrivateLink )的架构 , 该架构允许从关联的 VPC 内部进行私有访问,也可以从远程系统(例如通过 Direct Connect 连接的本地服务器)进行私有访问。最后,我们对不同方法进行了简短的性能比较,并就您可能需要考虑在哪些方面采用 PrivateLink for S3 提出了一些建议。

高盛访问亚马逊 S3 的演变

在本节中,我们将带您了解高盛的S3混合连接解决方案之旅。我们将从最初的 亚马逊弹性计算云 (EC2) 代理队列、 随后的亚马逊弹性容器服务 ( ECS) 代理队列以及最新的 Priv at eLink for S3 解决方案开始。

最初的方法和挑战:亚马逊弹性计算云 (EC2) 代理队列

在PrivateLink功能推出之前,高盛通过亚马逊云科技 Direct Connect混合访问亚马逊S3的第一个版本是使用S3的网关终端节点部署的。由于网关 VPC 终端节点只能从 VPC 托管实体访问,因此发往 S3 的混合请求必须通过代理路由。高盛最初使用运行 “Squid” HTTP 代理软件的 EC2 实例队列来实现这一目标,这些实例由核心工程团队管理,并托管在 Direct Connect 连接的 VPC 中。

Figure 1: Amazon EC2 proxy fleet solution

图 1:亚马逊 EC2 代理队列解决方案

图 1 对齐 :

  1. 来自本地系统的流量通过公司范围的 Direct Connect 连接进行路由。
  2. 到核心基础设施拥有的 VPC。
  3. 它托管了一组核心基础设施托管的 EC2 实例,这些实例在运行 Squid 代理软件的 Auto Scaling 组中运行。
  4. 这些代理通过网关 VPC 终端节点开始连接。
  5. 转到可能由核心账户或业务线账户拥有的 S3 存储桶。

为了对 S3 等云原生终端节点实施控制,高盛使用 VPC 端点策略根据服务所需的访问权限限制特定使用者( 亚马逊云科技 身份和访问管理 (IAM) A ccess M anagement 委托人)的访问。最初,所有混合工作流程都使用通用端点,使用单一策略限制对高盛校长和 S3 存储桶的访问。

这种方法有一些缺点,导致了大规模的运行问题:

  • 可用性和性能降低: 它需要一组专门用于将请求路由到 Amazon S3 的代理。该代理机群面临不可预测的工作量激增,无法及时扩展,其管理层为核心工程团队带来了运营开销。路径中的其他组件有效地降低了混合用户与 S3 连接的总体可用性。在某些情况下,在计算场上运行的作业会耗尽代理队列的资源,从而显著增加所有用户观察到的服务延迟。
  • 复杂性增加: 为了减少这些情况,鼓励具有高带宽要求的团队管理自己的代理部署,从而缩小了爆炸半径,但增加了业务部门的成本和复杂性。
  • 可扩展性挑战: 高盛在2018年只有少数几个亚马逊云科技账户。到2021年1月,这一数字已显著增长并持续增长。随着 VPC 终端节点策略中允许的账户列表越来越大,高盛达到了 20 KB 的 VPC 端点策略字符限制。尽管在许多情况下 可以使用 aws: principalOrgid IAM 密钥 来简化这一点,但有时还是需要保护特定账户对特定存储桶/终端节点的访问权限。GS 最初成功地调整了 S3 存储桶策略并处理了跨团队存储桶许可名单管理难题,但最终确定这种方法在所需的规模下根本无法管理。

下一次迭代和挑战:亚马逊弹性容器服务 (ECS) 代理舰队

如下图所示,该架构的下一次迭代解决了其中一些难题:

Figure 2: Amazon ECS proxy fleet solution

图 2:亚马逊 ECS 代理队列解决方案

图 2 对齐 :

  1. 来自本地系统的流量将通过相同的公司范围内的 Direct Connect 连接进行路由。
  2. 在核心基础设施拥有的亚马逊 S3 代理 VPC 中。
  3. 它托管网络负载均衡器 (NLB),为本地连接提供静态 IP。
  4. 此 NLB 将流量分配到在 Auto Scaling 组中运行的核心托管 ECS 代理任务。
  5. 这些代理通过网关 VPC 终端节点开始连接。
  6. 转至可能由核心账户或业务线账户拥有的 S3 存储桶。

这种方法通过在不同的 GS 可路由的 S3 代理 VPC 中部署多个 ECS,极大地帮助提高了可用性、可扩展性并避开 20 KB 的策略限制。但是,这仍然需要部署和运行多个客户管理的代理平台,每个平台仍然单独受到 20 KB 策略限制以及每个 NLB 目标每分钟 55,000 个连接的限制。

最新发展:取消托管代理解决方案

随着2021年2月宣布推出 适用于 Amaz on S3的亚马逊云科技 PrivateLink ,该架构得到了显著简化,以充分利用这一最新产品。

Figure 3: AWS PrivateLink for Amazon S3 solution

图 3:适用于 Amazon S3 的 亚马逊云科技 PrivateLink 解决方案

图 3 对齐 :

  1. 来自本地系统的流量将通过相同的公司范围内的 Direct Connect 连接进行路由。
  2. 到核心基础设施拥有的 S3 终端节点 VPC。
  3. 此 VPC 托管 S3 接口 VPC 端点 PrivateLink
  4. 它提供对可能由核心或业务线账户拥有的 S3 存储桶的直接访问权限。

此更新带来了以下好处:

  • 提高运营效率 :无需管理混合用例的代理队列即可连接到云原生服务,从而为核心工程团队带来巨大好处。
  • 缩小爆炸半径: 每个业务部门 (BU) 或业务线 (LoB) 都有专用于生产工作负载的 Amazon S3 连接,共享的通用终端节点用于具有成本效益的开发和测试目的。专用端点减少了 BU 串扰(“吵闹的邻居” 场景)的潜在影响,同时为总线的运行提供了简单、清晰的界限。这对于拥有大量账户的 LOB 以及吞吐量高且不可预测的用例特别有用,这会导致争用,并有可能在公共端点上淹没其他 LOB。
  • 安全防护措施的执行 : 可以在单个 VPC 中配置多个接口端点,每个端点都有独特的 VPC 端点策略。每个端点可以分配给单个业务线或用例,从而改善安全状况并遵守最低权限原则。

要深入了解上面的最后一点,最有效的方法是使用示例 VPC 终端节点策略 将其变为现实 。对于最受限制的用例,政策使用2020年发布的 s3:ResourceAccount指令,锁定对特定业务线负责人的访问权限,并限制对特定业务线账户的资源 访问权限。 从2022年起,对于更通用的或更广泛的用例,将aws: ResourceOrgID、 aws: ResourceorgPaths、aws: principalOrgid 和 aws: principalOrgPath s 条件密钥相结合,为VPC端点创建严格的组织边界,以可扩展 、灵活和易于管理的方式防止数据泄露。

以下是结合了这些可能性的极简主义端点策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get<List of Get S3 Permissions defined by enterprise or required by line of business / use case>",
        "s3:List<List of List S3 Permissions defined by enterprise or required by line of business / use case>",
        "s3:Put<List of Put S3 Permissions defined by enterprise or required by line of business / use case>",
        // Other S3 actions
      ],
      "Resource": "*",
      "Principal": "*", // A specific Principal or list of Principals can be provided for highly restricted use cases
      "Condition": {
// Note that some combination of the following conditions would be used, not necessarily all of them
// PrincipalOrgID is used to easily provide a boundary mandating the use of enterprise credentials
        "StringEquals": {
          "aws:PrincipalOrgID": ${Your enterprise Org IDs}
        },
// PrincipalOrgPaths is used to easily provide access to Principals within a specific line of business, in this example Machine Learning
        "ForAllValues:StringLike": {
          "aws:PrincipalOrgPaths": ["o-myorganizatio-1/*/ou-machinelearn/*"]
        },
// ResourceOrgID is used to easily provide a boundary only permitting access to enterprise owned S3 buckets
        "StringEquals": {
          "aws:ResourceOrgID": ${Your enterprise Org IDs}
        },
// ResourceOrgPaths is used to easily provide access to resources owned by a specific line of business
        "ForAllValues:StringLike": {
          "aws:ResourceOrgPaths": ["o-myorganization/r-org-path-1/*","o-myorganization-2/r-org-path-2/*"]
        },
// A specific ResourceAccount or list of ResourceAccounts can be provided for highly restricted use cases 
        "StringEquals": {
          "aws:ResourceAccount": ${Target resource account IDs}
        }
      }
    }
  ]
}

您可以使用类似的方法为第三方供应商服务(例如 Snowflake)创建精选端点。保持这些供应商流程的独立性有助于改善安全状况,支持专用租赁,并实现更有针对性的性能监控。

以下是针对第三方供应商服务用例的简约端点策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get<List of Get S3 Permissions required by the third party vendor>",
        "s3:List<List of List S3 Permissions required by the third party vendor>",
        "s3:Put<List of Put S3 Permissions required by the third party vendor>",
        // Other S3 actions
      ],
      "Resource": "*",
      "Principal": "*",
      "Condition": {
// PrincipalOrgPaths is used to easily provide access to Principals within a specific line of business, in this example Machine Learning
        "ForAllValues:StringLike": {
          "aws:PrincipalOrgPaths": ["o-myorganizatio-1/*/ou-machinelearn/*"]
        },
// Provider either ResourceAccount or ResourceOrgPaths based on the level of isolation provided and guaranteed by the vendor
        "ForAllValues:StringLike": {
          "aws:ResourceOrgPaths": ["o-vendororg-1/r-org-path-1/*"]
        },
        "StringEquals": {
          "aws:ResourceAccount": ${Target resource account IDs}
        }
      }
    }
  ]
}

上述策略与企业策略有何不同之处的关键要素如下:

  • 供应商通常为每个租户/客户提供一个专用的资源帐户,因此使用 s3: ResourceAccount 权限提供了一种合理的限制方法。在这种情况下,委托人可以是一组独特的预定义委托人,也可以根据业务需求将其限制为给定的组织路径。
  • 对于为每个租户提供多个专用资源帐户的供应商,可以列出多个帐户或将其替换为 ResourceOrgPath,以支持更动态的增长,前提是供应商使用合适的架构和隔离边界。GS 在加入 Snowflake 等大型供应商时会尝试使用这种方法。

请注意,上面概述的 VPC 终端节点策略是实现实施的示例,实际上,这些策略是与适当协调的 S3 存储桶策略 和 IAM 策略 一起部署的。如需更多详细信息和指导,我们建议您查看 亚马逊云科技 微型网站和相关白皮书上的 数据边界

这种演变如何帮助提高采用率?

在采用适用于S3的PrivateLink之前,由于Direct Connect、EC2/ECS和自我管理代理软件的可扩展性和运营方面的挑战,高盛与亚马逊云科技的连接向S3的平均流量为数百Mbps。在推出S3 PrivateLink后不久,由于易于采用、易用性、性能和稳定性的提高,其稳定状态升至12 Gbps的峰值,目前稳定状态约为5-6 Gbps。下图显示了 2020 年 12 月至 2022 年 2 月期间的网络吞吐量(出口和入口),2021 年 3 月初启用 PrivateLink 后,网络吞吐量明显增加。

Graph showing egress traffic to S3 increasing from 2020 to 2022

Graph showing ingress traffic from S3 increasing from 2020 to 2022

采用还支持不支持 HTTP 代理但可以通过亚马逊 S3 软件开发套件 (SDK) 集成使用亚马逊 S3 接口终端节点的应用程序,例如 TensorF low。

由于采用 PrivateLink for S3,高盛还成功地使批处理任务能够完成任务,包括繁重的读取和写入操作,这些任务以前让代理不堪重负。长期监控表明,与之前的基于代理的解决方案相比,通过 PrivateLink 调用应用程序编程接口 (API) 更高效、更稳定。在某些情况下,延迟时间也提高了近一半,在几乎所有请求类型中,us-east-1 的平均延迟时间为 10 毫秒,只有大型分段上传测试的运行速度略慢。

在哪里可以从使用适用于 Amazon S3 的 亚马逊云科技 PrivateLink 中获得最大价值?

高盛的核心工程团队通过便捷的部署和采用PrivateLink创造了更高的商业价值。好处包括改善安全状况、改善业务部门之间的工作负载隔离以及提高性能,同时减少与部署和管理代理队列相关的运营开销。

值得注意的是,这种模式对涉及混合工作负载的用例影响最大,其中 S3 数据的生产者或使用者位于本地。对于纯粹基于云的用例,例如工作负载位于私有 VPC 中,S3 网关 VPC 端点可能仍然是首选,因为它们在高吞吐量环境中成本较低。

PrivateLink for S3 的主要优势包括能够使用安全组来控制允许哪些流量/来源使用它们,以及更简单的 VPC 路由表。相反,网关 VPC 终端节点不收取数据传输费用。使用这两种方法,VPC 终端节点在提高安全性和简化对 S3 的访问控制方面具有显著优势。

结论

在这篇博客文章中,我们概述了高盛从使用基于 EC2 的代理的 Amazon S3 网关终端节点,到基于 ECS 的代理,再到基于 亚马逊云科技 PrivateLink 的 S3 接口端点的演变。

我们分享了关键优势,并概述了安全管理和大规模采用 S3 VPC 端点的解决方案。我们还概述了每种端点解决方案的最有利用例,例如用于大容量云端部署的网关端点和混合架构的接口端点。适用于 Amazon S3 的 PrivateLink 带来了业务优势,例如减少运营开销和提高可用性,以及提高第三方供应商集成的安全性等技术优势。这些优势使高盛能够以更高的灵活性进行创新,并促使S3的采用率持续提高。在撰写本文时,高盛已经通过PrivateLink为亚马逊S3传输了数十兆字节的数据。

要了解更多信息,请查看 亚马逊云科技 微型网站上的 数据边界 ,学习实施强大访问安全策略的基础知识和最佳实践。看看 A WS 安全博客:在 亚马逊云科技 上建立数据边界 。最后,深入阅读 亚马逊云科技 PrivateLink 上的 文档,让 Amaz on S3 立即 开始自己的旅程。

Sujoy Saha

Sujoy Saha

S ujoy Saha 是高盛云支持团队的副总裁。Sujoy 在云网络部署、自动化方面构建了高盛工程公司,并构建了确保公司与公共云之间连接的解决方案。工作之余,Sujoy 喜欢远足、摄影和旅行。

Gerrard Cowburn

Gerrard Cowburn

Gerrard Cowburn 是 亚马逊云科技 的一名解决方案架构师,总部设在英国。Gerrard 支持全球金融服务客户开展基于绿地和迁移的建筑深度挖掘和原型设计活动。在空闲时间,杰拉德喜欢通过食物和饮料、公路旅行和田径日来探索世界。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。