View a markdown version of this page

为 AgentCore 网关设置权限 - Amazon Bedrock AgentCore

为 AgentCore 网关设置权限

要使用 Amazon Bedrock AgentCore Gateway 及其功能,您需要考虑以下权限:

  1. 网关 builder/user 权限-向网关构建者或用户提供的允许其创建、管理和/或使用 AgentCore 网关的权限。

  2. 网关服务角色权限-提供给您将为网关创建的服务角色的权限。这些权限允许 Amazon Bedrock AgentCore 服务代表调用网关的身份执行操作。

  3. Resource-based 权限-附加到资源的权限,允许网关服务角色对其进行访问。您将在基于资源的策略中包含网关服务角色的 Amazon 资源名称 (ARN)。Principal

  4. 基于@@ 网关资源的策略 — 直接附加到网关资源的策略,用于控制哪些委托人可以调用它们。有关更多信息,请参阅 Amazon Bedrock Resource-based AgentCore 政策

注意

如果您不想设置自定义权限,则可以使用以下选项进行轻松设置:* 将附加BedrockAgentCoreFullAccess到 IAM 身份,使其能够创建、管理和调用网关。* 使用 AWS 管理控制台或 AgentCore CLI 创建具有适当权限的 AgentCore 网关服务角色和具有适当基于资源的策略的网关目标,以允许服务角色访问它们。

选择一个主题以了解更多信息:

网关生成器和用户权限

为了使身份能够创建、管理或使用网关,您需要将基于身份的策略附加到 IAM 身份,以允许其执行 A mazon Bedro AgentCore-related ck 操作。要获得全面权限,您可以使用BedrockAgentCoreFullAccess托管策略。

为了提高安全性和控制力,您可以通过减少完全访问策略中的权限来创建自己的自定义策略。例如,以下策略允许身份执行与 Gate AgentCore way 相关的操作,但不允许执行与其他 AgentCore 服务(例如 AgentCore Runtime 或 B AgentCore rowser)相关的操作:

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock-agentcore:*Gateway*", "bedrock-agentcore:*WorkloadIdentity", "bedrock-agentcore:*CredentialProvider", "bedrock-agentcore:*Token*", "bedrock-agentcore:*Access*" ], "Resource": "arn:aws:bedrock-agentcore:*:*:*gateway*" } ] }
以下自定义策略限制性更强,仅允许对网关和网关目标进行读取访问
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock-agentcore:ListGateways", "bedrock-agentcore:GetGateway", "bedrock-agentcore:ListGatewayTargets", "bedrock-agentcore:GetGatewayTarget" ], "Resource": "arn:aws:bedrock-agentcore:*:*:*gateway*" } ] }

网关访问权限(入站授权)

除了与网关相关的权限外,您还需要为身份配置权限,以便能够在调用期间访问网关。您将在设置入站授权时配置这些权限。

AgentCore 网关服务角色权限

创建网关时,您需要一个有权代替 IAM 角色并有权代表该 IAM 角色访问 AWS 资源和外部服务的服务角色。您可以通过以下方式创建服务角色:

  • 如果您在 AWS 管理控制台或通过 AgentCore CLI 创建网关,则可以选择允许 AgentCore 自动为您创建具有必要权限的服务角色。如果你更喜欢这种方法,你可以跳过这个先决条件。

  • 如果您希望创建自己的服务角色以实现更高的自定义,则需要使用本主题中概述的权限配置该角色。要了解如何创建服务角色并向其附加权限,请参阅创建角色以向 AWS 服务委派权限

以下主题中列出了服务角色所需的权限:

信任权限

服务角色必须附加信任策略,该策略允许该 AgentCore 服务假设 IAM 身份并代表其执行操作。

以下是您可以使用的信任策略示例。

{ "Version":"2012-10-17", "Statement": [ { "Sid": "GatewayAssumeRolePolicy", "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:gateway/gateway-name-*" } } } ] }
注意

由于在创建网关 ARN 之前您不会知道它,因此可以在首次创建服务角色时省略该Condition字段。创建网关后,作为最佳安全实践,将该Condition字段重新添加到策略中,然后执行以下操作:* 将aws:SourceAccount条件键值替换为网关所属账户的 ID。* 将aws:SourceArn条件密钥替换为网关的 ARN。

出站授权权限

根据您对网关目标使用的出站授权类型,您需要为服务角色添加权限以允许其调用目标。这些权限允许网关服务角色检索用于调用目标的授权凭证。您可以在设置出站授权的过程中执行此操作。

访问权限 AWS 资源

根据您的网关设置或您选择添加到网关的目标,您可能需要向网关服务角色添加权限以允许其访问 AWS 资源。以下主题涵盖了您的网关服务角色可能需要访问的一些资源:

