当您使用第三方应用连接到代码库时,您必须进行 Artifact Registry 身份验证。
您无需为 Cloud Build 或 Google Cloud 配置身份验证 Google Kubernetes Engine 和 Cloud Run 等运行时环境,但您应该 验证所需的权限 配置。
准备工作
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- (可选)为 gcloud CLI 命令配置默认值。
- 如果您要从 Windows 连接到代码库,请安装 PowerShell。
- 创建一个服务账号来代表您的应用执行操作。
- 如果您刚开始接触 npm,请参阅概览以了解限定范围的软件包以及身份验证设置的配置文件。
概览
Artifact Registry 支持以下身份验证方法。
- 使用凭据帮助程序
- 这是最灵活的方法。在 npm 配置中添加帮助程序时,Artifact Registry 会在环境中搜索服务账号凭据。
- 指定服务账号密钥作为凭据
- 如果应用不支持应用默认凭据,但支持使用用户名和密码进行身份验证,请使用此选项。
使用凭据帮助程序进行身份验证
google-artifactregistry-auth 是一个客户端库,用于获取 Artifact Registry 代码库的凭据。
Artifact Registry 会按以下顺序搜索凭据:
应用默认凭据 (ADC) 是一种按以下顺序查找凭据的策略:
在
GOOGLE_APPLICATION_CREDENTIALS
环境变量中定义的凭据。Compute Engine 的默认服务账号 Google Kubernetes Engine、Cloud Run、App Engine 或 Cloud Run 函数 提供什么。
Google Cloud CLI 提供的凭据,包括来自 命令
gcloud auth application-default login
。
GOOGLE_APPLICATION_CREDENTIALS
变量可让账号
身份验证,从而简化问题排查过程。如果
您未使用该变量,请确认 ADC 可能使用的所有账号
所需的权限。例如,Compute Engine 虚拟机、Google Kubernetes Engine 节点和 Cloud Run 修订版的默认服务账号对代码库拥有只读权限。如果您打算使用默认服务账号从这些环境中上传内容,则必须修改权限。
如需创建服务账号并设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量,请执行以下操作:
创建一个服务账号代表您的应用执行操作,或选择一个现有服务账号进行持续集成/持续交付自动化。
向服务账号授予特定的 Artifact Registry 角色,以提供代码库访问权限。
将服务账号密钥文件分配给变量
GOOGLE_APPLICATION_CREDENTIALS
,以便 Artifact Registry 凭据帮助程序可在与代码库连接时获取您的密钥。export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
其中,KEY-FILE 是服务账号密钥文件的路径。
如需配置身份验证,请执行以下操作:
运行以下命令以输出代码库配置:
gcloud artifacts print-settings npm [--project=PROJECT] \ [--repository=REPOSITORY] \ [--location=LOCATION] \ --scope=@SCOPE-NAME \
地点
- PROJECT 是项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
- REPOSITORY 是代码库的 ID。如果您配置了默认 Artifact Registry 代码库,则在命令中省略此标志时,系统会使用该代码库。
- LOCATION 是代码库的单区域或多区域位置。
SCOPE-NAME 是要与代码库关联的 npm 范围的名称。
使用镜重可确保您始终从正确的代码库发布和安装软件包。
未限定范围的软件包与您的默认 npm 注册表相关联,通常是 npm 公共注册表。如果您未指定范围,则返回的配置会将您的 Artifact Registry 代码库设置为默认注册表。如果您的 Node.js 项目需要从公共 npm 注册表中安装软件包, 您的 Artifact Registry 代码库
将返回的配置设置添加到 .npmrc 中 放到 Node.js 项目中。此文件通常与
package.json
位于同一目录中。请务必在发布的软件包的 Node.js 项目以及将从 npm 代码库安装依赖项的项目中添加这些设置。
如果您有其他要连接的 Node.js 代码库,请重复前面的步骤以获取设置,并将其添加到相应的
.npmrc
文件中。准备好连接代码库后,请获取访问令牌 进行身份验证。
每个 Artifact Registry Node.js 软件包代码库都与一个注册表端点 https://LOCATION-npm.pkg.dev/PROJECT/REPOSITORY
相关联
如果您没有使用 print-settings
命令指定范围,则可以运行以下命令:
以下命令可将范围与 Artifact Registry 相关联
存储库
npm config set @SCOPE_NAME:registry https://LOCATION-npm.pkg.dev/PROJECT/REPOSITORY/
获取访问令牌
访问令牌的有效期为 60 分钟。稍后生成访问令牌 然后再运行与代码库交互的命令
要获取令牌,请使用以下选项之一:
使用
npx
命令刷新访问令牌。确保用于连接到公共 npm 注册表的凭据位于用户的 npm 配置文件
~/.npmrc
中。在 Node.js 项目目录中运行以下命令。
npx google-artifactregistry-auth
如果您的 Artifact Registry 代码库已设为全局注册表,并且 软件包未限定作用域,请改用以下命令,以便 命令可以从公共 npm 注册表中下载凭据帮助程序 而不是 Artifact Registry 代码库
npm_config_registry=https://registry.npmjs.org npx google-artifactregistry-auth
将脚本添加到项目的
package.json
文件中。"scripts": { "artifactregistry-login": "npx google-artifactregistry-auth" }
在 Node.js 项目目录中运行该脚本。
npm run artifactregistry-login
Artifact Registry 可读取
项目 .npmrc
文件,并使用这些文件将令牌凭据添加到您的用户
.npmrc
文件。将令牌存储在用户 .npmrc
文件中可将凭据与源代码和源代码控制系统隔离。
--repo-config
是包含代码库设置的.npmrc
文件。 如果您未指定此标志,则默认位置为当前目录。--credential-config
是您要存储的.npmrc
文件的路径 写入访问令牌。默认值为您的用户.npmrc
文件。
配置密码身份验证
当 Node.js 应用需要使用指定的用户名和密码进行身份验证时,请使用此方法。
服务账号密钥是长期有效的凭据。请使用以下准则来限制对代码库的访问:
- 请考虑使用专用服务账号与代码库进行交互。
- 授予服务账号所需的最低 Artifact Registry 角色。例如,将 Artifact Registry Reader 分配给仅用于下载工件的服务账号。
- 如果您组织中的群组需要不同级层的访问权限来访问特定代码库,请在代码库级层而不是项目级层授予访问权限。
- 按照管理凭据的最佳做法操作。
如需创建服务账号并配置身份验证,请执行以下操作:
创建一个服务账号代表您的应用执行操作,或选择一个现有服务账号用于进行自动化。
您需要服务账号密钥文件所在的位置,才能使用 Artifact Registry 设置身份验证。对于现有账号,您可以在“服务账号”页面上查看密钥和创建新密钥。
授予特定的 Artifact Registry 角色 以提供代码库访问权限。
如果要在当前 gcloud CLI 会话中激活服务账号,请运行以下命令:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
地点
- ACCOUNT 是用户账号或服务账号。
- KEY-FILE 是服务账号 JSON 密钥文件的路径。
运行以下命令以输出代码库配置:
gcloud artifacts print-settings npm [--project=PROJECT] \ [--repository=REPOSITORY] [--location=LOCATION] --scope=@SCOPE-NAME --json-key=KEY-FILE
地点
- PROJECT 是项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
- REPOSITORY 是代码库的 ID。如果您配置了默认 Artifact Registry 代码库,则在命令中省略此标志时,系统会使用该代码库。
- LOCATION 是代码库的单区域或多区域位置。
SCOPE-NAME 是要与代码库关联的 npm 范围的名称。
使用范围可确保您始终从 正确的代码库。
未限定范围的软件包通常与您的默认 npm 注册表相关联 npm 公共注册表。如果您未指定 一个范围,返回的配置会设置 Artifact Registry 用作默认注册表如果您的 Node.js 项目需要同时从公共 npm 注册表和 Artifact Registry 代码库安装软件包,则可能会导致问题。
KEY-FILE 是服务账号 JSON 密钥文件的路径。
将返回的配置设置添加到 .npmrc 中 放到 Node.js 项目中。此文件通常与
package.json
位于同一目录中。请务必将这些设置添加到 适用于您发布的软件包的 Node.js 项目以及 将通过 npm 代码库安装依赖项。如果您有其他要连接的 Node.js 代码库,请重复前面的步骤以获取设置,并将其添加到
.npmrc
文件中。