

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

# 为 AgentCore Gateway 设置权限
<a name="gateway-prerequisites-permissions"></a>

要使用亚马逊 Bedrock AgentCore Gateway 及其功能，您需要考虑以下权限：

1.  **网关 builder/user 权限 **-提供给网关生成器或用户的权限，允许其创建、管理和/或使用 AgentCore 网关。

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

1.  **Resource-based 权限 **-附加到资源的权限，允许网关服务角色访问资源。您将在基于资源的策略`Principal`中包含网关服务角色的亚马逊资源名称 (ARN)。

1.  **基于网关资源的策略 ** — 直接附加到网关资源的策略，用于控制哪些委托人可以调用这些资源。有关更多信息，请参阅亚马逊 Bedrock AgentCore [ 的](resource-based-policies.md)Resource-based 政策。

**注意**  
如果您不想设置自定义权限，则可以使用以下选项来简化设置：\* 将其连接[BedrockAgentCoreFullAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/BedrockAgentCoreFullAccess.html)到 IAM 身份以允许其创建、管理和调用网关。\* 使用 Amazon 管理控制台或 AgentCore CLI 创建具有 AgentCore 适当权限的网关服务角色和具有适当资源策略的网关目标，以允许服务角色访问它们。

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

**Topics**
+ [网关生成器和用户权限](#gateway-user-permissions)
+ [AgentCore 网关服务角色权限](#gateway-service-role-permissions)
+ [网关权限最佳实践](#gateway-prerequisites-best-practices)

## 网关生成器和用户权限
<a name="gateway-user-permissions"></a>

为了使身份能够创建、管理或使用网关，您需要将基于身份的策略附加到 IAM 身份以允许其执行 A [ mazon Bedrock 操作。 AgentCore-related ](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonbedrockagentcore.html)要获得全面权限，您可以使用[BedrockAgentCoreFullAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/BedrockAgentCoreFullAccess.html)托管策略。

为了提高安全性和控制力，您可以通过减少完全访问策略中的权限来创建自己的自定义策略。例如，以下策略允许身份执行与 AgentCore Gateway 相关的操作，但不允许与其他 AgentCore 服务（例如 AgentCore 运行时或 AgentCore 浏览器）相关的操作：

```
{
"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",
        "bedrock-agentcore:ListGatewayRateLimits",
        "bedrock-agentcore:GetGatewayRateLimit"
      ],
      "Resource": "arn:aws:bedrock-agentcore:*:*:*gateway*"
    }
  ]
}
```

以下自定义策略允许身份在不修改网关或其目标的情况下管理网关的速率限制：

```
{
"Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "bedrock-agentcore:CreateGatewayRateLimit",
        "bedrock-agentcore:GetGatewayRateLimit",
        "bedrock-agentcore:UpdateGatewayRateLimit",
        "bedrock-agentcore:DeleteGatewayRateLimit",
        "bedrock-agentcore:ListGatewayRateLimits",
        "bedrock-agentcore:BatchPutGatewayRateLimits"
      ],
      "Resource": "arn:aws:bedrock-agentcore:*:*:*gateway*"
    }
  ]
}
```

### 网关访问权限（入站授权）
<a name="gateway-access-permissions"></a>

除了与网关相关的权限外，您还需要为身份配置权限，以便能够在调用期间访问网关。在[设置入站授权时，您将配置这些权限](gateway-inbound-auth.md)。

## AgentCore 网关服务角色权限
<a name="gateway-service-role-permissions"></a>

创建网关时，您需要一个有权代入 IAM 角色并代表 IAM 角色访问 Amazon 资源和外部服务的服务角色。您可以通过以下方式创建服务角色：
+ 如果您在 Amazon 管理控制台中或通过 AgentCore CLI 创建网关，则可以选择允许 AgentCore 自动为您创建具有必要权限的服务角色。如果你更喜欢这种方法，你可以跳过这个先决条件。
+ 如果您更愿意创建自己的服务角色以实现更大的自定义，则需要使用本主题中概述的权限配置该角色。要了解如何创建服务角色并向其附加权限，请参阅[创建向 Amazon 服务委派权限的角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-service.html)。

服务角色所需的权限见以下主题：

**Topics**
+ [信任权限](#gateway-service-role-permissions-trust)
+ [出站授权权限](#gateway-service-role-permissions-outbound-auth)
+ [访问权限 Amazon 资源](#gateway-service-role-permissions-resources)

### 信任权限
<a name="gateway-service-role-permissions-trust"></a>

服务角色必须[附加](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html#term_trust_policy)信任策略，允许该 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 之前您不会知道网关 ARN，因此在首次创建服务角色时可以省略该`Condition`字段。创建网关后，将该`Condition`字段作为最佳安全实践添加到策略中，然后执行以下操作：\* 将`aws:SourceAccount`条件键值替换为网关所属账户的 ID。\* 将`aws:SourceArn`条件密钥替换为网关的 ARN。

### 出站授权权限
<a name="gateway-service-role-permissions-outbound-auth"></a>

根据您对网关目标使用的出站授权类型，您需要向服务角色添加权限以允许其调用目标。这些权限允许网关服务角色检索用于调用目标的授权证书。您可以在[设置出站授权的过程中执行此操作](gateway-outbound-auth.md)。

### 访问权限 Amazon 资源
<a name="gateway-service-role-permissions-resources"></a>

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

#### 访问 Lambda 函数
<a name="gateway-lambda-permissions"></a>

如果您将 Lambda 目标附加到网关，则需要为 AgentCore 网关服务角色添加权限，以便能够通过执行以下操作来调用该函数：
+ 将基于身份的策略附加到 AgentCore 网关服务角色，允许对 Lambda 函数资源`lambda:InvokeFunction`执行操作。
+ （如果该函数与网关服务角色位于不同的账户中）向 Lambda 函数附加一个基于资源的策略，允许网关服务角色委托人对 Lambda 函数资源执行操作。`lambda:InvokeFunction`

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

**Topics**

<a name="gateway-lambda-identity-based-permissions"></a>==== 将基于身份的策略附加到网关服务角色

要允许网关服务角色访问 Lambda 目标，请将以下基于身份的策略附加到您的 AgentCore 网关服务角色，方法是选择[添加和删除与您的用例相关的 IAM 身份权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)中的主题并按照以下步骤操作。

```
{
"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`。

<a name="gateway-lambda-resource-based-permissions"></a>====（如果函数在另一个账户中）将基于资源的策略附加到 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 函数 Amazon 

1. 按照**控制台**选项卡中[查看 Lambda ](https://docs.amazonaws.cn/lambda/latest/dg/access-control-resource-based.html) 中基于资源的 IAM 策略中的步骤进行操作。

1. 在**Resource-based 政策声明**部分中，选择**添加权限**。

1. 选择** Amazon 账户**并填写以下字段：
   +  **语句 ID ** — 语句的唯一标识符，为网关服务角色提供访问该函数的权限。
   +  **主体 ** — 指定您的网关服务角色的 ARN。
   +  **操作 **-选择`lambda:InvokeFunction`。

------
#### [ CLI ]

1. 要使用 CL Amazon I 将基于资源的策略附加到您的 Lambda 函数，请按照[授予 Lambda 函数对 Amazon 服务的访问权限中的步骤操作，](https://docs.amazonaws.cn/lambda/latest/dg/permissions-function-services.html)并将您的网关服务角色指定为。`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
   ```

------

**Example**  

#### 访问 Amazon S3 对象
<a name="gateway-s3-permissions"></a>

如果您计划加入来自 Amazon S3 URI 的网关目标工具定义，则需要包括网关服务角色访问存储桶的权限。该[AmazonS3ReadOnlyAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonS3ReadOnlyAccess.html)策略是您可以附加到服务角色的策略示例。您可以将范围缩小`Resource`到 S3 位置以提高安全性。

#### Smithy 模型权限
<a name="gateway-smithy-permissions"></a>

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

您可以通过选择[添加和删除与您的用例相关的 IAM 身份权限中的主题并按照步骤向服务角色添加权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

例如，如果您的 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/*"
    }
  ]
}
```

## 网关权限最佳实践
<a name="gateway-prerequisites-best-practices"></a>

 **遵循最小权限原则 **   
+ 仅授予网关运行所需的权限
+ 尽可能使用特定的资源 ARN 而不是通配符
+ 定期审查和审核权限

 **按职能区分角色 **   
+ 使用不同的角色进行管理和执行
+ 为具有不同用途的不同网关创建单独的角色

 **安全的凭证存储 **   
+ 将 API 密钥和 OAuth 凭据存储在密钥管理器中 Amazon 
+ 定期轮换凭证

 **监控和审计**   
+ 为网关操作启用 CloudTrail 日志记录
+ 定期查看访问模式和权限使用情况

 **政策中的使用条件 **   
+ 添加条件以限制权限的使用时间和方式
+ 考虑使用来源 IP 限制进行管理操作