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

    • 迅速

    • 缠绕

  • 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 命令的具体指导,请参阅配置并使用 npm CodeArtifact。对于 Python,请参阅将 CodeArtifact 与 Python 结合使用

调用所需的权限 GetAuthorizationToken API

需要sts:GetServiceBearerTokencodeartifact:GetAuthorizationToken权限才能调用 CodeArtifact GetAuthorizationTokenAPI。

要在 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 使用出售的授权令牌对来自 Maven 和 Gradle 等构建工具的请求进行身份验证和授权。GetAuthorizationToken API有关这些身份验证令牌的更多信息,请参阅使用创建的代币 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
    • 窗户 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用户