Envoy 代理授权 - Amazon App Mesh
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Envoy 代理授权

代理授权授权特使在 Amazon ECS 任务中运行的代理、在 Amazon EKS 上运行的 Kubernetes 容器中运行,或者在 Amazon EC2 实例上运行以从应用程序网状 Envoy 管理服务中读取一个或多个网状终端节点的配置。对于在 2021 年 4 月 26 日之前已经将 Envoy 连接到其 App Mesh 终端节点的客户,需要对使用传输层安全性 (TLS)以及虚拟网关(有或不带 TLS)。对于希望在 2021 年 4 月 26 日之后将 Envoy 连接到其 App Mesh 终端节点的客户,所有 App Mesh 功能都需要代理授权。建议所有客户账户对所有虚拟节点启用代理授权(即使它们不使用 TLS),以便在使用 IAM 授权特定资源时获得安全且一致的体验。代理授权要求appmesh:StreamAggregatedResourcesIAM 策略中指定了权限。该策略必须附加到 IAM 角色,并且该 IAM 角色必须附加到托管代理的计算资源。

创建 IAM 策略

如果希望服务网格中的所有网格端点都能够读取所有网格端点的配置,那么跳到创建 IAM 角色. 如果您想限制单个网格终端节点可以从中读取配置的网格终端节点,则需要创建一个或多个 IAM 策略。建议将可以从中读取配置的网状端点限制为仅在特定计算资源上运行的 Envoy 代理。创建 IAM 策略并添加appmesh:StreamAggregatedResources对策略的权限。以下示例策略允许配置名为serviceBv1serviceBv2在服务网格中读取。无法读取服务网格中定义的任何其他虚拟节点的配置。有关创建或编辑 IAM 策略的更多信息,请参阅创建 IAM 策略编辑 IAM 策略.

