本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Envoy Proxy 授权
重要
终止支持通知:2026 年 9 月 30 日, AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后,您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。如需了解更多信息,请访问此博客文章从迁移 AWS App Mesh 到 Amazon S ECS ervice Connect
代理授权授权在亚马逊ECS任务中、在亚马逊上运行的 Kubernetes 容器中或在亚马逊EKSEC2实例上运行的 En v oy 代理从 App Mesh Envoy 管理服务中读取一个或多个网状终端节点的配置。对于在 2021 年 4 月 26 日之前已将 Envoy 连接到 App Mesh 端点的客户账户,使用传输层安全 (TLS) 的虚拟节点和虚拟网关(带或不带)需要代理授权。TLS对于想要在 2021 年 4 月 26 日之后将 Envoy 连接到其 App Mesh 端点的客户账户,所有 App Mesh 功能都需要代理授权。建议所有客户账户为所有虚拟节点启用代理授权,即使他们不使用代理授权TLS,也要使用对特定资源的授权IAM获得安全一致的体验。代理授权要求在IAM策略中指定appmesh:StreamAggregatedResources
权限。该策略必须附加到某个IAM角色,并且该IAM角色必须附加到托管代理的计算资源。
创建IAM策略
如果您希望服务网格中的所有网格端点都能读取所有网格端点的配置,请跳至 创建IAM角色。如果要限制单个网格端点可以从中读取配置的网格端点,则需要创建一个或多个IAM策略。建议将可以读取配置的网格端点限制为仅在特定计算资源上运行的 Envoy 代理。创建IAM策略并将appmesh:StreamAggregatedResources
权限添加到策略中。以下示例策略允许在服务网格中读取名为 serviceBv1
和 serviceBv2
的虚拟节点的配置。无法读取服务网格中定义的任何其他虚拟节点的配置。有关创建或编辑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 — 选择AWS 服务,选择弹性容器服务,然后在创建IAM角色时选择弹性容器服务任务用例。
-
Amazon EC2 — 选择AWS 服务 EC2,选择,然后在创建IAM角色时选择EC2用例。无论您是直接在 Amazon EC2 实例上托管代理,还是在实例上运行的 Kubernetes 上托管代理,这都适用。
有关如何创建IAM角色的更多信息,请参阅为 AWS 服务创建角色。
附加IAM政策
如果您希望服务网格中的所有网格端点都能读取所有网格端点的配置,请将AWSAppMeshEnvoyAccess
托管IAM策略附加到您在上一步中创建的IAM角色。如果要限制单个网格端点可以从中读取配置的网格端点,请将您创建的每个策略附加到您创建的每个角色上。有关为IAM角色附加自定义或托管IAM策略的更多信息,请参阅添加IAM身份权限。
附加IAM角色
将每个IAM角色附加到相应的计算资源:
-
Amazon EKS — 如果您将策略附加到工作节点的角色,则可以跳过此步骤。如果您创建了单独的角色,则将每个角色分配给单独的 Kubernetes 服务账户,并将每个服务账户分配给包含 Envoy 代理的单个 Kubernetes 容器组 (pod) 部署规范。有关更多信息,请参阅《亚马逊EKS用户指南》中的为服务账户指定IAM角色和 Kubernetes 文档中的 Pod 配置服务账户
。 -
亚马逊 ECS — 将亚马逊ECS任务角色附加到包含 Envoy 代理的任务定义中。该任务可以用EC2或 Fargate 启动类型进行部署。有关如何创建 Amazon ECS 任务角色并将其附加到任务的更多信息,请参阅为任务指定IAM角色。
-
亚马逊 EC2 — 该IAM角色必须附加到托管 Envoy 代理的亚马逊EC2实例。有关如何将角色附加到 Amazon EC2 实例的更多信息,请参阅我已经创建了一个IAM角色,现在我想将其分配给EC2实例
。
确认权限
选择其中一个计算服务名称,确认 appmesh:StreamAggregatedResources
权限已分配给托管代理的计算资源。
可以将自定义策略分配给分配给 Worker 节点的角色,也可以分配给各个容器组 (pod),或者两者兼而有之。但是,建议您仅在单个容器组 (pod) 上分配策略,这样您就可以将单个 pod 的访问限制为单个网格端点。如果策略已附加到分配给工作节点的角色,请选择 Amazon EC2 选项卡,然后完成在那里找到的适用于您的工作节点实例的步骤。要确定向 Kubernetes 容器分配了哪个IAM角色,请完成以下步骤。
-
查看 Kubernetes 部署的详细信息,其中包括您要确认已将 Kubernetes 服务账户分配到的容器组 (pod)。以下命令可查看名为的部署的详细信息
my-deployment
.kubectl describe deployment
my-deployment
在返回的输出中,记下右边
Service Account:
的值。如果以Service Account:
开头的行不存在,则当前未为部署分配自定义 Kubernetes 服务账户。你需要分配一个。有关更多信息,请参阅 Kubernetes 文档中的为容器组 (pod) 配置服务账户。 -
查看在上一步中返回的服务帐号的详细信息。以下命令可查看名为的服务帐号的详细信息
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角色。 登录 AWS Management Console 并打开IAM控制台,网址为https://console.aws.amazon.com/iam/
。 -
在左侧导航窗格中,选择角色。选择您在上一步中记下的IAM角色的名称。
-
确认已列出您之前创建的自定义策略或
AWSAppMeshEnvoyAccess
托管策略。如果两者都没有附加任何IAM策略,则为该IAM角色附加策略。如果您想附加自定义IAM策略但没有自定义策略,则需要创建具有所需权限的自定义IAM策略。如果已附加自定义IAM策略,请选择该策略并确认其中包含该策略"Action": "appmesh:StreamAggregatedResources"
。如果不是,则需要将该权限添加到您的自定义IAM策略中。您还可以确认是否列出了特定网状终端节点的相应Amazon资源名称 (ARN)。如果未ARNs列出,则可以编辑策略以添加、删除或更改列出的策略ARNs。有关更多信息,请参阅编辑IAM策略和创建IAM策略。 -
对每个包含 Envoy 代理的 Kubernetes 容器组 (pod),重复上述步骤。