View a markdown version of this page

AWS App Mesh 基于身份的策略示例 - AWS App Mesh

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

AWS App Mesh 基于身份的策略示例

重要

终止支持通知:2026 年 9 月 30 日, AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后,您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。有关更多信息,请访问此博客文章从迁移 AWS App Mesh 到 Amazon ECS Service Connect。

默认情况下,IAM 用户和角色没有创建或修改 App Mesh 资源的权限。他们也无法使用 AWS 管理控制台 AWS CLI、或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅《IAM 用户指南》中的 在 JSON 选项卡上创建策略。

策略最佳实践

Identity-based 策略决定是否有人可以在您的账户中创建、访问或删除 App Mesh 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下指南和建议:

  • 开始使用 AWS 托管策略并转向最低权限权限 — 要开始向用户和工作负载授予权限,请使用为许多常见用例授予权限的AWS 托管策略。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息,请参阅《IAM 用户指南》中的 AWS 托管策略或工作职能的AWS 托管策略。

  • 应用最低权限:在使用 IAM 策略设置权限时,请仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用 IAM 应用权限的更多信息,请参阅《IAM 用户指南》中的 IAM 中的策略和权限。

  • 使用 IAM 策略中的条件进一步限制访问权限:您可以向策略添加条件来限制对操作和资源的访问。例如,您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果服务操作是通过特定 AWS 服务的(例如)使用的,则也可以使用条件来授予对服务操作的访问权限 CloudFormation。有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:条件。

  • 使用 IAM Access Analyzer 验证您的 IAM 策略,以确保权限的安全性和功能性:IAM Access Analyzer 会验证新策略和现有策略,以确保策略符合 IAM 策略语言(JSON)和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议,以帮助您制定安全且功能性强的策略。有关更多信息,请参阅《IAM 用户指南》中的使用 IAM Access Analyzer 验证策略。

  • 需要多重身份验证 (MFA)-如果 AWS 账户您的场景需要 IAM 用户或根用户,请启用 MFA 以提高安全性。若要在调用 API 操作时需要 MFA,请将 MFA 条件添加到您的策略中。有关更多信息,请参阅《IAM 用户指南》中的使用 MFA 保护 API 访问。

有关 IAM 中的最佳实操的更多信息,请参阅《IAM 用户指南》中的 IAM 中的安全最佳实践。

将 App Mesh 权限范围限定为分段工作负载

本主题介绍了 App Mesh 如何使用服务相关角色代表您访问其他 AWS 服务,并介绍了您可以用来确定权限范围和分段共享账户或网格的工作负载的做法。

App Mesh 在解析网格引用的资源时代表你采取行动。它使用其服务相关角色来调用其他 AWS 服务。AWSServiceRoleForAppMesh它不使用创建网格资源的委托人的凭证。例如,当虚拟节点使用 AWS Cloud Map 服务发现时,App Mesh 会发现命名空间中具有服务相关角色的实例。

因此,如果您授予委托人调用 App Mesh API 的权限,则还会授予该委托人间接访问服务相关角色可以访问的任何资源的权限。IAM 不会评估拒绝委托人访问下游服务(例如servicediscovery针对这些调用)的策略。有关此行为的更多信息,请参阅 IAM 用户指南中的服务相关角色的间接权限。

要对共享账户或网格的工作负载进行细分,请按照以下做法控制 App Mesh 层的访问权限。

  • 将资源管理权限范围限定为委托人拥有的资源 — 不要appmesh:*向部署角色、开发者角色或适用于 Kubernetes 的 App Mesh 控制器的服务账号授权。取而代之的是,将诸如appmesh:CreateVirtualNode和之类的操作范围限定appmesh:UpdateVirtualNode到委托人拥有的资源 ARN。例如,允许团队仅管理名称以该团队前缀开头的虚拟节点。这可以防止委托人创建引用其他团队的命名空间或服务的虚拟节点。有关资源 ARN 的更多信息,请参阅资源。

  • 将 E@@ nvoy 代理授权范围扩大到每个代理自己的虚拟节点 — 为所有虚拟节点和虚拟网关启用代理授权。仅appmesh:StreamAggregatedResources向每个工作负载的 IAM 角色授予该工作负载运行的虚拟节点或虚拟网关的 ARN。然后,Envoy 代理只能读取自己的配置,包括 App Mesh 为其发现的端点。有关代理授权的更多信息,请参阅Envoy Proxy 授权。

  • 不要依赖拒绝下游服务权限 — 即使您拒绝委托人servicediscovery或其他下游操作,也无法限制 App Mesh 为该委托人解析的内容。App Mesh 使用其服务相关角色进行这些调用。请改用前面实践中描述的 App Mesh 权限。

使用 App Mesh 控制台

要访问 AWS App Mesh 控制台,您必须拥有一组最低权限。这些权限必须允许您列出和查看 AWS 账户中 App Mesh 资源的详细信息。如果您创建的基于身份的策略比所需的最低权限更严格,则无法为具有该策略的实体(IAM 用户或角色)正常运行控制台。您可以将 AWSAppMeshReadOnly 托管策略附加到用户 有关更多信息,请参阅《IAM 用户指南》中的为用户添加权限。

对于仅调用 AWS CLI 或 AWS API 的用户,您无需为其设置最低控制台权限。相反,只允许访问与您尝试执行的 API 操作相匹配的操作。

允许用户查看他们自己的权限

该示例说明了您如何创建策略,以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上或使用 AWS CLI 或 AWS API 以编程方式完成此操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

创建网格

此示例显示如何创建一个策略,该策略允许用户在任何区域为账户创建网格。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appmesh:CreateMesh", "Resource": "arn:aws:appmesh:*:123456789012:CreateMesh" } ] }

列出并描述所有网格

此示例显示如何创建一个策略,该策略允许用户拥有只读访问权限以列出或描述所有网格。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "appmesh:DescribeMesh", "appmesh:ListMeshes" ], "Resource": "*" } ] }

创建带受限标签的 App Mesh 网格

您可以在 IAM 策略中使用标签以控制可以在 IAM 请求中传递哪些标签。您可以指定可以在 IAM 用户或角色中添加、更改或删除哪些标签键值对。此示例说明了如何创建允许创建网格的策略,但前提是使用名为的标签teamName且值为的网格创建的booksTeam。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appmesh:CreateMesh", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/teamName": "booksTeam" } } } ] }

您可以将该策略附加到您账户中的 IAM 用户。如果用户尝试创建网格,则网格必须包含名为 teamName 且值为 booksTeam 的标签。如果网格不包含此标签和值,则创建网格的尝试将失败。有关更多信息,请参阅 IAM 用户指南 中的 IAM JSON 策略元素:条件。