{ "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 角色

如果您希望服务网格中的所有网格终端节点都能够读取所有网格终端节点的配置,则只需创建一个 IAM 角色。如果要限制单个网格端点可以从中读取配置的网格端点,则需要为上一步中创建的每个策略创建一个角色。完成代理运行的计算资源的说明。

  • Amazon EKS— 如果要使用单个角色,则可以使用创建集群时创建并分配给工作节点的现有角色。要使用多个角色,集群必须满足为集群上的服务账户启用 IAM 角色. 创建 IAM 角色并将角色与 Kubernetes 服务账户关联。有关更多信息,请参阅 。为服务账户创建 IAM 角色和策略为服务账户指定 IAM 角色.

  • Amazon ECS— 选择AmazonService,选择弹性集装箱服务,然后选择Elastic Container Service 任创建 IAM 角色时的使用案例。

  • Amazon EC2— 选择AmazonService,选择EC2,然后选择EC2创建 IAM 角色时的使用案例。无论您直接在 Amazon EC2 实例上托管代理,还是在实例上运行的 Kubernetes 上托管代理,都适用。

有关如何创建 IAM 角色的更多信息,请参阅为创建角色Amazon服务.

附加 IAM 策略

如果希望服务网格中的所有网格端点都能够读取所有网格端点的配置,请附加AWSAppMeshEnvoyAccess托管 IAM 策略,用于您在上一步中创建的 IAM 角色。如果要限制单个网格端点可以从中读取配置的网格端点,请将创建的每个策略附加到您创建的每个角色。有关将自定义或托管 IAM 策略附加到 IAM 角色的更多信息,请参阅添加 IAM 身份权限.

附加 IAM 角色

将每个 IAM 角色附加到相应的计算资源:

  • Amazon EKS— 如果您将策略附加到工作节点的角色,则可以跳过此步骤。如果您创建了单独的角色,请将每个角色分配给单独的 Kubernetes 服务帐户,然后将每个服务帐户分配给包括 Envoy 代理的单个 Kubernetes pod 部署规范。有关更多信息,请参阅 。为服务账户指定 IAM 角色中的Amazon EKS 用户指南为 Pod 配置服务帐户在 Kubernetes 文档中。

  • Amazon ECS— 将 Amazon ECS 任务角色附加到包含 Envoy 代理的任务定义中。可以使用 EC2 或 Fargate 启动类型部署任务。有关如何创建 Amazon ECS 任务角色并将其附加到任务的更多信息,请参阅为任务指定 IAM 角色.

  • Amazon EC2— IAM 角色必须附加到托管 Envoy 代理的 Amazon EC2 实例。有关如何将角色附加到 Amazon EC2 实例的更多信息,请参阅我已经创建了一个 IAM 角色,现在我想将其分配给 EC2 实例.

确认权限

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

Amazon EKS

可以将自定义策略分配给分配给工作节点的角色、单个 Pod 或两者分配。但是,建议您只在单个 Pod 上分配策略,以便您可以将单个 Pod 的访问限制到单个网格终端节点。如果策略附加到分配给工作节点的角色,请选择Amazon EC2选项卡,然后完成其中为您的工作节点实例找到的步骤。要确定将哪个 IAM 角色分配给 Kubernetes 容器,请完成以下步骤。

  1. 查看 Kubernetes 部署的详细信息,其中包括要确认 Kubernetes 服务帐户已分配到的 Pod。以下命令查看名为的部署的详细信息我的部署.

    kubectl describe deployment my-deployment

    在返回的输出注释中,右侧的值Service Account:. 如果以开头的行Service Account:不存在,那么当前没有为部署分配自定义 Kubernetes 服务帐户。您需要分配一个。有关更多信息,请参阅 Kubernetes 文档中的为 Pod 配置服务账户

  2. 查看上一步中返回的服务账户的详细信息。以下命令查看名为的服务帐户的详细信息我的服务账户.

    kubectl describe serviceaccount my-service-account

    前提是 Kubernetes 服务帐户与Amazon Identity and Access Management角色,返回的其中一行类似于以下示例。

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

    在上一个例子中my-deployment是与服务账户关联的 IAM 角色的名称。如果服务帐户输出中不包含与上面示例类似的行,则 Kubernetes 服务帐户与Amazon Identity and Access Management你需要将其关联到一个账户。有关更多信息,请参阅为服务账户指定 IAM 角色

  3. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  5. 确认之前创建的自定义策略或AWSAppMeshEnvoyAccess已列出托管策略。如果两项政策都没有附加,附加 IAM 策略转到 IAM 角色。如果您想附加自定义 IAM 策略但没有自定义 IAM 策略,则需要创建自定义 IAM 策略具有所需的权限。如果附加了自定义 IAM 策略,请选择该策略并确认其包含"Action": "appmesh:StreamAggregatedResources". 如果没有,那么您需要将该权限添加到自定义 IAM 策略中。您还可以确认列出了特定网状终端节点的适当 Amazon 资源名称 (ARN)。如果没有列出 ARN,则可以编辑策略以添加、删除或更改列出的 ARN。有关更多信息,请参阅 。编辑 IAM 策略创建 IAM 策略.

  6. 对包含 Envoy 代理的每个 Kubernetes 容器重复上述步骤。

Amazon ECS
  1. 从 Amazon ECS 控制台中,选择任务定义.

  2. 选择 Amazon ECS 任务。

  3. 在存储库的任务定义名称页面上,选择任务定义。

  4. 在存储库的任务定义页面中,选择 IAM 角色名称的链接,该链接位于任务角色. 如果没有列出 IAM 角色,则需要创建 IAM 角色然后将其附加到你的任务中更新任务定义。

  5. 摘要页面上,Permissions (权限)选项卡中,确认您之前创建的自定义策略或AWSAppMeshEnvoyAccess已列出托管策略。如果两项政策都没有附加,附加 IAM 策略转到 IAM 角色。如果您想附加自定义 IAM 策略但没有自定义 IAM 策略,则需要创建自定义 IAM 策略. 如果附加了自定义 IAM 策略,请选择该策略并确认其包含"Action": "appmesh:StreamAggregatedResources". 如果没有,那么您需要将该权限添加到自定义 IAM 策略中。您还可以确认列出了特定网格终端节点的适当 Amazon 资源名称 (ARN)。如果没有列出 ARN,则可以编辑策略以添加、删除或更改列出的 ARN。有关更多信息,请参阅 。编辑 IAM 策略创建 IAM 策略.

  6. 对包含 Envoy 代理的每个任务定义重复上述步骤。

Amazon EC2
  1. 从 Amazon EC2 控制台中,选择实例在左侧导航窗格中。

  2. 选择托管 Envoy 代理的实例之一。

  3. 说明选项卡中,选择 IAM 角色名称的链接,该链接位于IAM 角色. 如果没有列出 IAM 角色,则需要创建 IAM 角色.

  4. 摘要页面上,Permissions (权限)选项卡中,确认您之前创建的自定义策略或AWSAppMeshEnvoyAccess已列出托管策略。如果两项政策都没有附加,附加 IAM 策略转到 IAM 角色。如果您想附加自定义 IAM 策略但没有自定义 IAM 策略,则需要创建自定义 IAM 策略. 如果附加了自定义 IAM 策略,请选择该策略并确认其包含"Action": "appmesh:StreamAggregatedResources". 如果没有,那么您需要将该权限添加到自定义 IAM 策略中。您还可以确认列出了特定网格终端节点的适当 Amazon 资源名称 (ARN)。如果没有列出 ARN,则可以编辑策略以添加、删除或更改列出的 ARN。有关更多信息,请参阅 。编辑 IAM 策略创建 IAM 策略.

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