当您使用第三方应用连接到代码库时,您必须进行 Artifact Registry 身份验证。
您无需为 Cloud Build 或 Google Cloud 运行时环境(例如 Google Kubernetes Engine 和 Cloud Run)配置身份验证,但应 验证是否已配置所需的 权限 。
Node.js 支持两种方法来对向 Artifact Registry 代码库发出的请求进行身份验证:
准备工作
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI: 初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。
- (可选)为 gcloud CLI 命令配置默认值。
- 如果您要从 Windows 连接到代码库,请安装 PowerShell。
- 创建一个服务帐号来代表您的应用执行操作。
- 如果您刚开始接触 npm,请参阅概览以了解限定范围的 软件包以及身份验证设置的配置文件。
生成用于身份验证的令牌
如需在 Artifact Registry 中对软件包进行身份验证,您必须先生成身份验证令牌。然后,当您从软件包向 Artifact Registry 发出请求时,可以使用此令牌。
您可以使用 Google Cloud 在外部生成 oauth2 访问令牌或
oauth2l 令牌 Google Cloud。
访问令牌在 60 分钟内有效。请在运行与代码库交互的命令之前生成访问令牌。如果您的访问令牌已过期,则必须生成新的访问令牌。
使用 gcloud 生成令牌
如需使用 Google Cloud生成 oauth2 访问令牌,请运行以下
命令:
export ACCESS_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
现在,当您从 Node.js 软件包向 Artifact Registry 发出请求时,可以引用 ACCESS_TOKEN。
在不使用 gcloud 的情况下生成令牌
如需仅使用 oauth2l CLI 生成访问令牌,请执行以下操作:
运行以下命令以安装最新版本的
oauth2l:go install github.com/google/oauth2l@latest运行以下命令:
export ACCESS_TOKEN="oauth2l fetch --scope cloud-platform"Google Cloud 会生成 SHA256 哈希令牌并将其存储在
ACCESS_TOKEN变量中。现在,当您从 Node.js 软件包向 Artifact Registry 发出请求时,可以引用ACCESS_TOKEN。
使用服务帐号密钥配置密码身份验证
当 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 密钥文件的路径。
将返回的配置设置添加到 Node.js 项目中的 .npmrc 配置文件。此文件通常与
package.json位于同一目录中。请确保将这些设置添加到 Node.js 项目中,以便您发布的软件包以及将从 npm 代码库安装依赖项的项目都能使用这些设置。如果您有其他要连接的 Node.js 代码库,请重复前面的步骤以获取设置,并将其添加到
.npmrc文件中。