为 Helm 设置身份验证

本页介绍了如何配置 Helm 以通过 Artifact Registry 代码库进行身份验证。

准备工作

  1. 如果图表的代码库不存在, 创建一个新的代码库。选择 Docker 作为代码库格式。
  2. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init
  3. (可选)为 Google Cloud CLI 命令配置默认值
  4. 安装 Helm 3.8.0 或更高版本。在更早的 Helm 版本中,OCI 格式的图表只作为一项实验性功能提供。

    运行 helm version 以验证您的版本。

选择身份验证方法

在大多数情况下,我们建议您使用服务账号进行 Artifact Registry 身份验证。

您可以使用以下身份验证方法:

使用为 Docker 配置的 Artifact Registry 凭据
默认情况下,Helm 可以使用您为 Docker 使用的凭据进行身份验证。
访问令牌
应用默认凭据 提供短时间内有效的访问令牌 服务账号用于访问您的 Google Cloud 资源。
JSON 密钥文件

用户管理的密钥对,您可以将其用作服务账号的凭据。由于它是长期凭据,因此它是所有可用身份验证方法中最不安全的选项。

请尽可能使用访问令牌来降低 您的工件遭到未经授权的访问。

使用 Docker 配置

默认情况下,Helm 支持 Docker 配置文件 config.json 中的注册表设置。Helm 会在默认位置或 DOCKER_CONFIG 环境变量指定的位置查找注册表设置。

如果您使用凭据帮助程序配置了 Docker 以便与 Artifact Registry 进行身份验证,Helm 会将您现有的配置用于 Artifact Registry Docker 代码库。

使用访问令牌

访问令牌是一种短期令牌,用于提供对 Google Cloud 资源的访问权限。由于令牌只在短时间内有效,因此您应该在使用它连接 Artifact Registry 代码库之前的一个小时内进行申请。

Google Cloud 使用应用默认凭据获取访问令牌。

如需使用访问令牌,请执行以下操作:

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

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

    转到“服务账号”页面

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

  3. 将服务账号密钥文件分配给变量 GOOGLE_APPLICATION_CREDENTIALS,以便 Artifact Registry 凭据帮助程序可在与代码库连接时获取您的密钥。

    export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
    

    其中,KEY-FILE 是服务账号密钥文件的路径。

  4. 在使用 Docker 进行 Artifact Registry 身份验证时,获取访问令牌作为凭据。

    Linux/macOS

    运行以下命令:

    gcloud auth application-default print-access-token | helm registry login -u oauth2accesstoken \
    --password-stdin https://LOCATION-docker.pkg.dev
    

    Windows

    运行以下命令:

    gcloud auth application-default print-access-token
    ya29.8QEQIfY_...
    
    helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
    https://LOCATION-docker.pkg.dev
    

    地点

    • oauth2accesstoken 是使用 访问令牌。
    • gcloud auth application-default print-access-token 是用于获取服务账号访问令牌的 Google Cloud CLI 命令。您的访问令牌是进行身份验证的密码。
    • LOCATION 是 单区域或多区域 代码库的位置 图片的存储位置。

Helm 现已通过 Artifact Registry 身份验证。

使用 JSON 密钥文件

任何有权访问服务账号的有效私钥的人员都可以通过该服务账号访问资源。注意,密钥访问服务账号(以及服务账号可访问的数据)的生命周期与已下载密钥的用户的生命周期无关。

请使用以下准则来限制对代码库的访问:

  • 创建仅用于与代码库进行交互的专用服务账号。
  • 为服务账号所需的存取权限授予特定的 Artifact Registry 角色。例如,仅下载工件的服务账号只需要 Artifact Registry Reader 角色。
  • 在每个代码库(而不是项目级层)上为您的专用服务账号配置权限。然后,您可以根据代码库上下文指定访问权限。例如,用于开发构建的服务账号对于生产代码库可能拥有 Artifact Registry Reader 角色,对于临时代码库可能拥有 Artifact Registry Writer 角色。
  • 遵循管理服务账号的最佳实践

要创建仅用于 Artifact Registry 代码库的新服务账号和服务账号密钥,请执行以下操作:

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

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

    转到“服务账号”页面

  2. 您可以选择性地对密钥文件的所有内容采用 base64 编码。

    Linux

    base64 FILE-NAME > NEW-FILE-NAME
    

    macOS

    base64 -i FILE-NAME -o NEW-FILE-NAME
    

    Windows

    Base64.exe -e FILE-NAME > NEW-FILE-NAME
    

    其中 FILE-NAME 是原始密钥文件名, NEW-FILE-NAME 是您的 base64 编码密钥文件。

  3. 向服务账号授予适当的 Artifact Registry 角色,以提供代码库访问权限。

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

    Linux/macOS

    运行以下命令:

    cat KEY-FILE | helm registry login -u KEY-TYPE --password-stdin \
    https://LOCATION-docker.pkg.dev
    

    Windows

    运行以下命令:

    helm registry login -u KEY-TYPE --password-stdin https://LOCATION-docker.pkg.dev < KEY-FILE
    

    地点

    • KEY-TYPE 是以下值之一:
      • 如果您使用的是在创建文件时提供的 JSON 格式的服务账号密钥,则为 _json_key
      • 如果您已对文件的全部内容进行 base64 编码,则为 _json_key_base64
    • KEY-FILE 是 JSON 格式的服务账号密钥文件的名称。
    • LOCATION 是 单区域或多区域 代码库的位置 图片。

Helm 现已通过 Artifact Registry 身份验证。

后续步骤