使用AWS PrivateLink设置对Amazon Bedrock的私有访问

如何通过AWS PrivateLink设置对Amazon Bedrock的私有访问

Amazon Bedrock是由AWS提供的全托管服务,为开发人员提供访问基础模型(FMs)和定制这些模型以满足特定应用需求的工具。它允许开发人员通过API构建和扩展使用FMs的生成式AI应用,无需管理基础架构。您可以从亚马逊和领先的AI初创企业(如AI21 Labs,Anthropic,Cohere和Stability AI)中选择各种FMs,以找到最适合您使用情况的模型。通过Amazon Bedrock无服务器体验,您可以快速入门,轻松尝试FMs,并使用AWS工具和功能将其私有化定制,并无缝集成和部署到您的应用程序中。

客户正在使用自有专有数据使用Amazon Bedrock API构建创新生成式AI应用。在访问Amazon Bedrock API时,客户正在寻找一种机制,用于在不将其数据暴露给互联网的情况下建立数据边界,以减轻来自互联网曝光的潜在威胁向量。由AWS PrivateLink提供支持的Amazon Bedrock VPC端点允许您在您的账户中的VPC和Amazon Bedrock服务账户之间建立私有连接。它使VPC实例能够在无需公共IP地址的情况下与服务资源通信。

在本文中,我们将演示如何在您的AWS账户上设置私有访问权限,使用由PrivateLink提供支持的VPC端点访问Amazon Bedrock API,以帮助您安全地使用自己的数据构建生成式AI应用。

解决方案概述

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

在下图中,我们描述了一种架构,用于设置基础设施,以从您的生成式AI应用中的查询请求中读取驻留在Amazon Relational Database Service(Amazon RDS)中的专有数据,并在回答与产品相关的查询时,通过向Amazon Bedrock API请求添加产品信息来增强查询上下文。尽管我们在此图中使用Amazon RDS仅用于示例目的,但您可以使用本文中提供的说明测试通过PrivateLink的Amazon Bedrock API的私有访问权限。

工作流步骤如下:

  1. 运行在您的私有VPC子网中的AWS Lambda接收来自生成式AI应用的提示请求。
  2. Lambda调用专有RDS数据库并增强提示查询上下文(例如,添加产品信息),并调用带有增强查询请求的Amazon Bedrock API。
  3. API调用被路由到与VPC端点策略关联的Amazon Bedrock VPC端点,该端点具有允许对Amazon Bedrock API的许可。
  4. Amazon Bedrock服务API端点通过PrivateLink接收API请求,无需通过公共互联网。
  5. 您可以更改Amazon Bedrock VPC端点策略以拒绝许可,以验证对Amazon Bedrock API的调用被拒绝。
  6. 您还可以通过AWS Direct Connect网关从您的企业网络私有访问VPC端点上的Amazon Bedrock API。

先决条件

在开始之前,请确保您具备以下先决条件:

  • AWS账户
  • 具有以下访问权限的AWS Identity and Access Management(IAM)联合角色:
    • 创建、编辑、查看和删除VPC网络资源
    • 创建、编辑、查看和删除Lambda函数
    • 创建、编辑、查看和删除IAM角色和策略
    • 列出基础模型并调用Amazon Bedrock基础模型
  • 对于本文,我们使用us-east-1区域
  • 通过Amazon Bedrock控制台请求基础模型访问权限

设置私有访问基础设施

在本节中,我们使用AWS CloudFormation模板设置基础设施,例如VPC、私有子网、安全组和Lambda函数。

使用以下模板在您的AWS账户中创建基础设施堆栈Bedrock-GenAI-Stack

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

  • 具有两个私有子网的VPC,位于不同的可用区
  • 安全组和路由表
  • 用于Lambda、Amazon Bedrock和Amazon Elastic Compute Cloud(Amazon EC2)的IAM角色和策略

设置Amazon Bedrock的VPC端点