如果您将 Lambda 目标附加到网关,则需要为网 AgentCore 关服务角色添加权限,以便能够通过执行以下操作来调用该函数:

  • 将基于身份的策略附加到允许对 Lambda 函数资源lambda:InvokeFunction执行操作的 AgentCore 网关服务角色。

  • (如果该函数与网关服务角色位于不同的账户中)将基于资源的策略附加到 Lambda 函数,允许网关服务角色主体对 Lambda 函数资源执行操作lambda:InvokeFunction

选择一个主题以了解如何设置权限:

主题

    ===== 将基于身份的策略附加到网关服务角色

    要允许网关服务角色访问 Lambda 目标,请将以下基于身份的策略附加到您的 AgentCore 网关服务角色,方法是选择添加和移除与您的用例相关的 IAM 身份权限中的主题并按照步骤操作。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "AmazonBedrockAgentCoreGatewayLambdaProd", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:FunctionName" ] }] }

    Resource字段中的 ARN 替换为您的 Lambda 函数网关目标的 ARN。如果您的网关有多个 Lambda 目标,则可以将每个函数的 ARN 添加到列表中。Resource

    =====(如果函数在另一个账户中)将基于资源的策略附加到 Lambda 函数

    如果 Lambda 函数目标与网关服务角色位于不同的账户中,则需要附加基于资源的策略以允许网关服务角色对其进行访问。以下是您可以使用的策略示例:

    { "Version":"2012-10-17", "Statement": [ { "Sid": "LambdaAllowGatewayServiceRoleMyFunction", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/MyGatewayExecutionRole" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction" } ] }

    替换以下字段的值:

    • AWS— 使用您的网关服务角色的 ARN。

    • Resource— 使用你的 Lambda 函数的 ARN。

      要了解如何将基于资源的策略附加到 Lambda 函数以允许您的网关服务角色访问该函数,请选择以下方法之一
    Console
    1. ====== 在管理控制台中将基于资源的策略附加到您的 Lambda 函数 AWS

    2. 按照在 Lamb da 中查看基于资源的 IAM 策略的 “控制台” 选项卡中的步骤进行操作。

    3. Resource-based 策略声明部分,选择添加权限

    4. 选择 AWS 账户并填写以下字段:

      • 语句 ID — 为网关服务角色提供访问函数权限的语句的唯一标识符。

      • 主体-指定您的网关服务角色的 ARN。

      • 操作-选择lambda:InvokeFunction

    CLI
    1. 要 AWS 使用 CLI 将基于资源的策略附加到您的 Lambda 函数,请按照授予 Lambda 函数访问 AWS服务的权限中的步骤操作,并将您的网关服务角色指定为。principal

      你可以在终端中运行以下代码,为你的网关服务角色添加访问该函数的权限us-east-1

      aws lambda add-permission \ --function-name "MyFunction" \ --statement-id "GatewayInvoke" \ --action "lambda:InvokeFunction" \ --principal "arn:aws:iam::123456789012:role/MyGatewayServiceRole" --region us-east-1

    如果您计划包含来自 Amazon S3 URI 的网关目标工具定义,则需要包括网关服务角色访问存储桶的权限。该AmazonS3ReadOnlyAccess策略是您可以附加到服务角色的策略的示例。为了提高安全性,您可以Resource将范围限定为 S3 位置。

    如果您计划添加 Smithy 目标,则需要为网关服务角色添加访问您的 Smithy 模型所引用的 AWS 服务的权限。要确定需要将哪些权限附加到服务角色,请参阅该服务的文档。

    您可以通过选择添加和移除与您的用例相关的 IAM 身份权限中的主题并按照步骤操作来为服务角色添加权限。

    例如,如果您的 Smithy 模型目标访问一个 DynamoDB 表,则可以附加以下策略以允许该服务角色对该表执行 DynamoDB 操作:

    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:*:*:table/*" } ] }

    网关权限的最佳实践

    遵循最低权限原则
    • 仅授予网关运行所需的权限

    • 尽可能使用特定的资源 ARN 而不是通配符

    • 定期审查和审计权限

    按职能区分角色
    • 使用不同的角色进行管理和执行

    • 为具有不同目的的不同网关创建单独的角色

    安全的凭证存储
    • 在 Secrets Manager 中 AWS 存储 API 密钥和 OAuth 凭证

    • 定期轮换凭证

    监控和审计
    • 为网关操作启用 CloudTrail 日志记录

    • 定期查看访问模式和权限使用情况

    在政策中使用条件
    • 添加条件以限制何时以及如何使用权限

    • 考虑使用源 IP 限制进行管理操作