使用 亚马逊云科技 PrivateLink 设置对亚马逊 Bedrock 的私密访问权限

Amazon Bedrock 是 亚马逊云科技 提供的一项完全托管的服务,它为开发人员提供了对 基础模型 (FM) 的访问权限以及针对特定应用程序对其进行自定义的工具。它允许开发人员通过 API 使用 FM 构建和扩展生成式 AI 应用程序,而无需管理基础设施。你可以从亚马逊和领先的人工智能初创公司(例如AI21实验室、Anthropic、Cohere和Stability AI)中选择最适合你的用例的模型。借助 Amazon Bedrock 无服务器体验,您可以快速入门,轻松试用 FM,使用自己的数据对其进行私密自定义,并使用 亚马逊云科技 工具和功能将它们无缝集成并部署到您的应用程序中。

客户正在使用自己的专有数据使用亚马逊 Bedrock API 构建创新的生成式 AI 应用程序。在访问 Amazon Bedrock API 时,客户正在寻找一种在不将数据暴露给互联网的情况下设置数据边界的机制,这样他们才能缓解互联网暴露带来的潜在威胁载体。由 亚马逊云科技 PrivateL ink 提供支持的 Amazon Bedrock VPC 终端节点允许您在账户中的 VPC 和 Amazon Bedrock 服务账户之间建立私有连接。它使 VPC 实例无需公有 IP 地址即可与服务资源通信。

在这篇文章中,我们将演示如何在您的 亚马逊云科技 账户上设置私有访问权限,以便通过 由 PrivateLink 提供支持的 VPC 终端节点 访问 Amazon Bedrock API,从而帮助您使用自己的数据安全地构建生成式 AI 应用程序。

解决方案概述

您可以使用生成式 AI 开发各种应用程序,例如文本摘要、内容审核和其他功能。在使用 FM 或基本模型构建此类生成式 AI 应用程序时,客户希望在不通过公共互联网或基于其企业数据库中可能存在的专有数据的情况下生成响应。

在下图中,我们描述了一种架构,用于设置您的基础设施,以读取驻留在 亚马逊关系数据库服务 (Amazon RDS) 中的专有数据,并在回答来自生成式 AI 应用程序的产品相关查询时,使用产品信息扩大 Amazon Bedrock API 请求。尽管我们在此图中使用 Amazon RDS 来进行说明,但您可以使用本文中提供的说明端到端地测试 Amazon Bedrock API 的私有访问权限。

工作流程步骤如下:

  1. 在您的私有 VPC 子网中运行的 亚马逊云科技 Lambda 会收到来自生成式 AI 应用程序的提示请求。
  2. Lambda 调用专有 RDS 数据库并增强了提示查询上下文(例如,添加产品信息),并通过增强查询请求调用 Amazon Bedrock API。
  3. API 调用将路由到与具有 Amazon Bedrock API 权限的 VPC 终端节点策略关联的亚马逊 Bedrock VPC 终端节点。
  4. 亚马逊 Bedrock 服务 API 端点通过 PrivateLink 接收 API 请求,无需遍历公共互联网。
  5. 您可以将 Amazon Bedrock VPC 终端节点策略更改为拒绝权限,以验证亚马逊 Bedrock API 调用是否被拒绝。
  6. 您还可以通过 亚马逊云科技 Direct Con nect 网 关从公司网络通过 VPC 终端节点私下访问 Amazon Bedroc k API。

先决条件

在开始之前,请确保满足以下先决条件:

  • 一个 亚马逊云科技 账户
  • 一个 亚马逊云科技 身份和访问管理 (IAM) 联合角色有权执行以下操作:
    • 创建、编辑、查看和删除 VPC 网络资源 创建、编辑、查看和删除
    • Lambda 函数创 建、编辑、查看和删除
    • IAM 角色和策略 列出基础模型并
    • 调用 Amazon Bedrock 基础模型
  • 在这篇文章中,我们使用 us-east-1 区域
  • 通过亚马逊 Bedrock 控制台申请 基础模型访问权限

设置私有访问基础架构

在本节中,我们使用 亚马逊云科技 CloudFormation 模板设置 VPC、私有子网、安全组和 Lambda 函数等基础设施。

使用以下 模板 在您的 AWS 账户中创建基础设施堆栈 Bedrock-Genai-St ack。

