

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

# Envoy Proxy 授权
<a name="proxy-authorization"></a>

**重要**  
终止支持通知：2026 年 9 月 30 日， AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后，您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。有关更多信息，请访问此博客文章[从迁移 AWS App Mesh 到 Amazon ECS Service Connect](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect)。

代理授权授权在 Amazon ECS 任务中、在 Amazon EKS 上运行的 Kubernetes 容器组 (pod) 中或在 Amazon EC2 实例上运行的 [Envoy](envoy.md) 代理从 App Mesh Envoy 管理服务中读取一个或多个网格端点的配置。对于在 2021 年 4 月 26 日之前已将 Envoy 连接到 App Mesh 端点的客户账户，使用[传输层安全性协议 (TLS) 的虚拟节点](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html)和虚拟网关（带或不带 TLS）需要代理授权。对于想要在 2021 年 4 月 26 日之后将 Envoy 连接到其 App Mesh 端点的客户账户，所有 App Mesh 功能都需要代理授权。建议所有客户账户为所有虚拟节点启用代理授权，即使这些账户不使用 TLS，也要使用 IAM 对特定资源进行授权，获得安全、一致的体验。代理授权要求在 IAM 策略中指定 `appmesh:StreamAggregatedResources` 权限。该策略必须附加到 IAM 角色，并且该 IAM 角色必须附加到您托管代理的计算资源上。

## 创建 IAM 策略
<a name="create-iam-policy"></a>

