

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

# AWS CodeArtifact 权限参考
<a name="auth-and-access-control-permissions-reference"></a>

## AWS CodeArtifact 资源和运营
<a name="arn-formats"></a>

在中 AWS CodeArtifact，主要资源是一个域。在策略中，您可以使用 Amazon 资源名称 (ARN) 标识策略应用到的资源。存储库也是资源，并且 ARNs 与之相关联。有关更多信息，请参阅中的 [Amazon 资源名称 (ARNs) *Amazon Web Services 一般参考*](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。


| 资源类型 | ARN 格式 | 
| --- | --- | 
| 域： | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| Repository | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| 程序包组 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| 带有命名空间的程序包 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| 不带命名空间的程序包 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}//{{my_package}}` | 
| 所有 CodeArtifact 资源 | `arn:aws:codeartifact:*` | 
| 指定 AWS 区域中指定账户拥有的所有 CodeArtifact 资源 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:*` | 

您指定哪个资源 ARN 取决于您要控制访问权限的一个或多个操作。

您可以在语句中使用其 ARN 来表示特定域 ({{myDomain}})，如下所示。

```
"Resource": "arn:aws:codeartifact:{{us-east-2}}:{{123456789012}}:domain/{{myDomain}}"
```

您可以在语句中使用其 ARN 指明特定的存储库 ({{myRepo}})，如下所示。

```
"Resource": "arn:aws:codeartifact:{{us-east-2}}:{{123456789012}}:domain/{{myDomain}}/{{myRepo}}"
```

要在单个语句中指定多个资源，请 ARNs 用逗号分隔它们。以下语句适用于特定域中的所有程序包和存储库。

```
"Resource": [
  "arn:aws:codeartifact:{{us-east-2}}:{{123456789012}}:domain/{{myDomain}}",
  "arn:aws:codeartifact:{{us-east-2}}:{{123456789012}}:repository/{{myDomain}}/*",
  "arn:aws:codeartifact:{{us-east-2}}:{{123456789012}}:package/{{myDomain}}/*"
]
```

**注意**  
许多 AWS 服务将冒号 (:) 或正斜杠 (/) 视为中的 ARNs相同字符。但是，在资源模式和规则中 CodeArtifact 使用精确匹配。请务必在创建事件模式时使用正确的字符，以使其与资源中的 ARN 语法匹配。

## AWS CodeArtifact API 操作和权限
<a name="permission-ref"></a>

在设置访问控制以及编写可附加到 IAM 身份的权限策略（基于身份的策略）时，您可以将下表作为参考。

您可以在 AWS CodeArtifact 策略中使用 AWS-wide 条件键来表达条件。有关列表，请参阅 *IAM 用户指南*中的 [IAM JSON 策略元素参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys)。

请在策略的 `Action` 字段中指定这些操作。要指定操作，请在 API 操作名称之前使用 `codeartifact:` 前缀（例如，`codeartifact:CreateDomain` 和 `codeartifact:AssociateExternalConnection`）。要在单个语句中指定多项操作，请使用逗号将它们隔开（例如，`"Action": [ "codeartifact:CreateDomain", "codeartifact:AssociateExternalConnection" ]`）。

**使用通配符**

您可以在策略的 `Resource` 字段中指定带或不带通配符（\*）的 ARN 作为资源值。您可以使用通配符指定多个操作或资源。例如，`codeartifact:*`指定所有 CodeArtifact 动作并`codeartifact:Describe*`指定以单词开头的所有 CodeArtifact 动作`Describe`。


**CodeArtifact API 操作和操作所需的权限**  

| AWS CodeArtifact API 操作 | 所需权限（API 操作） | 资源 | 
| --- | --- | --- | 
| AssociateExternalConnection | `codeartifact:AssociateExternalConnection`<br />向存储库添加外部连接所必需。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| CopyPackageVersions | 将程序包版本从源存储库复制到目标存储库：<br />`codeartifact:CopyPackageVersions`<br />对目标存储库是必需的。<br />`codeartifact:ReadFromRepository`<br />对源存储库是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| CreateDomain | `codeartifact:CreateDomain`<br />创建域时是必需的。<br />`kms:DescribeKey` 和 `kms:CreateGrant`<br />指定非默认 `encryptionKey` 时，对提供的 KMS 密钥来说是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| CreatePackageGroup | `codeartifact:CreatePackageGroup`<br />创建程序包组时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| CreateRepository | `codeartifact:CreateRepository`<br />创建存储库时是必需的。<br />`codeartifact:AssociateWithDownstreamRepository`<br />对存储库是必需的，因此可以将其作为上游存储库添加到下游存储库。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| DeleteDomain | `codeartifact:DeleteDomain`<br />删除域时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| DeleteDomainPermissionsPolicy | `codeartifact:DeleteDomainPermissionsPolicy`<br />删除域的资源策略时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| DeletePackage | `codeartifact:DeletePackage`<br />删除程序包时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| DeletePackageGroup | `codeartifact:DeletePackageGroup`<br />删除程序包组时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| DeletePackageVersions | `codeartifact:DeletePackageVersions`<br />删除程序包版本时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| DeleteRepository | `codeartifact:DeleteRepository`<br />删除 存储库时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| DeleteRepositoryPermissionsPolicy | `codeartifact:DeleteRepositoryPermissionsPolicy`<br />删除存储库的资源策略时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| DescribeDomain | `codeartifact:DescribeDomain`<br />获取有关域的信息时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| DescribePackage | `codeartifact:DescribePackage`<br />获取有关程序包的信息时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| DescribePackageGroup | `codeartifact:DescribePackageGroup`<br />获取有关程序包组的信息时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| DescribePackageVersion | `codeartifact:DescribePackageVersion`<br />获取有关程序包版本的信息时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| DescribeRepository | `codeartifact:DescribeRepository`<br />获取有关存储库的信息时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| DisassociateExternalConnection | `codeartifact:DisassociateExternalConnection`<br />从存储库删除外部连接时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| DisposePackageVersions | `codeartifact:DisposePackageVersions`<br />处置程序包的版本时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| GetAssociatedPackageGroup | `codeartifact:GetAssociatedPackageGroup`<br />获取程序包的关联程序包组时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| GetAuthorizationToken | `codeartifact:GetAuthorizationToken`<br />`sts:GetServiceBearerToken`<br />获取访问存储库的临时授权令牌时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| GetDomainPermissionsPolicy | `codeartifact:GetDomainPermissionsPolicy`<br />获取域资源策略时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| GetPackageVersionAsset | `codeartifact:GetPackageVersionAsset`<br />获取程序包版本中的资产时是必需的。 | arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my\_domain}}/{{my\_repo}}/{{package-format}}/{{namespace}}/{{my\_package}} | 
| GetPackageVersionReadme | `codeartifact:GetPackageVersionReadme`<br />获取程序包版本的自述文件时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| GetRepositoryEndpoint | `codeartifact:GetRepositoryEndpoint`<br />获取存储库端点时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| GetRepositoryPermissionsPolicy | `codeartifact:GetRepositoryPermissionsPolicy`<br />获取存储库资源策略时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| ListAssociatedPackages | `codeartifact:ListAssociatedPackages`<br />返回与程序包组关联的程序包列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| ListDomains | `codeartifact:ListDomains`<br />返回 AWS 账户中的域的分页列表时是必需的。 | `*` | 
| ListPackageGroups | `codeartifact:ListPackageGroups`<br />返回域中的程序包组的分页列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| ListPackages | `codeartifact:ListPackages`<br />返回存储库中的程序包的分页列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| ListPackageVersionAssets | `codeartifact:ListPackageVersionAssets`<br />返回程序包版本中的资产的分页列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| ListPackageVersionDependencies | `codeartifact:ListPackageVersionDependencies`<br />返回程序包版本的依赖项的分页列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| ListPackageVersions | `codeartifact:ListPackageVersions`<br />返回存储库中的程序包版本的分页列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| ListRepositories | `codeartifact:ListRepositories`<br />返回 AWS 账户中的存储库的分页列表时是必需的。 | `*` | 
| ListRepositoriesInDomain | `codeartifact:ListRepositoriesInDomain`<br />返回域中的存储库的分页列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| ListSubPackageGroups | `codeartifact:ListSubPackageGroups`<br />返回程序包组的直接子程序包组列表时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| ListTagsForResource | `codeartifact:ListTagsForResource`<br />列出指定资源的标签所必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}`<br />`arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| PublishPackageVersion | `codeartifact:PublishPackageVersion`<br />将程序包版本发布到存储库时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| PutDomainPermissionsPolicy | `codeartifact:PutDomainPermissionsPolicy`<br />将资源策略添加到域时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}` | 
| PutPackageMetadata | `codeartifact:PutPackageMetadata`<br />将 Maven 程序包版本发布到存储库，或者在 npm 程序包版本中添加或删除 npm 标签时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| PutPackageOriginConfiguration | `codeartifact:PutPackageOriginConfiguration`<br />更新程序包的源配置时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| PutRepositoryPermissionsPolicy | `codeartifact:PutRepositoryPermissionsPolicy`<br />将资源策略添加到存储库时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| ReadFromRepository | `codeartifact:ReadFromRepository`<br />使用程序包管理器客户端从存储库读取时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| TagResource | `codeartifact:TagResource`<br />标记资源时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}`<br />`arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| UntagResource | `codeartifact:UntagResource`<br />从资源中删除标签时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:domain/{{my_domain}}`<br />`arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 
| UpdatePackageGroup | `codeartifact:UpdatePackageGroup`<br />更新程序包组时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| UpdatePackageGroupOriginConfiguration | `codeartifact:UpdatePackageGroupOriginConfiguration`<br />更新程序包组的来源配置时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}` | 
| UpdatePackageVersionsStatus | `codeartifact:UpdatePackageVersionsStatus`<br />更改程序包版本的状态时是必需的。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:package/{{my_domain}}/{{my_repo}}/{{package-format}}/{{namespace}}/{{my_package}}` | 
| UpdateRepository | `codeartifact:UpdateRepository`<br />更新存储库的描述或上游连接时是必需的。有关更多信息 [UpdateRepository](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdateRepository.html)，请参阅 *CodeArtifact API 指南*中的[修改存储库上游配置](config-repos.md#modify-upstream)或。<br />`codeartifact:AssociateWithDownstreamRepository`<br />对存储库是必需的，因此可以将其作为上游存储库添加到下游存储库。 | `arn:aws:codeartifact:{{region-ID}}:{{account-ID}}:repository/{{my_domain}}/{{my_repo}}` | 

## Package 组 ARNs
<a name="package-group-arns"></a>

**注意**  
本节介绍软件包组 ARNs 和模式编码是如何提供信息的。建议 ARNs 从控制台复制，或者 ARNs 使用 `DescribePackageGroup` API 来获取，而不是编码模式和构造 ARNs。

IAM 策略使用通配符 `*` 来匹配多项 IAM 操作或多个资源。程序包组模式也使用 `*` 字符。为了更轻松地编写与单个程序包组匹配的 IAM 策略，程序包组 ARN 格式使用程序包组模式的编码版本。

具体而言，程序包组 ARN 格式如下所示：

```
arn:aws:codeartifact:{{region}}:{{account-ID}}:package-group/{{my_domain}}/{{encoded_package_group_pattern}}
```

其中编码后的程序包组模式是程序包组模式，某些特殊字符替换为其百分比编码值。以下列表包含字符及其相应的百分比编码值：
+ `*` : `%2a`
+ `$` : `%24`
+ `%` : `%25`

例如，域的根程序包组（`/*`）的 ARN 将是：

```
arn:aws:codeartifact:{{us-east-1}}:{{111122223333}}:package-group/{{my_domain}}/%2a
```

请注意，列表中未包含的字符无法编码，并且区分大小写，因此`*`必须按照 “不 ARNs 是” 进行编码。`%2a` `%2A`