域策略 - CodeArtifact

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

域策略

CodeArtifact 支持使用基于资源的权限来控制访问权限。基于资源的权限让您可以指定能够访问资源的用户,以及这些用户可以对该资源执行的操作。默认情况下,只有拥有该域的AWS账户才能在域中创建和访问存储库。您可以将策略文档应用于某个域,以允许其他IAM委托人访问该域名。

有关更多信息,请参阅策略和权限以及基于身份的策略和基于资源的策略

启用对域的跨账户访问

资源策略是一种JSON格式的文本文件。该文件必须指定主体 (actor)、一个或多个操作以及效果(AllowDeny)。要在由另一个账户拥有的域中创建存储库,必须向主体授予资源的 CreateRepository 权限。

例如,以下资源策略向账户 123456789012 授予在域中创建存储库的权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:CreateRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }

要允许创建带有标签的存储库,必须包括 codeartifact:TagResource 权限。这也将让账户可以向域及其中的所有存储库添加标签。

针对针对该域和域内所有资源的所有操作对域策略进行评估。这意味着域策略可用于将权限应用于域中的存储库和软件包。当Resource元素设置为时*,该语句将应用于域中的所有资源。例如,如果上述策略也包含codeartifact:DescribeRepository在允许的IAM操作列表中,则该策略将允许调用DescribeRepository域中的每个存储库。通过使用Resource元素中的特定资源,可以使用域策略将权限应用于域ARNs中的特定资源。

注意

域和存储库策略都可用于配置权限。当两个策略都存在时,将对两个策略进行评估,如果任一策略允许,则允许执行操作。有关更多信息,请参阅 存储库和域策略之间的交互

要访问另一个账户拥有的域中的程序包,必须向主体授予域资源GetAuthorizationToken 权限。授予权限后,域所有者可以控制哪些账户可以读取域中存储库的内容。

例如,以下资源策略向账户 123456789012 授予为域中任何存储库检索身份验证令牌的权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:GetAuthorizationToken" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }
注意

除了域的 GetAuthorizationToken 权限外,还必须向想要从存储库端点提取程序包的主体授予存储库资源的 ReadFromRepository 权限。同样,除了 GetAuthorizationToken 权限之外,还必须向想要将程序包发布到存储库端点的主体授予 PublishPackageVersion 权限。

有关 ReadFromRepositoryPublishPackageVersion 权限的更多信息,请参阅存储库策略

域策略示例

当多个账户使用一个域时,应向这些账户授予一组基本权限,让他们可以充分使用该域。以下资源策略列出了一组允许充分使用域的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "BasicDomainPolicy", "Action": [ "codeartifact:GetDomainPermissionsPolicy", "codeartifact:ListRepositoriesInDomain", "codeartifact:GetAuthorizationToken", "codeartifact:DescribeDomain", "codeartifact:CreateRepository" ], "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }
注意

如果一个域及其所有存储库归一个账户所有,并且只需要从该账户中使用,则无需创建域策略。

域名策略示例 AWS Organizations

您可以使用aws:PrincipalOrgID条件密钥向组织中的所有账户授予对 CodeArtifact 域的访问权限,如下所示。

{ "Version": "2012-10-17", "Statement": { "Sid": "DomainPolicyForOrganization", "Effect": "Allow", "Principal": "*", "Action": [ "codeartifact:GetDomainPermissionsPolicy", "codeartifact:ListRepositoriesInDomain", "codeartifact:GetAuthorizationToken", "codeartifact:DescribeDomain", "codeartifact:CreateRepository" ], "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID":["o-xxxxxxxxxxx"]} } } }

有关使用aws:PrincipalOrgID条件键的更多信息,请参阅《IAM用户指南》中的AWS全局条件上下文密钥

设置域策略

您可以使用 put-domain-permissions-policy 命令将策略附加到域。

aws codeartifact put-domain-permissions-policy --domain my_domain --domain-owner 111122223333 \ --policy-document file://</PATH/TO/policy.json>

如果调用 put-domains-permissions-policy,则在评估权限时会忽略域中的资源策略。这样可以确保域的所有者不会将自己锁定在域之外,因而使他们无法更新资源策略。

注意

您不能向其他 AWS 账户授予使用资源策略更新域上资源策略的权限,因为调用时会忽略资源策略 put-domain-permissions-policy。

示例输出:

{ "policy": { "resourceArn": "arn:aws:codeartifact:region-id:111122223333:domain/my_domain", "document": "{ ...policy document content...}", "revision": "MQlyyTQRASRU3HB58gBtSDHXG7Q3hvxxxxxxx=" } }

命令的输出包含域资源的 Amazon 资源名称 (ARN)、策略文档的完整内容和修订标识符。可以使用 --policy-revision 选项将修订标识符传递给 put-domain-permissions-policy。这样可以确保覆盖文档的已知修订版,而不是由另一个作者设置的较新版本。

读取域策略

要读取策略文档的现有版本,请使用 get-domain-permissions-policy 命令。要格式化输出来提高可读性,请将 --output--query policy.document 与 Python json.tool 模块一起使用,如下所示。

aws codeartifact get-domain-permissions-policy --domain my_domain --domain-owner 111122223333 \ --output text --query policy.document | python -m json.tool

示例输出:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "BasicDomainPolicy", "Action": [ "codeartifact:GetDomainPermissionsPolicy", "codeartifact:ListRepositoriesInDomain", "codeartifact:GetAuthorizationToken", "codeartifact:CreateRepository" ], "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111122223333:root" } } ] }

删除域策略

使用 delete-domain-permissions-policy 命令从域中删除策略。

aws codeartifact delete-domain-permissions-policy --domain my_domain --domain-owner 111122223333

输出的格式与 get-domain-permissions-policydelete-domain-permissions-policy 命令的输出格式相同。