

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

# AWS CodeArtifact 身份验证和令牌
<a name="tokens-authentication"></a>

CodeArtifact 要求用户通过服务进行身份验证，然后才能发布或使用程序包版本。您必须使用 AWS 凭证来创建授权令牌，从而向 CodeArtifact 服务进行身份验证。要创建授权令牌，必须具有适当的权限。有关创建授权令牌所需的权限，请参阅 [AWS CodeArtifact 权限参考](auth-and-access-control-permissions-reference.md)中的 `GetAuthorizationToken` 条目。有关 CodeArtifact 权限的更广泛信息，请参阅[如何 AWS CodeArtifact 与 IAM 配合使用](security_iam_service-with-iam.md)。

要从 CodeArtifact 获取授权令牌，必须调用 [GetAuthorizationToken API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetAuthorizationToken.html)。借助 AWS CLI，您可以使用 `login` 或 `get-authorization-token` 命令来调用 `GetAuthorizationToken`。

**注意**  
Root 用户无法调用 `GetAuthorizationToken`。
+ `aws codeartifact login`：使用此命令可以轻松地在一个步骤中将常用程序包管理器配置为使用 CodeArtifact。调用 `login` 会使用 `GetAuthorizationToken` 方法提取令牌，并使用令牌和适当的 CodeArtifact 存储库端点来配置您的程序包管理器。支持以下程序包管理器：
  + dotnet
  + npm
  + nuget
  + pip
  + swift
  + twine
+ `aws codeartifact get-authorization-token`：对于 `login` 不支持的程序包管理器，您可以直接调用 `get-authorization-token`，然后根据需要使用令牌配置程序包管理器，例如，将其添加到配置文件或将其存储为环境变量。

CodeArtifact 授权令牌的有效期默认为 12 小时。令牌的有效期限可以配置为 15 分钟至 12 小时。当有效期限到期时，您必须获取另一个令牌。令牌的有效期限从 `login` 之后或调用 `get-authorization-token` 之后开始。

如果在代入角色时调用 `login` 或 `get-authorization-token`，则可以通过将 `--duration-seconds` 的值设置为 `0`，将令牌的有效期限配置为与角色会话持续时间中的剩余时间相等。否则，令牌有效期限与角色的最长会话持续时间无关。例如，假设您调用 `sts assume-role` 并指定 15 分钟的会话持续时间，然后调用 `login` 来提取 CodeArtifact 授权令牌。在这种情况下，令牌在整整 12 小时内有效，即使此时间比 15 分钟的会话持续时间更长。有关控制会话持续时间的信息，请参阅**《IAM 用户指南》中的[使用 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)。

## 使用 `login` 命令创建的令牌
<a name="auth-token-login"></a>

`aws codeartifact login` 命令会使用 `GetAuthorizationToken` 方法提取令牌，并使用令牌和适当的 CodeArtifact 存储库端点来配置您的程序包管理器。

下表说明了 `login` 命令的参数。


****  

<table>
<thead>
  <tr><th>参数</th><th>必需</th><th>描述</th></tr>
