使用标签控制对 CodeArtifact 资源的访问 - CodeArtifact

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

使用标签控制对 CodeArtifact 资源的访问

IAM 用户策略语句中的条件包含在您在指定 CodeArtifact 操作所需资源的权限时所用的语法中。使用条件中的标签是控制对资源和请求的访问的一种方法。有关为 CodeArtifact 资源添加标签的信息,请参阅标记资源。本主题讨论了基于标签的访问控制。

在设计 IAM 策略时,您可以通过授予对特定资源的访问权限来设置精细权限。但随着您管理的资源数量的增加,此任务会变得日益复杂。标记资源并在策略声明条件中使用标签可以简化这一任务。您可以向具有特定标签的任何资源批量授予访问权限。然后,在创建期间或之后,您可以将此标签反复应用到相关资源。

标签可以附加到资源,也可以从请求传入支持标签的服务。在 CodeArtifact 中,资源可以具有标签,而且某些操作可以包括标签。在创建 IAM 策略时,您可以使用标签条件键来控制:

  • 基于资源已有的标签,哪些用户可以对域或存储库资源执行操作。

  • 哪些标签可以在操作的请求中传递。

  • 是否特定标签键可在请求中使用。

有关标签条件键的完整请求和语义,请参阅《IAM 用户指南》中的使用标签控制访问

重要

对资源使用标签来限制操作时,标签必须位于对其执行了操作的资源上。例如,要使用标签拒绝 DescribeRepository 权限,标签必须位于每个存储库上,而不是域上。有关 CodeArtifact 中的操作列表以及对哪些资源进行操作,请参阅AWS CodeArtifact 权限参考

基于标签的访问控制示例

以下示例演示了如何为 CodeArtifact 用户指定策略中的标签条件。

例 1:基于请求中的标签限制操作

AWSCodeArtifactAdminAccess 托管式用户策略可以为用户赋予不受限的权限,允许其对所有资源执行任何 CodeArtifact 操作。

除非请求包含某些标签,否则以下策略会限制此权限并拒绝未经授权的用户创建存储库的权限。为此,如果请求未指定一个名为 costcenter、值为 12 的标签,则拒绝 CreateRepository 操作。除托管用户策略外,客户的管理员还必须将此 IAM 策略附加到未经授权的 IAM 用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "codeartifact:CreateRepository", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/costcenter": "true" } } }, { "Effect": "Deny", "Action": "codeartifact:CreateRepository", "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "aws:RequestTag/costcenter": [ "1", "2" ] } } } ] }
例 2:基于资源标签限制操作

AWSCodeArtifactAdminAccess 托管式用户策略可以为用户赋予不受限的权限,允许其对所有资源执行任何 CodeArtifact 操作。

以下策略限制此权限并拒绝未经授权的用户对指定域中的存储库执行操作的权限。为此,如果资源具有名为 Key1 的带有值 Value1Value2 之一的标签,那么它会拒绝某些操作。(使用 aws:ResourceTag 条件键,基于资源上的标签控制对这些资源的访问。) 除托管用户策略外,客户的管理员还必须将此 IAM 策略附加到未经授权的 IAM 用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codeartifact:TagResource", "codeartifact:UntagResource", "codeartifact:DescribeDomain", "codeartifact:DescribeRepository", "codeartifact:PutDomainPermissionsPolicy", "codeartifact:PutRepositoryPermissionsPolicy", "codeartifact:ListRepositoriesInDomain", "codeartifact:UpdateRepository", "codeartifact:ReadFromRepository", "codeartifact:ListPackages", "codeartifact:ListTagsForResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Key1": ["Value1", "Value2"] } } } ] }
例 3:基于资源标签允许操作

以下策略授予用户对 CodeArtifact 中的存储库和程序包执行操作以及获取其相关信息的权限。

为此,如果存储库具有名为 Key1、值为 Value1 的标签,则允许特定操作。(aws:RequestTag 条件键用于控制可以通过 IAM 请求传递哪些标签。) aws:TagKeys 条件确保标签键区分大小写。对于未附加 AWSCodeArtifactAdminAccess 托管用户策略的 IAM 用户,此策略非常有用。托管式策略可以为用户赋予不受限的权限,允许其对所有资源执行任何 CodeArtifact 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeartifact:UpdateRepository", "codeartifact:DeleteRepository", "codeartifact:ListPackages" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Key1": "Value1" } } } ] }
例 4:基于请求中的标签允许操作

以下策略授予用户在 CodeArtifact 中的指定域创建存储库的权限。

为此,如果请求中的创建资源 API 指定一个名为 Key1、值为 Value1 的标签,则允许 CreateRepositoryTagResource 操作。(aws:RequestTag 条件键用于控制可以通过 IAM 请求传递哪些标签。) aws:TagKeys 条件确保标签键区分大小写。对于未附加 AWSCodeArtifactAdminAccess 托管用户策略的 IAM 用户,此策略非常有用。托管式策略可以为用户赋予不受限的权限,允许其对所有资源执行任何 CodeArtifact 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeartifact:CreateRepository", "codeartifact:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/Key1": "Value1" } } } ] }