如果您希望服务网格中的所有网格端点都能读取所有网格端点的配置，请跳至 [创建 IAM 角色](#create-iam-role)。如果您想限制单个网格端点可以从中读取配置的网格端点，则需要创建一项或多项 IAM 策略。建议将可以读取配置的网格端点限制为仅在特定计算资源上运行的 Envoy 代理。创建 IAM 策略并将 `appmesh:StreamAggregatedResources` 权限添加到策略中。以下示例策略允许在服务网格中读取名为 `serviceBv1` 和 `serviceBv2` 的虚拟节点的配置。无法读取服务网格中定义的任何其他虚拟节点的配置。有关创建或编辑 IAM 策略的更多信息，请参阅[《创建 IAM 策略》](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)和[《编辑 IAM 策略》](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "appmesh:StreamAggregatedResources",
            "Resource": [
                "arn:aws:appmesh:us-east-1:123456789012:mesh/app1/virtualNode/serviceBv1",
                "arn:aws:appmesh:us-east-1:123456789012:mesh/app1/virtualNode/serviceBv2"
            ]
        }
    ]
}
```

------

您可以创建多个策略，每个策略都限制对不同网格端点的访问。

## 创建 IAM 角色
<a name="create-iam-role"></a>

如果您希望服务网格中的所有网格端点都能读取所有网格端点的配置，则只需创建一个 IAM 角色即可。如果要限制单个网格端点可以从中读取配置的网格端点，则需要为在上一步中创建的每个策略创建一个角色。完成运行代理的计算资源的说明。
+ **Amazon EKS** — 如果您想使用单个角色，则可以使用在创建集群时创建并分配给工作节点的现有角色。要使用多个角色，您的集群必须满足[在集群上为服务账户启用 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)中定义的要求。创建 IAM 角色并将这些角色与 Kubernetes 服务账户关联。有关更多信息，请参阅[为您的服务账户创建 IAM 角色和策略](https://docs.aws.amazon.com/eks/latest/userguide/create-service-account-iam-policy-and-role.html)以及[为您的服务账户指定 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html)。
+ **Amazon ECS** — 选择 **AWS 服务，**选择**弹性容器服务**，然后在创建 IAM 角色时选择**弹性容器服务任务**用例。
+ **Amazon EC2** — 选择 **AWS 服务，**选择 **EC2**，然后在创建 IAM 角色时选择 **EC2** 用例。无论您是将代理直接托管在 Amazon EC2 实例上，还是在实例上运行的 Kubernetes 上，这都适用。

有关如何创建 IAM 角色的更多信息，请参阅[为 AWS 服务创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)。

## 附加 IAM 策略
<a name="attach-iam-policy"></a>

如果您希望服务网格中的所有网格端点都能读取所有网状端点的配置，请将 `[AWSAppMeshEnvoyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess%24jsonEditor)` 托管 IAM 策略附加到您在上一步中创建的 IAM 角色上。如果要限制单个网格端点可以从中读取配置的网格端点，请将您创建的每个策略附加到您创建的每个角色上。有关向 IAM 角色附加自定义或托管 IAM 策略的更多信息，请参阅[添加 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

## 附加 IAM 角色
<a name="attach-role"></a>

将每个 IAM 角色附加到相应的计算资源上：
+ **Amazon EKS** — 如果您将策略附加到工作节点的角色，则可以跳过此步骤。如果您创建了单独的角色，则将每个角色分配给单独的 Kubernetes 服务账户，并将每个服务账户分配给包含 Envoy 代理的单个 Kubernetes 容器组 (pod) 部署规范。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[为服务账户指定 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html)和 Kubernetes 文档中的[为容器组 (pod) 配置服务账户](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/)。
+ **Amazon ECS** — 将 Amazon ECS 任务角色附加到包含 Envoy 代理的任务定义中。此任务可以使用 EC2 或 Fargate 启动类型进行部署。有关如何创建 Amazon ECS 任务角色并将其附加到任务的更多信息，请参阅[为任务指定 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。
+ **Amazon EC2** — IAM 角色必须附加到托管 Envoy 代理的 Amazon EC2 实例上。有关如何将角色附加到 Amazon EC2 实例的更多信息，请参阅[我已创建一个 IAM 角色，现在我想将其分配给 EC2 实例](https://aws.amazon.com/premiumsupport/knowledge-center/assign-iam-role-ec2-instance)。

## 确认权限
<a name="confirm-permission"></a>

选择其中一个计算服务名称，确认 `appmesh:StreamAggregatedResources` 权限已分配给托管代理的计算资源。

------
#### [ Amazon EKS ]

可以将自定义策略分配给分配给 Worker 节点的角色，也可以分配给各个容器组 (pod)，或者两者兼而有之。但是，建议您仅在单个容器组 (pod) 上分配策略，这样您就可以将单个 pod 的访问限制为单个网格端点。如果策略已附加到分配给 Worker 节点的角色上，请选择 **Amazon EC2** 选项卡，然后完成该选项卡中针对您的工作节点实例找到的步骤。要确定向 Kubernetes 容器组 (pod) 分配了哪个 IAM 角色，请完成以下步骤。

1. 查看 Kubernetes 部署的详细信息，其中包括您要确认已将 Kubernetes 服务账户分配到的容器组 (pod)。以下命令可查看名为的部署的详细信息*my-deployment*。

   ```
   kubectl describe deployment my-deployment
   ```

   在返回的输出中，记下右边 `Service Account:` 的值。如果以 `Service Account:` 开头的行不存在，则当前未为部署分配自定义 Kubernetes 服务账户。你需要分配一个。有关更多信息，请参阅 Kubernetes 文档中的[为容器组 (pod) 配置服务账户](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/)。

1. 查看在上一步中返回的服务帐号的详细信息。以下命令可查看名为的服务帐号的详细信息*my-service-account*。

   ```
   kubectl describe serviceaccount my-service-account
   ```

   如果 Kubernetes 服务账号与 AWS Identity and Access Management 角色关联，则返回的其中一行将与以下示例类似。

   ```
   Annotations:         eks.amazonaws.com/role-arn=arn:aws:iam::123456789012:role/my-deployment
   ```

   在前面的示例中，`my-deployment` 是与服务账号关联的 IAM 角色的名称。如果服务帐号输出不包含与上面示例类似的行，那么 Kubernetes 服务帐号未与账户关联，您需要将其关联到一个 AWS Identity and Access Management 账户。有关更多信息，请参阅[为服务账户指定 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html)。

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧导航窗格中，选择**角色**。选择您在上一步中记下的 IAM 角色的名称。

1. 确认已列出您之前创建的自定义策略或 `[AWSAppMeshEnvoyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess%24jsonEditor)` 托管策略。如果两个策略都未附加，请[将 IAM 策略附加](#attach-iam-policy)到 IAM 角色。如果您想附加自定义 IAM 策略但还没有，则需要[创建具有所需权限的自定义 IAM 策略](#create-iam-policy)。如果附加了自定义 IAM 策略，请选择该策略并确认其中包含 `"Action": "appmesh:StreamAggregatedResources"`。如果不是，则需要将该权限添加到您的自定义 IAM 策略中。您还可以确认是否列出了特定网格端点的 Amazon 资源名称 (ARN)。如果未 ARNs 列出，则可以编辑策略以添加、删除或更改列出的策略 ARNs。要了解更多信息，请参阅[编辑 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html) 和[创建 IAM 策略](#create-iam-policy)。

1. 对每个包含 Envoy 代理的 Kubernetes 容器组 (pod)，重复上述步骤。

------
#### [ Amazon ECS ]

1. 从 Amazon ECS 控制台中，选择**任务定义**。

1. 选择您的 Amazon ECS 任务。

1. 在**任务定义名称**页面上，选择任务定义。

1. 在**任务定义**页面上，选择**任务角色**右侧的 IAM 角色名称链接。如果未列出 IAM 角色，则需要[创建一个 IAM 角色](#create-iam-role)并通过[更新任务定义将其附加到您的任务上。](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition.html)

1. 在**摘要**页面的**权限**选项卡上，确认已列出您之前创建的自定义策略或 `[AWSAppMeshEnvoyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess%24jsonEditor)` 托管策略。如果两个策略都未附加，请[将 IAM 策略附加](#attach-iam-policy)到 IAM 角色。如果您想附加自定义 IAM 策略但还没有，则需要[创建自定义 IAM 策略](#create-iam-policy)。如果附加了自定义 IAM 策略，请选择该策略并确认其中包含 `"Action": "appmesh:StreamAggregatedResources"`。如果不是，则需要将该权限添加到您的自定义 IAM 策略中。您还可以确认是否列出了特定网格端点的适当 Amazon 资源名称 (ARN)。如果未 ARNs 列出，则可以编辑策略以添加、删除或更改列出的策略 ARNs。要了解更多信息，请参阅[编辑 IAM 策略](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_manage-edit.html) 和[创建 IAM 策略](#create-iam-policy)。

1. 对于包含 Envoy 代理的每个任务定义，重复前面的步骤。

------
#### [ Amazon EC2 ]

1. 在 Amazon EC2 控制台中，选择左侧导航栏中的**实例**。

1. 选择一个托管 Envoy 代理的实例。

1. 在 “**描述**” 选项卡中，选择 IAM 角色右侧的 **IAM 角色**名称链接。如果未列出 IAM 角色，则需要[创建一个 IAM 角色](#create-iam-role)。

1. 在**摘要**页面的**权限**选项卡上，确认已列出您之前创建的自定义策略或 `[AWSAppMeshEnvoyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess%24jsonEditor)` 托管策略。如果两个策略都未附加，请[将 IAM 策略附加](#attach-iam-policy)到 IAM 角色。如果您想附加自定义 IAM 策略但还没有，则需要[创建自定义 IAM 策略](#create-iam-policy)。如果附加了自定义 IAM 策略，请选择该策略并确认其中包含 `"Action": "appmesh:StreamAggregatedResources"`。如果不是，则需要将该权限添加到您的自定义 IAM 策略中。您还可以确认是否列出了特定网格端点的适当 Amazon 资源名称 (ARN)。如果未 ARNs 列出，则可以编辑策略以添加、删除或更改列出的策略 ARNs。要了解更多信息，请参阅[编辑 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html) 和[创建 IAM 策略](#create-iam-policy)。

1. 对托管 Envoy 代理的每个实例重复上述步骤。

------