当您使用第三方应用连接到代码库时,您必须进行 Artifact Registry 身份验证。
您无需为 Cloud Build 或 Google Cloud运行时环境(例如 Google Kubernetes Engine 和 Cloud Run)配置身份验证,但应验证是否已配置所需的权限。
Node.js 支持两种方法来验证对 Artifact Registry 代码库的请求:
准备工作
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
- (可选)为 gcloud CLI 命令配置默认值。
- 如果您要从 Windows 连接到代码库,请安装 PowerShell。
- 创建一个服务账号来代表您的应用执行操作。
- 如果您刚开始接触 npm,请参阅概览以了解限定范围的软件包以及身份验证设置的配置文件。
生成用于身份验证的令牌
如需在 Artifact Registry 中对软件包进行身份验证,您必须先生成身份验证令牌。然后,您可以在从软件包向 Artifact Registry 发出请求时使用此令牌。
您可以使用 Google Cloud 生成oauth2访问令牌,也可以在 Google Cloud之外生成oauth2l令牌。
访问令牌的有效期为 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文件中。