创建连接器代码库

连接器仓库充当上游来源的代理,有助于确保所有请求都由上游来源处理。与远程制品库不同,连接器制品库不会缓存制品。因此,如果您需要对上游来源进行全面审核,或者必须遵守禁止缓存制品的第三方政策,则连接器代码库非常有用。

本页介绍了如何创建 Artifact Registry 连接器代码库。

支持的连接器格式

Artifact Registry 仅支持 Docker 格式的连接器代码库。

准备工作

  1. 启用 Artifact Registry API,并安装 Google Cloud CLI。
  2. 可选:为 gcloud CLI 命令配置默认值
  3. 如果您需要使用客户管理的加密密钥 (CMEK) 来加密代码库内容,请在 Cloud KMS 中为代码库创建并启用密钥。
  4. 启用 Secret Manager API。

    gcloud services enable secretmanager.googleapis.com \
        --project=PROJECT_ID
    
  5. 如果 Artifact Registry 位于 VPC Service Controls 服务边界内,请启用 Access Context Manager API(如果尚未启用)。

    gcloud services enable accesscontextmanager.googleapis.com \
        --project=PROJECT_ID
    

所需的角色

如需获得管理代码库所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 创建连接器代码库并授予对各个代码库的访问权限:项目的 Artifact Registry Admin (roles/artifactregistry.admin)
  • 将上游代码库凭据保存在 Secret 版本中: 项目的 Secret Manager Admin (roles/secretmanager.admin)
  • 向 VPC Service Controls 服务边界之外的上游来源授予访问权限: 应用访问权限政策的资源所属组织的 Access Context Manager 编辑者 (roles/accesscontextmanager.policyEditor)

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建连接器代码库

创建连接器代码库时,您必须配置以下设置,这些设置在代码库创建后无法更改:

  • 工件格式,只能是 Docker。
  • 代码库模式设置为连接器。
  • 连接器仓库的上游来源。
  • 代码库位置
  • 使用 Google-owned and Google-managed encryption keys 或客户管理的加密密钥进行加密。Artifact Registry 默认使用Google-owned and Google-managed encryption keys 。

Artifact Registry 会强制执行组织政策限制条件,这些限制条件要求使用 CMEK 加密资源,或限制可用于 CMEK 保护的 Cloud KMS 密钥。