</thead>
<tbody>
  <tr><td>`--tool`</td><td>是</td><td>要进行身份验证的程序包管理器。可能的值为 `dotnet`、`npm`、`nuget`、`pip`、`swift` 和 `twine`。</td></tr>
  <tr><td>`--domain`</td><td>是</td><td>存储库所属域的名称。</td></tr>
  <tr><td>`--domain-owner`</td><td>否</td><td>域所有者的 ID。如果访问的域归您未通过身份验证的 AWS 账户所有，则需要使用此参数。有关更多信息，请参阅 [跨账户域](domain-overview.md#domain-overview-cross-account)。</td></tr>
  <tr><td>`--repository`</td><td>是</td><td>要进行身份验证的存储库的名称。</td></tr>
  <tr><td>`--duration-seconds`</td><td>否</td><td>登录信息的有效时间，以秒为单位。最小值为 900\*，最大值为 43200。</td></tr>
  <tr><td>`--namespace`</td><td>否</td><td>将命名空间与您的存储库工具相关联。</td></tr>
  <tr><td>`--dry-run`</td><td>否</td><td>仅输出为了将工具与存储库连接而执行的命令，而不对配置进行任何更改。</td></tr>
  <tr><td colspan="3">\*在代入角色时如果调用 `login`，则值为 0 也同样有效。使用 `--duration-seconds 0` 调用 `login` 会创建一个令牌，该令牌的有效期限与代入角色的会话持续时间中的剩余时间相等。</td></tr>
</tbody>
</table>


以下示例说明了如何使用 `login` 命令提取授权令牌。

```
aws codeartifact login \
    --tool {{dotnet | npm | nuget | pip | swift | twine}} \
    --domain {{my_domain}} \
    --domain-owner {{111122223333}} \
    --repository {{my_repo}}
```

有关如何在 npm 中使用 `login` 命令的具体指导，请参阅[配置并使用 npm CodeArtifact](npm-auth.md)。对于 Python，请参阅[CodeArtifact 与 Python 一起使用](using-python.md)。

## 调用 `GetAuthorizationToken` API 时所需的权限
<a name="get-auth-token-permissions"></a>

调用 CodeArtifact `GetAuthorizationToken` API 时既需要 `sts:GetServiceBearerToken` 权限，也需要 `codeartifact:GetAuthorizationToken` 权限。

要将程序包管理器与 CodeArtifact 存储库结合使用，您的 IAM 用户或角色必须允许 `sts:GetServiceBearerToken`。虽然可以将 `sts:GetServiceBearerToken` 添加到 CodeArtifact 域资源策略，但该权限在这项策略中不会产生任何影响。

## 使用 `GetAuthorizationToken` API 创建的令牌
<a name="get-auth-token-api"></a>

您可以调用 `get-authorization-token` 来从 CodeArtifact 提取授权令牌。

```
aws codeartifact get-authorization-token \
    --domain {{my_domain}} \
    --domain-owner {{111122223333}} \
    --query authorizationToken \
    --output text
```

您可以使用 `--duration-seconds` 参数来更改令牌的有效期限。最小值为 900，最大值为 43200。以下示例创建一个持续 1 小时（3600 秒）的令牌。

```
aws codeartifact get-authorization-token \
    --domain {{my_domain}} \
    --domain-owner {{111122223333}} \
    --query authorizationToken \
    --output text \
    --duration-seconds {{3600}}
```

如果在代入角色时调用 `get-authorization-token`，则令牌有效期限与角色的最长会话持续时间无关。通过将 `--duration-seconds` 设置为 0，可以将令牌配置为在代入角色的会话持续时间到期时过期。

```
aws codeartifact get-authorization-token \
    --domain {{my_domain}} \
    --domain-owner {{111122223333}} \
    --query authorizationToken \
    --output text \
    --duration-seconds {{0}}
```

有关更多信息，请参阅以下文档：
+ 有关令牌和环境变量的指导，请参阅[使用环境变量传递身份验证令牌](#env-var)。
+ 对于 Python 用户，请参阅[不使用 login 命令配置 pip](python-configure-pip.md#python-configure-without-pip)或[配置和使用麻线 CodeArtifact](python-configure-twine.md)。
+ 对于 Maven 用户，请参阅[在 Gradle 中使用 CodeArtifact](maven-gradle.md)或[CodeArtifact 与 mvn 一起使用](maven-mvn.md)。
+ 对于 npm 用户，请参阅[不使用 login 命令配置 npm](npm-auth.md#configuring-npm-without-using-the-login-command)。

## 使用环境变量传递身份验证令牌
<a name="env-var"></a>

AWS CodeArtifact 使用 `GetAuthorizationToken` API 提供的授权令牌来验证和授权来自构建工具（例如 Maven 和 Gradle）的请求。有关这些身份验证令牌的更多信息，请参阅[使用 `GetAuthorizationToken` API 创建的令牌](#get-auth-token-api)。

您可以将这些身份验证令牌存储在构建工具可以读取的环境变量中，以便获取从 CodeArtifact 存储库中提取程序包或向存储库发布程序包所需的令牌。

出于安全考虑，与将令牌存储在可能被其他用户或进程读取或意外提交到源代码控制的文件中相比，这种方法更好。

1. 配置 AWS 凭证，如[安装或升级，然后配置 AWS CLI](get-set-up-install-cli.md) 中所述。

1. 设置 `CODEARTIFACT_AUTH_TOKEN` 环境变量：
**注意**  
在某些情况下，不需要包括 `--domain-owner` 参数。有关更多信息，请参阅 [跨账户域](domain-overview.md#domain-overview-cross-account)。
   + macOS 或 Linux：

     ```
     export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text`
     ```
   + Windows（使用默认命令 shell）：

     ```
     for /f %i in ('aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text') do set CODEARTIFACT_AUTH_TOKEN=%i
     ```
   + Windows PowerShell：

     ```
     $env:CODEARTIFACT_AUTH_TOKEN = aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text
     ```

## 撤销 CodeArtifact 授权令牌
<a name="revoke-access"></a>

 当经过身份验证的用户创建用于访问 CodeArtifact 资源的令牌时，在其可自定义的访问期结束之前该令牌一直有效。默认访问期为 12 小时。在某些情况下，您可能想要在访问期到期之前撤销对令牌的访问权限。您可以按照以下说明撤销对 CodeArtifact 资源的访问权限。

 如果您使用临时安全凭证（例如*代入角色*或*联合用户访问权限*）创建访问令牌，则可以通过更新 IAM 策略来拒绝访问，从而撤销访问权限。有关信息，请参阅《IAM 用户指南》**中的[禁用临时安全凭证的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_disable-perms.html)。

 如果您使用长期 IAM 用户凭证来创建访问令牌，则必须修改用户的策略来拒绝访问或删除 IAM 用户。有关更多信息，请参阅[更改 IAM 用户的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html)或[删除 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting)。