AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用标签控制访问

在使用标签控制访问之前,您必须了解 AWS 如何授予访问权限。AWS 由资源 集合组成。IAM 用户是一种资源。Amazon S3 存储桶是一种资源。在使用 AWS API、AWS CLI 或 AWS 管理控制台 执行操作(如创建用户)时,您将为该操作发送一个请求。您的请求指定操作、资源、委托人实体(用户或角色)、委托人账户 以及所需的任何请求信息。所有这些信息提供了上下文

然后,AWS 检查是否对您(委托人实体)进行身份验证(登录)和授权(具有权限),以便对指定的资源执行指定的操作。在授权期间,AWS 检查应用于请求上下文的所有策略。大多数策略作为 JSON 文档存储在 AWS 中,并指定委托人实体的权限。有关策略类型和用法的更多信息,请参阅策略和权限

只有在策略允许请求的每个部分时,AWS 才会授权该请求。要查看示意图和详细了解 IAM 基础设施,请参阅了解 IAM 的工作方式。有关 IAM 如何确定是否允许请求的详细信息,请参阅策略评估逻辑

标签可能使此过程变得复杂,因为标签可以附加到资源,也可以从请求 传入支持标签的服务。要基于标签控制访问,您需要在策略的条件元素中提供标签信息。要了解 AWS 服务是否支持标记,请参阅使用 IAM 的 AWS 服务并查找根据标签进行授权列为的服务。选择服务名称以查看该服务的授权和访问控制文档。

当您创建 IAM 策略时,可以使用标签条件键来控制对以下任一操作的访问:

  • 资源 – 基于 AWS 服务资源上的标签控制对这些资源的访问。为此,请使用 ResourceTag/key-name 条件键根据附加到资源的标签确定是否允许访问资源。

  • 请求 – 控制哪些标签可以传入 IAM 请求。为此,请使用 aws:RequestTag/key-name 条件键来指定可在资源中添加、更改或删除哪些标签键值对。

  • 标签键 – 使用 aws:TagKeys 条件键控制是否可以在资源或请求中使用特定标签键。

您可以通过可视化方式创建 IAM 策略,也可以使用 JSON,或通过导入现有托管策略来创建。有关详细信息,请参阅 创建 IAM 策略

控制对资源的访问

您可以在 IAM 策略中使用条件来基于标签控制对 AWS 资源的访问。

此示例显示您可以如何创建策略 允许用户启动或停止 Amazon EC2 实例,但仅限实例标签 Owner 具有该用户的用户名的值时。此策略还授予在控制台上完成此操作的必要权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": {"ec2:ResourceTag/Owner": "${aws:username}"} } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }

您可以将此策略附加到您账户中的 IAM 用户。如果名为 richard-roe 的用户尝试启动 Amazon EC2 实例,则实例必须标记为 Owner=richard-roeowner=richard-roe。否则,他将被拒绝访问。标签键 Owner 同时匹配 ownerOwner,因为条件键名称不区分大小写。有关更多信息,请参阅IAM JSON 策略元素:Condition

控制对请求的访问

您可以在 IAM 策略中使用条件来控制可在 AWS 资源中添加、更改或删除哪些标签。

仅当标签包含 environment 键和 preprodproduction 值时,此示例显示您可以如何创建策略 才允许使用 Amazon EC2 CreateTags 操作将标签附加到实例。作为最佳实践,请将 ForAllValues 修饰符与 aws:TagKeys 条件键配合使用,以指示只允许在请求中使用键 environment。这将阻止用户包括其他键,例如意外使用 Environment 而不是 environment

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": [ "preprod", "production" ] }, "ForAllValues:StringEquals": {"aws:TagKeys": "environment"} } } }

控制标签键

您可以在 IAM 策略中使用条件来控制是否可以在资源或请求中使用特定标签键。

作为最佳实践,当您使用策略来通过标签控制访问时,应该使用 aws:TagKeys条件键。支持标签的 AWS 服务可能允许您创建多个只有大小写不同的标签键名称,例如使用 foo=bar1Foo=bar2 标记 Amazon EC2 实例。在策略条件中,键名称不区分大小写。这意味着,如果您在策略的条件元素中指定 "ec2:ResourceTag:TagKey1": "Value1",则条件将匹配名为 TagKey1tagkey1 的资源标签键,但不会同时匹配两者。要防止只有键的大小写形式不同的重复标签,请使用 aws:TagKeys 条件来定义用户可以应用的标签键。

此示例显示您可以如何创建策略 允许创建和标记 Secrets Manager 密钥,但只能使用标签键 environmentcost-center

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:TagResource" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] } } } }