在本节中,我们使用Amazon Virtual Private Cloud(Amazon VPC)设置Amazon Bedrock的VPC端点,以便在您的VPC和Amazon Bedrock之间实现私有连接。

  1. 在Amazon VPC控制台中,在导航窗格中选择“虚拟私有云”下的“端点”。
  2. 选择“创建端点”。
  3. 对于“名称标记”,输入bedrock-vpce
  4. 在“服务”下搜索bedrock-runtime并选择com.amazonaws.<region>.bedrock-runtime
  5. 对于“VPC”,指定您通过前一节CloudFormation堆栈创建的VPCBedrock-GenAI-Project-vpc
  6. 在“子网”部分,选择可用区并从下拉菜单中选择相应的子网ID。
  7. 对于“安全组”,选择组名称为Bedrock-GenAI-Stack-VPCEndpointSecurityGroup-且描述为Allow TLS for VPC Endpoint的安全组。

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

  1. 选择“创建端点”。

  2. 在“策略”部分,选择“自定义”并输入以下最小权限策略,以确保只允许对指定的基础模型资源arn:aws:bedrock:*::foundation-model/anthropic.claude-instant-v1执行特定操作(例如Lambda函数IAM角色)。

    {   "Version": "2012-10-17",    "Statement": [      {           "Action": [             "bedrock:InvokeModel"               ],          "Resource": [               "arn:aws:bedrock:*::foundation-model/anthropic.claude-instant-v1"               ],          "Effect": "Allow",          "Principal": {                "AWS": "arn:aws:iam::<accountid>:role/GenAIStack-Bedrock"            }      }   ]}

可能需要多达2分钟,直到接口端点创建完成并状态更改为“可用”。您可以刷新页面以查看最新状态。

在私有VPC子网上设置Lambda函数

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

  1. 在Lambda控制台中,导航到函数
  2. 选择函数 gen-ai-lambda-stack-BedrockTestLambdaFunction-XXXXXXXXXXXX
  3. 配置选项卡中,选择左侧的权限
  4. 执行角色下,选择角色 gen-ai-lambda-stack-BedrockTestLambdaFunctionRole-XXXXXXXXXXXX 的链接。

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

  1. 权限策略部分,选择添加权限并选择创建内联策略

  2. JSON选项卡上,按以下方式修改策略:

    {    "Version": "2012-10-17",    "Statement": [        {            "Sid": "eniperms",            "Effect": "Allow",            "Action": [                "ec2:CreateNetworkInterface",                "ec2:DescribeNetworkInterfaces",                "ec2:DeleteNetworkInterface",                "ec2:*VpcEndpoint*"            ],            "Resource": "*"        }    ]}
  3. 选择下一步

  4. 对于策略名称,输入 enivpce-policy

  5. 选择创建策略

  6. 添加以下内联策略(提供您的源VPC端点),以限制Lambda仅通过VPC端点访问Amazon Bedrock API:

    {    "Id": "lambda-bedrock-sourcevpce-access-only",    "Version": "2012-10-17",    "Statement": [        {            "Effect": "Allow",            "Action": [        "bedrock:ListFoundationModels",                "bedrock:InvokeModel"            ],            "Resource": "*",            "Condition": {                "ForAnyValue:StringEquals": {                    "aws:sourceVpce": [                        "vpce-<bedrock-runtime-vpce>"                    ]                }            }        }    ]} 
  7. 在Lambda函数页面上,在配置选项卡中,选择左侧的VPC,然后选择编辑

  8. 对于VPC,选择 Bedrock-GenAI-Project-vpc

  9. 对于子网,选择私有子网。

  10. 对于安全组,选择 gen-ai-lambda-stack-SecurityGroup-(Amazon Bedrock工作负载在私有子网中的安全组)。

  11. 选择保存

测试私有访问控制

您现在可以测试私有访问控制(通过VPC端点的亚马逊基岩API)。

  1. 在Lambda控制台中,选择导航窗格中的函数
  2. 选择函数gen-ai-lambda-stack-BedrockTestLambdaFunction-XXXXXXXXXXXX
  3. 代码选项卡上,选择测试

您应该能够从亚马逊基岩API调用中看到以下响应(状态:成功)。

  1. 若要拒绝对亚马逊基岩API的VPC端点访问,请转到亚马逊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端点的访问请求被拒绝(状态:失败)。

通过此测试过程,我们演示了来自您的VPC到亚马逊基岩API端点的流量是经过PrivateLink连接而不是通过互联网连接的。

清理

按照以下步骤避免产生未来费用:

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

总结

在本文中,我们演示了如何设置和配置一个私有连接,将部署在您的客户VPC上的生成式AI工作负载与亚马逊基岩连接起来,使用由PrivateLink提供支持的接口VPC端点。当使用本文讨论的架构时,您的客户VPC与亚马逊基岩之间的流量将不会离开亚马逊网络,确保您的数据不会暴露在公共互联网上,并有助于满足您的合规要求。

作为下一步,您可以在您的账户中尝试该解决方案并分享您的反馈。