CloudFormation 模板代表您创建以下资源:

  • 在不同的可用区中具有两个私有子网的 VPC
  • 安全组和路由表
  • 供 Lambda、Amazon Bedrock 和亚马逊 弹性计算云 (亚马 逊 EC2)使用的 IAM 角色和策略

为 Amazon Bedrock 设置 VPC 终端节点

在本节中,我们使用 亚马逊虚拟私有云 (亚马逊 VPC) 为 Amazon Bedrock 设置 VPC 终端节点,以促进从您的 VPC 到亚马逊 Bedrock 的私有连接。

  1. 在 Amazon VPC 控制台的导航窗格 中的 虚拟私有云 下,选择 终端节点
  2. 选择 创建端点
  3. 名称标签 中 ,输入 b edrock-vpce
  4. 在 “ 服务 ” 下 ,搜索基本运行时并选择 com.amazonaws。 .bedrock -runtime。
  5. 对于 VPC ,请指定 您在上一节中通过 CloudFormation 堆栈创建的 VPC bedrock-Genai-Project- VPC。
  6. 子网 部分中,选择可用区域并从下拉菜单中选择相应的子网 ID。
  7. 对于 安全组 ,选择组名为 B edrock-Genai-stack-vpendpointSecurityGroup 以及描述为 “允许 VPC 终端节点使用 TL S” 的安全组。

安全组充当您的实例的虚拟防火墙,用于控制入站和出站流量。请注意,此 VPC 终端节点安全组仅允许来自连接到您的 VPC 私有子网的安全组的流量,从而增加了一层保护。

  1. 选择 创建端点
  2. 策略 部分中,选择 自定义 并输入以下最低权限策略,以确保仅允许对指定的基础模型资源 arn : aws: bedrock: *: foundation-model/anthropic.claude-instant- v1 对给定委托人(例如 Lambda 函数 IAM 角色)执行某些操作。
    
    {“版本”:“2012-10-17”,“声明”:[{“行动”:[“bedrock: invokeModel”],“资源”:[“arn: aws: bedrock: *: foundation-model/anthropic.claude-instant-v1],“效果”:“允许”,“校长”:“arn: aws: iam::: role/Genaistack-bedrock”}}]} 
     
    

在创建接口端点并将状态更改为 “可用” 之前,最多可能需要 2 分钟。您可以刷新页面以查看最新状态。

通过私有 VPC 子网设置 Lambda 函数

完成以下步骤来配置 Lambda 函数:

  1. 在 Lambda 控制台上, 在导航 窗格中选择函数
  2. 选择函数 gen-ai-Lambda-Stack-bedrocktestlambdaFunction-xxxxxxxxxxxx
  3. 在 “ 配置 ” 选项卡上,在左侧窗格 中选择 “ 权限 ”。
  4. 执行角色 下 ,选择 gen-ai-Lambda-Stack-bedrocktestLambdaFunctionrole- xxxxxxxxxxxxxx 的链接。

您将被重定向到 IAM 控制台。

  1. 权限策略 部分中,选择 添加权限 , 然后选择 创建内联策略
  2. JSON 选项卡上,按如下方式修改策略:
    
    {“版本”:“2012-10-17”,“声明”:[{“Sid”:“eniperms”,“效果”:“允许”,“操作”:[“ec2: CreateNetworkInterface”,“ec2: DeleteNetworkPoint*”],“资源”: “
    *”}]}
  3. 选择 “ 下一步 ” 。
  4. 策略名称 中 ,输入 eniv pce-policy。
  5. 选择 创建策略
  6. 添加以下内联策略(提供您的源 VPC 终端节点),以限制 Lambda 仅通过 VPC 终端节点访问亚马逊 Bedrock API:
    
    {“ID”:“lambda-bedrock-sourcevpce-仅限访问”,“版本”:“2012-10-17”,“声明”:[“Bedrock: ListFoundationModel”,“bedrock: listFoundationModel”,“bedrock: InvokeModel”],“资源”:“*”,“条件”:{“foranyValue: stringEquals”:{“aws: SourceVpce”: [“vpce-”]
    }}}
  7. 在 Lambda 函数页面的 配置 选项卡上,选择左侧窗格 中的 VPC ,然后选择 编辑。
  8. 对于 VPC ,选择 b edrock -Genai-project-VPC
  9. 对于 子网 ,选择私有子网。
  10. 对于 安全组 ,选择 gen-AI-Lambda-Stack-Securitygroup- (私有子网中 Amazon Bedrock 工作负载的安全组)。
  11. 选择 “ 保存”

