

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

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

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

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

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

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

**注意**  
如果您不想设置自定义权限，则可以使用以下选项进行轻松设置：\* 将附加[BedrockAgentCoreFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/BedrockAgentCoreFullAccess.html)到 IAM 身份，使其能够创建、管理和调用网关。\* 使用 AWS 管理控制台或 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 Bedro AgentCore-related ](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockagentcore.html) ck 操作。要获得全面权限，您可以使用[BedrockAgentCoreFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/BedrockAgentCoreFullAccess.html)托管策略。

为了提高安全性和控制力，您可以通过减少完全访问策略中的权限来创建自己的自定义策略。例如，以下策略允许身份执行与 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*"
    }
  ]
}
```

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

**Topics**

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

要允许网关服务角色访问 Lambda 目标，请将以下基于身份的策略附加到您的 AgentCore 网关服务角色，方法是选择[添加和移除与您的用例相关的 IAM 身份权限](https://docs.aws.amazon.com/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 函数 AWS 

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

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

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

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

1. 要 AWS 使用 CLI 将基于资源的策略附加到您的 Lambda 函数，请按照[授予 Lambda 函数访问 AWS](https://docs.aws.amazon.com/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**  

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

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

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

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

您可以通过选择[添加和移除与您的用例相关的 IAM 身份权限中的主题并](https://docs.aws.amazon.com/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 而不是通配符
+ 定期审查和审计权限

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

 **安全的凭证存储**   
+ 在 Secrets Manager 中 AWS 存储 API 密钥和 OAuth 凭证
+ 定期轮换凭证

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

 **在政策中使用条件**   
+ 添加条件以限制何时以及如何使用权限
+ 考虑使用源 IP 限制进行管理操作