AWS CLI 如何用 codeartifact login 为 npm 配置 CodeArtifact 仓库认证

AWS CLI 如何用 codeartifact login 为 npm 配置 CodeArtifact 仓库认证

【免费下载链接】aws-cli Universal Command Line Interface for Amazon Web Services 【免费下载链接】aws-cli 项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

如果你已经把 JS 包仓库托管在 AWS CodeArtifact 的 npm 格式仓库里,本地的 npm install / npm publish 会因为没有认证而被拒绝。AWS CLI 提供的 aws codeartifact login --tool npm 命令可以一步完成:获取临时授权令牌、把 CodeArtifact 仓库设置为 npm registry,并写入 npm 认证配置。命令执行成功后,本地 npm 即可直接访问该仓库,令牌最长有效期 12 小时,过期后需要重新执行登录。

前置条件

完成这个任务前需要确认三件事:

  • 已安装 AWS CLI,并且凭证配置可以访问你的 CodeArtifact 资源(login 命令内部会调用 GetAuthorizationTokenGetRepositoryEndpoint 两个 API);
  • 已安装 npm。如果找不到工具,命令会报错 npm was not found. Please verify installation.(Windows 上 AWS CLI 会显式调用 npm.cmd);
  • 已经存在一个 CodeArtifact 域(domain)和一个 npm 格式的仓库(repository),命令参数里会用到它们的名称。

执行登录

基本命令如下,--domain--repository 是必填项,示例值 test-domaintest-repo 来自仓库示例文档,替换为你自己的名称:

aws codeartifact login \
    --domain test-domain \
    --repository test-repo \
    --tool npm

命令成功后,标准输出(文档示例):

Successfully configured npm to use AWS CodeArtifact repository https://test-domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/test-repo/
Login expires in 12 hours at 2020-11-12 01:53:16-05:00

这两行分别告诉你:npm 已指向哪个仓库端点(你的域名、账户 ID、区域不同,端点也不同),以及本次登录信息的过期时间。

登录命令实际做了什么

结合 login 命令实现--tool npm 时的动作是:

  1. 写入 ~/.npmrc:追加或更新一行 //<仓库主机名和路径>:_authToken=<授权令牌>。如果设置了环境变量 NPM_CONFIG_USERCONFIG,则写入该变量指向的文件而不是默认的 ~/.npmrc
  2. 执行 npm config set registry <仓库端点>,把 CodeArtifact 仓库设为 npm registry;
  3. 执行 npm config set //<仓库主机名和路径>:always-auth true,让 npm 对该仓库始终要求认证。

因此登录完成后,可以直接检查 ~/.npmrc 中是否出现了对应仓库的 _authToken 条目,作为配置已写入的依据。

可选参数

login 命令的完整参数定义见 实现文件中的 ARG_TABLE

参数用途
--domain-owner可选。拥有该 CodeArtifact 域的 AWS 账户 ID
--namespace可选。把命名空间关联到仓库工具。npm 支持该参数:传入 namespace 后等价于设置 @namespace:registry(缺少 @ 前缀会自动补上),而不是把整个默认 registry 指向 CodeArtifact
--duration-seconds可选。以秒为单位指定登录信息的有效期
--endpoint-type可选。指定工具要交互的端点类型(会透传给 GetRepositoryEndpointendpointType 参数)
--dry-run只打印将要执行的命令,不修改任何配置。注意:dry-run 输出会包含未脱敏的授权令牌,不要在公共环境直接展示

带命名空间的例子:

aws codeartifact login \
    --domain test-domain \
    --repository test-repo \
    --tool npm \
    --namespace @myorg

命名空间有格式限制:只允许 URL-safe 字符,不能以点或下划线开头,否则报错 Invalid scope name, scope must contain URL-safe characters, no leading dots or underscores

验证配置结果

验证分两层:

  1. 命令输出:看到 Successfully configured npm to use AWS CodeArtifact repository ... 及过期时间行,说明令牌获取、仓库端点解析和 npm 配置写入都已完成;
  2. 配置文件:检查 ~/.npmrc(或 NPM_CONFIG_USERCONFIG 指向的文件)中存在该仓库对应的 _authToken 行,以及 npm 配置中 registry 已指向 CodeArtifact 端点。可以用 get-repository-endpoint 示例 中的命令独立核对端点地址:
aws codeartifact get-repository-endpoint \
    --domain test-domain \
    --repository test-repo \
    --format npm

常见报错与边界

  • 找不到工具npm was not found. Please verify installation.,先确认 npm 已安装且在 PATH 中。
  • 底层命令失败:登录过程中执行的 npm 子命令如果返回非零退出码,AWS CLI 会抛出 CommandFailedError,错误信息中授权令牌会被替换为 ******(脱敏),并附上子命令的 stderr 输出,可据此定位具体失败原因。
  • npm 9 的 always-auth 报错被忽略:npm 9 及以上版本移除了 always-auth 支持,设置该配置会返回非零退出码。AWS CLI 对此做了特殊处理:忽略这条报错,登录整体仍视为成功(见 功能测试 test_npm_login_always_auth_error_ignored)。
  • --namespace 不适用于所有工具:它只对支持命名空间的工具(npm、swift)生效;对 pip、twine、nuget、dotnet 传入会报错,例如 Argument --namespace is not supported for pip
  • 12 小时有效期:命令描述明确写了 login information is valid for up to 12 hours after which you must login again。到期后 npm 访问会失去认证,重新执行一次 login 即可。

如果不想真正修改本地配置、只想确认将要执行的命令,可以加 --dry-run 预演,再按上面的实际命令执行。更多 npm 配置 CodeArtifact 的背景,可参考 AWS CodeArtifact User Guide 中 Getting started with the AWS CLI 一节(login 示例文档 中有指向)。

【免费下载链接】aws-cli Universal Command Line Interface for Amazon Web Services 【免费下载链接】aws-cli 项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值