测试私有访问控制

现在,您可以测试私有访问控制(通过 VPC 终端节点的 Amazon Bedrock API)。

  1. 在 Lambda 控制台上, 在导航 窗格中选择函数
  2. 选择函数 gen-ai-Lambda-Stack-bedrocktestlambdaFunction-xxxxxxxxxxxx
  3. 在 “ 代码 ” 选项卡上,选择 “ 测试 ” 。

您应该看到来自亚马逊 Bedrock API 调用的以下响应(状态:成功)。

  1. 要拒绝通过 VPC 终端节点访问亚马逊 Bedrock API,请导航到亚马逊 VPC 控制台。
  2. 在导航窗格的 虚拟私有云 下,选择 终端节点
  3. 选择您的策略并导航到 策略选项卡

目前,VPC 终端节点策略设置为 允许

  1. 要拒绝访问,请选择 编辑策略
  2. 允许 更改为 拒绝 ,然后选择 保存

VPC 终端节点的策略最多可能需要 2 分钟才能更新。

{
	"Version": "2012-10-17",
	"Statement": [
		{
		    "Action": [
		        "bedrock:InvokeModel"
		        ],
		    "Resource": [
		        "arn:aws:bedrock:*::foundation-model/anthropic.claude-instant-v1"
		        ],
		    "Effect": "Deny",
		    "Principal": {
                "AWS": "arn:aws:iam::<accountid>:role/GenAIStack-Bedrock"
            }
		}
	]
}
  1. 返回 Lambda 函数页面,然后在 代码 选项卡上选择 测试。

如以下屏幕截图所示,通过 VPC 终端节点向 Amazon Bedrock 发出的访问请求被拒绝(状态:失败)。

通过此测试过程,我们演示了从您的 VPC 到 Amazon Bedrock API 终端节点的流量是如何通过 PrivateLink 连接而不是通过互联网连接进行遍历的。

清理

请按照以下步骤操作,以避免将来产生费用:

  1. 清理 VPC 终端节点
  2. 清理 VPC
  3. 删除 CloudFormation 堆栈

结论

在这篇文章中,我们演示了如何使用由 PrivateLink 提供支持的接口 VPC 终端节点在部署在客户 VPC 上的生成式 AI 工作负载与 Amazon Bedrock 之间建立和运行私有连接。使用本文中讨论的架构时,您的客户 VPC 和 Amazon Bedrock 之间的流量不会离开亚马逊网络,从而确保您的数据不会暴露在公共互联网上,从而有助于满足您的合规要求。

下一步,在您的帐户中试用该解决方案并分享您的反馈。


作者简介

Ram Vittal 是 亚马逊云科技 的首席机器学习解决方案架构师。他在架构和构建分布式、混合和云应用程序方面拥有 30 多年的经验。他热衷于构建安全且可扩展的人工智能/机器学习和大数据解决方案,以帮助企业客户完成云采用和优化之旅,从而改善其业务成果。在业余时间,他骑摩托车和他 3 岁的 Sheepadoodle 一起散步!

Ray Khorsandi 是 亚马逊云科技 的人工智能/机器学习专家,通过人工智能/机器学习最佳实践为战略客户提供支持。他拥有电气工程和计算机科学的理学硕士和博士学位,领导企业构建安全、可扩展的人工智能/机器学习和大数据解决方案,以优化其云采用率。他的爱好包括计算机视觉、自然语言处理、生成式 AI 和 mLOP。Ray 喜欢踢足球,喜欢与家人共度美好时光。

迈克尔·丹尼尔斯 是 亚马逊云科技 的人工智能/机器学习专家。他的专长在于为复杂而具有挑战性的业务问题构建和领导人工智能/机器学习和生成人工智能解决方案,而他在德克萨斯大学获得的博士学位和佐治亚理工学院的机器学习计算机科学专业理学硕士学位进一步增强了这一点。他擅长应用尖端的云技术来创新、激励和改造行业领先的组织,同时还能与任何级别或规模的利益相关者进行有效的沟通。在业余时间,你可以看到迈克尔在山上滑雪或单板滑雪。


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