Envoy Proxy 授权 - AWS App Mesh

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

Envoy Proxy 授权

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

创建 IAM policy

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

{ "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 — 选择AWS 服务,选择弹性容器服务,然后在创建 IAM 角色时选择弹性容器服务任务用例。

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

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

附加 IAM policy

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

附加 IAM 角色

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

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

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

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

确认权限

选择其中一个计算服务名称,确认 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) 配置服务账户

  2. 查看上一步中返回的服务账户的详细信息。以下命令查看名为 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 角色

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

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

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

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

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

  2. 选择 Amazon ECS 任务。

  3. 任务定义名称页面上,选择任务定义。

  4. 任务定义页面上,选择任务角色右侧的 IAM 角色名称链接。如果未列出 IAM 角色,则需要创建一个 IAM 角色并通过更新任务定义将其附加到您的任务上。

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

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

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

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

  3. 描述选项卡中,选择 IAM 角色右侧的 IAM 角色名称链接。如果未列出 IAM 角色,则需要创建一个 IAM 角色

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

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