为 Go 设置身份验证

对 Artifact Registry 的身份验证对于上传和 下载打包的 Go 模块。将 Go 模块打包并上传到 Artifact Registry,gcloud CLI 工具会在 按以下顺序设置身份验证,除非 --json_key 标志,以使用服务账号密钥。

  1. 应用默认凭据 (ADC) 是一种按以下顺序查找凭据的策略:

    1. GOOGLE_APPLICATION_CREDENTIALS 环境变量中定义的凭据。

    2. Compute Engine、Google Kubernetes Engine、Cloud Run、App Engine 或 Cloud Functions 的默认服务账号提供的凭据。

  2. Google Cloud CLI 提供的凭据,包括来自 命令 gcloud auth application-default login

GOOGLE_APPLICATION_CREDENTIALS 变量可让账号 身份验证,从而简化问题排查过程。如果 您未使用该变量,请确认 ADC 可能使用的所有账号 所需的权限。例如, 默认服务账号,用于 Compute Engine 虚拟机、Google Kubernetes Engine 节点 Cloud Run 修订版本拥有对代码库的只读权限。如果您 打算使用默认服务账号从这些环境上传 您必须修改权限。

从以下位置下载打包的 Go 模块以用作依赖项时 Artifact Registry,Go 二进制文件使用 netrc 文件中的凭据 对 Artifact Registry 进行身份验证简化身份验证 使用 Go 凭据帮助程序来刷新 netrc 文件,用于向 Artifact Registry 进行身份验证。

netrc 文件的位置可以使用 netrc 环境变量进行设置。 如果未设置 NETRC 变量,则 go 命令将读取 $HOME/.netrc(在类似 UNIX 的平台上)或 %USERPROFILE%\_netrc(在 Windows 上)。

使用 Artifact Registry 时, 指定 netrc 文件中的凭据:

短期有效凭据(推荐)
使用 Artifact Registry Go 凭据帮助工具 使用 创建 Artifact Registry,或者手动添加 Artifact Registry 添加到 netrc 文件中。
使用服务账号密钥
如果您无法在自己的环境中将凭据用于以下用途时,请使用此选项 身份验证。您可以使用 Artifact Registry Go 凭据帮助程序工具,将 将未加密的服务账号密钥添加到 netrc 文件中,或手动将其添加到 文件。

准备工作

  1. 安装 前往 1.15 或更高版本。
  2. 安装 package-go-module gcloud CLI 插件:

    gcloud components install package-go-module

设置 Go 环境

  1. 指示 Go 从 Artifact Registry(公共 Go)下载模块 模块代理,然后是 source,顺序如下:

      export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
    

    替换以下内容:

    • LOCATION 是单区域级或多区域级 位置 代码库的位置
    • PROJECT 是您的 Google Cloud 项目 ID
    • REPOSITORY 是存储 文件包。
  2. 使用公共校验和数据库排除您的模块:

      export GONOSUMDB=MODULE_PATH_REGEX
    

    MODULE_PATH_REGEX 替换为您的模块路径或常规的 表达式。

    例如,如需使用以下代码将模块 example.com/foo 从检查中排除: 公共校验和数据库,请运行以下命令:

      export GONOSUMDB=example.com/foo
    

    以下命令会排除模块路径以 使用公共校验和数据库检查 example.com

      export GONOSUMDB=example.com/*
    

将 Artifact Registry 凭据添加到 netrc 文件

  1. 运行以下命令,将您的 Artifact Registry 凭据添加到 带有 Go 凭据帮助程序的 netrc 文件:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    其中:

    • LOCATION 是单区域级或多区域级 位置 创建 Deployment 清单要添加多个地理位置,请以逗号分隔 分隔列表。
    • PATH_TO_JSON_KEY(可选)。服务账号的路径 键。

      Go 凭据帮助程序会将身份验证设置添加到您的 netrc 文件中 复制到 Artifact Registry如果您传递 --json_key 标志,则系统会添加相应键 添加到 netrc 文件,以进行密码身份验证。

  2. 如果您使用短期有效凭据进行身份验证 到 Artifact Registry,您需要运行以下命令来刷新 OAuth 令牌 将模块用作依赖项之前,先使用以下命令:

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
    

使用服务账号密钥进行身份验证

如果您需要使用用户名和密码进行身份验证,请使用此方法。

服务账号密钥是长期有效的凭据。请使用以下准则来限制对代码库的访问:

  • 请考虑使用专用服务账号与代码库进行交互。
  • 授予服务账号所需的最低 Artifact Registry 角色。例如,将 Artifact Registry Reader 分配给仅用于下载工件的服务账号。
  • 如果您组织中的群组需要不同级层的访问权限来访问特定代码库,请在代码库级层而不是项目级层授予访问权限。
  • 按照管理凭据的最佳做法操作。

如需配置身份验证,请执行以下操作:

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

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

    转到“服务账号”页面

  2. 授予适当的 为服务账号授予 Artifact Registry 角色,以提供代码库 access.

  3. 运行以下命令,将您的服务账号凭据添加到 带有 Go 凭据帮助程序的 netrc 文件:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    其中:

    • LOCATION 是单区域级或多区域级 位置 创建 Deployment 清单要添加多个地理位置,请以逗号分隔 分隔列表。
    • PATH_TO_JSON_KEY 是服务账号 JSON 的路径 密钥文件

      Go 凭据帮助程序会将服务账号密钥添加到您的网络 文件用于密码身份验证。

您还可以将服务账号密钥手动添加到 netrc 文件中 格式如下:

machine LOCATION.pkg.dev
login json_key_base64
password KEY

替换以下内容:

  • LOCATION 替换为单区域级或多区域级 位置 创建 Deployment 清单
  • KEY 替换为您的服务账号密钥文件中的 base64 编码密钥。

将 Go 凭据帮助程序添加到 GONOPROXY

在使用 Go 凭据帮助程序之前,您需要将其添加到 GONOPROXY 列表中 强制使用 Go 直接从 GitHub 下载该应用。如果你还学习了 想要直接从来源下载的文件,可以用逗号分隔 如以下示例中所示:

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

其中 MODULE_PATH1MODULE_PATH2 是要下载的模块的模块路径 。

将 Go 凭据帮助程序添加到您的 GONOPROXY 列表并运行它以进行设置 您的凭据:

  1. 将 Go 凭据帮助程序添加到您的 GONOPROXY

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. 运行以下命令,将您的 Artifact Registry 凭据添加到 netrc 文件与 Go 模块包工具结合使用:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          [--json_key=path/to/service/account/key.json]
    

    其中 LOCATION 是单区域级或多区域级 位置 创建 Deployment 清单要添加多个地理位置,请以 逗号分隔列表。

    Go 凭据帮助程序会将身份验证设置添加到您的 netrc 文件中 复制到 Artifact Registry如果您传递 --json_key 标志,则系统会将键添加到 您的 netrc 文件,用于密码身份验证。

后续步骤