View a markdown version of this page

为您的网关设置出站授权 - 亚马逊基岩 AgentCore

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为您的网关设置出站授权

出站授权允许 Amazon Bedrock AgentCore 网关代表在入站授权期间经过身份验证和授权的用户安全地访问网关目标。

AgentCore 网关支持以下类型的出站授权:

  • 无授权(不推荐)-某些目标类型为您提供绕过出站授权的选项。不建议使用这种不太安全的选项。

  • IAM-based 出站授权 — 使用网关服务角色使用AWS 签名版本 4 (Sig V4) 验证对网关目标的访问权限。

  • 呼叫方 IAM 证书 — 网关使用调用者的 IAM 证书签署向目标发出的请求。网关使用联合访问服务 (FAS) 代表呼叫者扮演角色,并使用呼叫者的身份签署出站请求。当目标服务需要根据原始调用者的身份而不是网关服务角色进行授权时,这很有用。

  • OAuth — 允许客户端应用程序访问资源的开放授权框架。您可以将 OAuth 与内置身份提供商或自定义身份提供商一起使用。有关更多信息,请参阅 OAuth 2.0。您可以使用以下类型的 OAuth 授权授权:

    • 客户凭证授予 — Machine-to-machine 身份验证(也称为双边 OAuth)。客户端应用程序代表应用程序访问资源,而不是代表用户访问资源。

    • 授权码授予 — User-delegated 访问权限(也称为三段式 OAuth)。用户同意客户端应用程序代表用户访问资源。

    • 令牌交换授予 (On-behalf-of) — 网关将入站用户的访问令牌交换为针对下游资源的新的、范围内的访问令牌。交换的代币同时带有用户的身份和代理的身份,使下游服务能够在每一个跳跃时强制执行细粒度的授权,而不会触发额外的同意流程。有关更多信息,请参阅On-behalf-of 代币交换。

  • 令牌直通 -网关将入站授权令牌直接传递给目标,无需修改。目标服务负责验证令牌。这要求网关使用AUTHENTICATE_ONLY入站授权,以便验证令牌但保留以备转发。

  • API 密钥 — 使用该 AgentCore 服务生成 API 密钥以验证对网关目标的访问权限。

您可以设置的出站授权类型取决于您授权访问的网关目标类型:

Target type 没有授权 网关服务角色 来电者 IAM 证书 OAuth(客户端凭证) OAuth(授权码) OAuth(代币交换) 代币直通 API 密钥

API Gateway 阶段

支持

是

否

否

否

否

否

是

Lambda 函数

否

是

否

否

否

否

否

否

MCP 服务器

支持

是

否

是

是

是

否

是

OpenAPI 架构

支持

是

否

是

是

是

否

是

Smithy 架构

否

是

否

是

否

否

否

否

AgentCore 运行时间 (HTTP)

否

是

是

是

否

否

是

否

注意

如果您使用集成提供商模板作为目标,请在集成提供商作为目标的模板中查看不同Built-in 模板支持的授权类型。

在向网关添加目标之前,必须通过一种支持的方法为其设置授权。

注意

如果您计划使用 AWS 管理控制台或 AgentCore CLI 创建网关,则可以跳过此先决条件。如果您使用其中任何一种工具,则可以 AgentCore 自动为您创建一个具有访问目标所需的权限的服务角色。每次添加目标时,所需的权限将自动附加到您的服务角色。

选择一个主题以了解如何设置该类型的授权:

使用网关服务角色设置 IAM-based 出站授权

IAM-based 出站授权允许您使用网关服务角色的 IAM 凭证通过AWS 签名版本 4 (Sig V4) 进行授权。此选项允许 Amazon Bedrock AgentCore 服务代表您的网关调用者向网关目标进行身份验证。

如果您使用此选项,请验证网关服务角色是否具有bedrock-agentcore:InvokeGateway权限。网关在调用期间使用服务角色凭证进行身份验证。

MCP 服务器和 OpenAPI 目标的额外配置

当您对 MCP 服务器或 OpenAPI 目标使用 IAM-based 出站授权时,必须为 SigV4 签名提供额外的配置。在中credentialProviderConfigurations,包括iamCredentialProvider带有以下字段的:

  • 服务(必填)— 用于 SigV4 签名的 AWS 服务名称。例如,bedrock-agentcore对于托管在亚马逊 Bedro AgentCore ck 上的 MCP 服务器。

  • 区域(可选)— 用于 SigV4 签名的 AWS 区域。如果您未指定区域,则网关使用自己的区域。

对于 Lambda、API Gateway 和 Smithy 目标,请勿包含该iamCredentialProvider字段。这些目标类型仅支持基本GATEWAY_IAM_ROLE配置。credentialProviderType有关指定凭证提供者配置的更多信息,请参阅AgentCore 网关服务角色 (IAM) 授权。

IAM-based 出站授权的安全最佳实践

网关执行角色由所有配置的目标共享GATEWAY_IAM_ROLE。它的权限是任何授权呼叫者可以通过网关行使权限的上限。请遵循以下最佳做法来限制曝光量:

  • 将执行角色限定为最低权限 -仅授予所有已配置目标所需的权限。避免使用宽泛Resource符Action或通配符。

  • 针对不同的信任边界使用不同的网关 — 如果目标具有不同的敏感度级别或处理不同的工作负载,请将它们部署在具有不同执行角色的单独网关后面。

  • 使用策略引擎限制呼叫者访问权限 -在共享网关上,使用策略引擎控制哪些呼叫者可以调用哪些目标,从而限制任何单个呼叫者权限的爆炸半径。

使用 OAuth 客户端设置出站授权

