AWS CodeArtifact 身份验证和令牌 - CodeArtifact

AWS CodeArtifact 身份验证和令牌

CodeArtifact 要求用户通过服务进行身份验证,然后才能发布或使用程序包版本。您必须使用 AWS 凭证来创建授权令牌,从而向 CodeArtifact 服务进行身份验证。要创建授权令牌,必须具有适当的权限。有关创建授权令牌所需的权限,请参阅 AWS CodeArtifact 权限参考中的 GetAuthorizationToken 条目。有关 CodeArtifact 权限的更广泛信息,请参阅AWS CodeArtifact 如何与 IAM 协同工作

要从 CodeArtifact 获取授权令牌,必须调用 GetAuthorizationToken API。借助 AWS CLI,您可以使用 loginget-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 之后开始。

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

使用 login 命令创建的令牌

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

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

参数 必需 描述

--tool

要进行身份验证的程序包管理器。可能的值为 dotnetnpmnugetpipswifttwine

--domain

存储库所属域的名称。

--domain-owner

域所有者的 ID。如果访问的域归您未通过身份验证的 AWS 账户所有,则需要使用此参数。有关更多信息,请参阅 跨账户域

--repository

要进行身份验证的存储库的名称。

--duration-seconds

登录信息的有效时间,以秒为单位。最小值为 900*,最大值为 43200。

--namespace

将命名空间与您的存储库工具相关联。

--dry-run

仅输出为了将工具与存储库连接而执行的命令,而不对配置进行任何更改。

*在代入角色时如果调用 login,则值为 0 也同样有效。使用 --duration-seconds 0 调用 login 会创建一个令牌,该令牌的有效期限与代入角色的会话持续时间中的剩余时间相等。

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

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

有关如何在 npm 中使用 login 命令的具体指导,请参阅在 CodeArtifact 中配置和使用 npm。对于 Python,请参阅将 CodeArtifact 与 Python 结合使用

调用 GetAuthorizationToken API 时所需的权限

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

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

使用 GetAuthorizationToken API 创建的令牌

您可以调用 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

有关更多信息,请参阅以下文档:

使用环境变量传递身份验证令牌

AWS CodeArtifact 使用 GetAuthorizationToken API 提供的授权令牌来验证和授权来自构建工具(例如 Maven 和 Gradle)的请求。有关这些身份验证令牌的更多信息,请参阅使用 GetAuthorizationToken API 创建的令牌

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

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

  1. 配置 AWS 凭证,如安装或升级 AWS CLI,然后对其进行配置 中所述。

  2. 设置 CODEARTIFACT_AUTH_TOKEN 环境变量:

    注意

    在某些情况下,不需要包括 --domain-owner 参数。有关更多信息,请参阅 跨账户域

    • 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 授权令牌

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

如果您使用临时安全凭证(例如代入角色联合用户访问权限)创建访问令牌,则可以通过更新 IAM 策略来拒绝访问,从而撤销访问权限。有关信息,请参阅《IAM 用户指南》中的禁用临时安全凭证的权限

如果您使用长期 IAM 用户凭证来创建访问令牌,则必须修改用户的策略来拒绝访问或删除 IAM 用户。有关更多信息,请参阅更改 IAM 用户的权限删除 IAM 用户