控制台

  1. 在 Google Cloud 控制台中打开代码库页面。

    打开“代码库”页面

  2. 点击创建代码库

  3. 指定代码库名称。对于项目中的每个代码库位置,代码库名称不得重复。

  4. 格式部分,选择 Docker

  5. 代码库模式部分中,选择连接器

  6. 连接器代码库来源部分,选择以下选项之一:

    • Docker Hub:连接器使用 Docker Hub (https://docker.io) 作为上游代码库。
    • 自定义:连接器使用其他 Docker 上游网址作为上游代码库。
  7. 如果您选择自定义,请在自定义代码库字段中输入完整的代码库网址。创建代码库后,网址便无法更改。

    如需查看一些常见的上游网址示例,请参阅自定义上游

  8. 连接器仓库身份验证模式部分中,输入以下内容:

    1. 上游代码库的用户名。
    2. 用于在 Secret Manager 中存储凭据的 Secret。

    您可以在创建代码库后修改这些值。

  9. 位置类型部分中,选择代码库的位置:

    1. 选择位置类型:区域或多区域。位置列表会更改以反映您的选择。

    2. 区域多区域列表中,选择一个位置。

    如需了解位置类型和支持的位置,请参阅代码库位置

  10. 为代码库添加说明。说明有助于您了解代码库的用途及其包含的工件类型。

    请勿包含敏感数据,因为代码库说明不会加密。

  11. 如果您想使用标签来整理代码库,请点击添加标签,然后输入标签的键值对。您可以在创建代码库后添加、修改或移除标签。

  12. 加密部分中,选择代码库的加密机制。

    • Google-managed encryption key - 使用 Google-owned and Google-managed encryption key加密代码库内容。
    • 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密代码库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK
  13. Artifact Analysis 部分中,选择漏洞扫描设置:

    • 已启用 - 允许在此代码库中进行扫描。必须在您的项目中启用 Container Scanning API。

      当您启用 Container Scanning API 后,系统会立即开始计费。在项目上启用 Container Scanning API 后,系统会为所有新旧代码库启用漏洞扫描功能。当您将映像推送到 Artifact Registry 时,Artifact Analysis 会自动对其进行扫描。

    • 已停用 - 防止在此代码库中进行扫描。如果您的项目已启用 Container Scanning API,系统会继续扫描其他代码库,但会排除此代码库。

      如需详细了解漏洞扫描选项,请参阅启用和停用自动扫描

  14. 点击创建

Artifact Registry 会创建代码库并将其添加到代码库列表中。

gcloud CLI

如需创建连接器代码库,请运行相应命令来创建 Docker 连接器代码库或自定义连接器代码库。

  gcloud artifacts repositories create CONNECTOR-REPOSITORY-NAME \
      --project=PROJECT_ID \
      --location=LOCATION \
      --description="DESCRIPTION" \
      --repository-format=docker \
      --mode=connector-repository \
      --remote-docker-repo="UPSTREAM-NAME" \
      --remote-username="USERNAME" \
      --remote-password-secret-version="PASSWORD" \

必须使用 --mode=connector-repository 标志将代码库定义为连接器代码库。--repository-format 必须是 docker

替换以下内容:

  • CONNECTOR-REPOSITORY-NAME:代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID:项目 ID。 如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION:制品库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • DESCRIPTION:可选。连接器仓库的说明。请勿包含敏感数据,因为代码库说明未加密。
  • UPSTREAM-NAME:预设的上游名称或用户定义的上游代码库网址。
  • USERNAME:可选。用于向上游代码库进行身份验证的用户名。
  • PASSWORD:可选。包含上游代码库密码的密文版本。

例如,以下命令会创建一个名为 my-connector-repo 的连接器代码库,该代码库会将上游 Jfrog 代码库连接到 Google Cloud 项目 my-project。上游代码库的完整网址为 https://my-account.jfrog.io/scoped-repo

gcloud artifacts repositories create my-connector-repo \
    --project=my-project \
    --location=us-east1 \
    --repository-format=docker \
    --mode=connector-repository \
    --remote-docker-repo=https://my-account.jfrog.io/scoped-repo \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1

如需详细了解如何向上游代码库进行身份验证,请参阅对连接器代码库进行身份验证以连接到上游来源

Terraform

使用 google_artifact_registry_repository 资源创建代码库。 必须使用 terraform-provider-google 版本 5.0.0 或更高版本。

如果您刚开始使用 Terraform for Google Cloud,请参阅 HashiCorp 网站上的使用入门 - Google Cloud 页面。

以下示例定义了提供方和连接器代码库,其中 Terra 资源名称为 my-repo

```hcl
provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "NAME" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "docker"
  mode          = "REMOTE_REPOSITORY"

  # Setting mode="REMOTE_REPOSITORY" and no_cache() together configures the repository as a connector-type repository.
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    docker_repository {
      public_repository = "DOCKER_HUB"
    }
    no_cache {}
  }
}
```

Replace the following:

  * `PROJECT-ID`: the Google Cloud project ID.
  * `NAME`: the name of your repository.
  * `LOCATION`: the repository location.
  * `REPOSITORY_ID`: the repository ID.
  * `DESCRIPTION`: optional. A description for the repository.
    Do not include sensitive data. Repository descriptions are
    not encrypted.
  * `KEY`: the name of the Cloud Key Management Service key, if you are using
    [customer-managed encryption keys][cmek] (CMEK) for encryption. Omit
    this argument to use the default setting, Google-managed encryption
    keys.
  * `CONFIG_DESCRIPTION`: optional. A description of the remote
    source.

创建代码库后,请执行以下操作:

修改代码库说明

您可以通过 Google Cloud 控制台或 gcloud CLI 更改代码库说明。

控制台

  1. 在 Google Cloud 控制台中打开代码库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 修改代码库说明,然后点击保存

gcloud

如需更新代码库说明,请运行以下命令:

gcloud artifacts repositories update REPOSITORY \
    --project=PROJECT \
    --location=LOCATION \
    --description="DESCRIPTION"

替换以下内容:

  • REPOSITORY:代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • PROJECT: Google Cloud项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 是代码库的单区域或多区域位置。 使用此标志可查看特定位置的代码库。如果您配置了默认位置,则可以省略此标志以使用默认值。
  • DESCRIPTION:代码库的说明。

服务边界内对上游来源的访问权限

VPC Service Controls 服务边界中的服务对边界外的资源具有受限的访问权限。

您可以允许或拒绝访问指定Google Cloud 项目和位置中的上游来源。

默认情况下,如果您未明确授予访问权限,Artifact Registry 会拒绝访问上游来源。

对于 Artifact Registry,所需的角色是 Artifact Registry Administrator (roles/artifactregistry.admin)。

查看上游来源的设置

如需查看特定项目和位置组合的配置,请运行以下命令:

gcloud artifacts vpcsc-config describe \
    --project=PROJECT_ID \
    --location=LOCATION

例如,使用以下命令可查看项目 my-projectus-east1 内连接器代码库的设置:

gcloud artifacts vpcsc-config describe \
    --project=my-project \
    --location=us-east1

允许访问上游来源

如需允许访问指定位置的上游来源,请运行以下命令:

gcloud artifacts vpcsc-config allow \
    --project=PROJECT_ID \
    --location=LOCATION

例如,使用以下命令可允许项目 my-projectus-east1 的所有连接器代码库访问边界之外的上游来源:

gcloud artifacts vpcsc-config allow \
    --project=my-project \
    --location=us-east1

拒绝访问上游来源

如需拒绝访问指定位置的上游来源,请运行以下命令:

gcloud artifacts vpcsc-config deny \
    --project=PROJECT_ID \
    --location=LOCATION

例如,使用以下命令可阻止项目 my-projectus-west1 内的所有连接器代码库访问边界外的上游来源:

gcloud artifacts vpcsc-config deny \
    --project=my-project \
    --location=us-west1

后续步骤