要使用 OAuth 客户端设置出站授权,您可以使用 AgentCore 身份服务并指定在内置身份提供商(请参阅提供商设置和配置或自定义身份提供商)中创建客户端时收到的客户端凭证。

使用 OAuth 客户端设置出站授权

  1. 向支持的第三方提供商注册您的客户端应用程序。

  2. 您将收到客户端 ID、客户端密钥以及设置出站授权时可能引用的其他值。

  3. 根据您的要求执行以下步骤之一:

  4. 记下生成的凭证 ARN(credentialProviderArn在 API 中)和密钥管理器 AWS 密钥 ARN(secretArn在 API 中)。在创建网关目标时,您将使用这些值。

  5. (如果您使用自定义网关服务角色)将以下基于身份的策略附加到您的网关服务角色:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "GetWorkloadAccessToken", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetWorkloadAccessToken", ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:123456789012:workload-identity-directory/default", "arn:aws:bedrock-agentcore:us-east-1:123456789012:workload-identity-directory/default/workload-identity/GatewayName-*" ] }, { "Sid": "GetResourceOauth2Token", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetResourceOauth2Token", ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/TokenVaultId/oauth2credentialprovider/CredentialName" ] }, { "Sid": "GetSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", ], "Resource": [ "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretId" ] } ] }

    替换以下字段的值:

    • 在GetWorkloadAccessToken语句中,将Resource列表GatewayName中的替换为网关的名称。

    • 在GetResourceOauth2Token声明中,将Resource列表中的值替换为您刚生成的凭证的 ARN。

    • 在GetSecretValue语句中,将Resource列表中的值替换为生成凭据时响应中返回的 AWS 密钥的 ARN。

设置 OAuth 客户端授权的示例

以下示例向您展示如何通过 OAuth 客户端为网关目标设置授权:

例
AgentCore CLI
  1. AgentCore CLI 凭证命令必须在现有的 agentcore 项目中运行。如果您还没有,请先使用创建一个项目agentcore create。

    agentcore add credential \ --name oauth-credential-provider \ --type oauth \ --discovery-url <DiscoveryUrl> \ --client-id <ClientId> \ --client-secret <ClientSecret> agentcore deploy
AWS CLI
  1. aws bedrock-agentcore-control create-oauth2-credential-provider \ --name oauth-credential-provider \ --credential-provider-vendor CustomOAuth2 \ --oauth2-provider-config-input '{ "customOAuth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "<DiscoveryUrl>" }, "clientId": "<ClientId>", "clientSecret": "<ClientSecret>" } }'
Boto3
  1. import boto3 client = boto3.client("bedrock-agentcore-control") client.create_oauth2_credential_provider( name="oauth-credential-provider", credentialProviderVendor="CustomOAuth2", oauth2ProviderConfigInput={ "oauthDiscovery": { "discoveryUrl": "<DiscoveryUrl>" }, "clientId": "<ClientId>", "clientSecret": "<ClientSecret>" } )

使用 API 密钥设置出站授权

要使用 API 密钥设置出站授权,您需要使用 AgentCore 身份服务并指定从支持的身份提供商处收到的 API 密钥。

使用 OAuth 客户端设置出站授权

  1. 向支持的第三方提供商注册您的客户端应用程序。

  2. 为提供商的服务设置 API 密钥。记下以下值,您将在添加网关目标时指定这些值:

    • 凭证位置 -应将 API 密钥放在标题中还是作为查询参数放置。

    • 凭证前缀 — 凭证的前缀(例如持有人)。

  3. 根据您的要求执行以下步骤之一:

  4. 记下以下值,您将在添加网关目标时指定这些值:

    • 凭证提供商 ARN — 为凭证提供者生成的亚马逊资源名称 (ARN)。

    • 名称 — 您为 API 密钥指定的名称。

    • 密钥 ARN — 为 API 密钥生成的 Secret AWS s Manager 机密 ARN。

  5. (如果您使用自定义网关服务角色)将以下基于身份的策略附加到您的网关服务角色:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "GetWorkloadAccessToken", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetWorkloadAccessToken", ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:123456789012:workload-identity-directory/default", "arn:aws:bedrock-agentcore:us-east-1:123456789012:workload-identity-directory/default/workload-identity/GatewayName-*" ] }, { "Sid": "GetResourceApiKey", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetResourceApiKey", ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/TokenVaultId/apikeycredentialprovider/Name" ] }, { "Sid": "GetSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", ], "Resource": [ "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretId" ] } ] }

    替换以下字段的值:

    • 在GetWorkloadAccessToken语句中,将Resource列表GatewayName中的替换为网关的名称。

    • 在GetResourceApiKey声明中,将Resource列表中的值替换为您刚生成的凭证的 ARN。

    • 在GetSecretValue语句中,将Resource列表中的值替换为生成凭据时响应中返回的 AWS 密钥的 ARN。

设置 API 密钥的示例

以下示例向您展示如何为网关目标设置 API 密钥:

例
AgentCore CLI
  1. AgentCore CLI 凭证命令必须在现有的 agentcore 项目中运行。如果您还没有,请先使用创建一个项目agentcore create。

    agentcore add credential \ --name api-key-credential-provider \ --type api-key \ --api-key <API_KEY_VALUE> agentcore deploy
AWS CLI
  1. aws bedrock-agentcore-control create-api-key-credential-provider \ --name api-key-credential-provider \ --api-key <API_KEY_VALUE>
Boto3
  1. import boto3 client = boto3.client("bedrock-agentcore-control") client.create_api_key_credential_provider( name="api-key-credential-provider", apiKey="<API_KEY_VALUE>" )