为 npm 配置向 Artifact Registry 的身份验证

当您使用第三方应用连接到代码库时,您必须进行 Artifact Registry 身份验证。

您无需为 Cloud Build 或 Google Cloud 运行时环境(例如 Google Kubernetes Engine 和 Cloud Run)配置身份验证,但应 验证是否已配置所需的 权限

Node.js 支持两种方法来对向 Artifact Registry 代码库发出的请求进行身份验证:

  • 访问令牌: 当应用中的身份验证由 人工用户管理时,请使用访问令牌。
  • 密码身份验证: 如果应用不支持应用默认凭据,但支持使用用户名和密码进行身份验证,请使用此选项。

准备工作

  1. 安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后, 初始化 Google Cloud CLI,方法是运行以下命令:

    gcloud init
  2. (可选)为 gcloud CLI 命令配置默认值
  3. 如果您要从 Windows 连接到代码库,请安装 PowerShell
  4. 创建一个服务帐号来代表您的应用执行操作。
  5. 如果您刚开始接触 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 生成访问令牌,请执行以下操作:

  1. 运行以下命令以安装最新版本的 oauth2l

    go install github.com/google/oauth2l@latest
    
  2. 运行以下命令:

    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 分配给仅用于下载工件的服务账号。
  • 如果您组织中的群组需要不同级层的访问权限来访问特定代码库,请在代码库级层而不是项目级层授予访问权限。
  • 按照管理凭据的最佳实践操作

如需创建服务帐号并配置身份验证,请执行以下操作:

  1. 创建一个服务 账号代表您的应用执行操作,或选择一个现有服务 账号用于进行自动化。

    您需要服务账号密钥文件所在的位置,才能使用 Artifact Registry 设置身份验证。对于现有账号,您可以在“服务账号”页面上查看密钥和创建新密钥。

    转到“服务账号”页面

  2. 向服务帐号授予特定的Artifact Registry 角色 ,以提供代码库访问权限。

  3. 如果要在当前 gcloud CLI 会话中激活服务帐号,请运行以下命令:

    gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
    

    其中

    • ACCOUNT 是用户账号或服务账号。
    • KEY-FILE 是服务帐号 JSON 密钥文件的路径。
  4. 运行以下命令以输出代码库配置:

    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 密钥文件的路径。

  5. 将返回的配置设置添加到 Node.js 项目中的 .npmrc 配置文件。此文件通常与 package.json 位于同一目录中。请确保将这些设置添加到 Node.js 项目中,以便您发布的软件包以及将从 npm 代码库安装依赖项的项目都能使用这些设置。

  6. 如果您有其他要连接的 Node.js 代码库,请重复前面的步骤以获取设置,并将其添加到 .npmrc 文件中。

后续步骤