连接器仓库充当上游来源的代理,有助于确保所有请求都由上游来源处理。与远程制品库不同,连接器制品库不会缓存制品。因此,如果您需要对上游来源进行全面审核,或者必须遵守禁止缓存制品的第三方政策,则连接器代码库非常有用。
本页介绍了如何创建 Artifact Registry 连接器代码库。
支持的连接器格式
Artifact Registry 仅支持 Docker 格式的连接器代码库。
准备工作
- 启用 Artifact Registry API,并安装 Google Cloud CLI。
- 可选:为 gcloud CLI 命令配置默认值。
- 如果您需要使用客户管理的加密密钥 (CMEK) 来加密代码库内容,请在 Cloud KMS 中为代码库创建并启用密钥。
启用 Secret Manager API。
gcloud services enable secretmanager.googleapis.com \ --project=PROJECT_ID如果 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 密钥。
控制台
在 Google Cloud 控制台中打开代码库页面。
点击创建代码库。
指定代码库名称。对于项目中的每个代码库位置,代码库名称不得重复。
在格式部分,选择 Docker。
在代码库模式部分中,选择连接器。
在连接器代码库来源部分,选择以下选项之一:
- Docker Hub:连接器使用 Docker Hub (
https://docker.io) 作为上游代码库。 - 自定义:连接器使用其他 Docker 上游网址作为上游代码库。
- Docker Hub:连接器使用 Docker Hub (
如果您选择自定义,请在自定义代码库字段中输入完整的代码库网址。创建代码库后,网址便无法更改。
如需查看一些常见的上游网址示例,请参阅自定义上游。
在连接器仓库身份验证模式部分中,输入以下内容:
- 上游代码库的用户名。
- 用于在 Secret Manager 中存储凭据的 Secret。
您可以在创建代码库后修改这些值。
在位置类型部分中,选择代码库的位置:
选择位置类型:区域或多区域。位置列表会更改以反映您的选择。
在区域或多区域列表中,选择一个位置。
如需了解位置类型和支持的位置,请参阅代码库位置
为代码库添加说明。说明有助于您了解代码库的用途及其包含的工件类型。
请勿包含敏感数据,因为代码库说明不会加密。
如果您想使用标签来整理代码库,请点击添加标签,然后输入标签的键值对。您可以在创建代码库后添加、修改或移除标签。
在加密部分中,选择代码库的加密机制。
- Google-managed encryption key - 使用 Google-owned and Google-managed encryption key加密代码库内容。
- 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密代码库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK。
在 Artifact Analysis 部分中,选择漏洞扫描设置:
已启用 - 允许在此代码库中进行扫描。必须在您的项目中启用 Container Scanning API。
当您启用 Container Scanning API 后,系统会立即开始计费。在项目上启用 Container Scanning API 后,系统会为所有新旧代码库启用漏洞扫描功能。当您将映像推送到 Artifact Registry 时,Artifact Analysis 会自动对其进行扫描。
已停用 - 防止在此代码库中进行扫描。如果您的项目已启用 Container Scanning API,系统会继续扫描其他代码库,但会排除此代码库。
如需详细了解漏洞扫描选项,请参阅启用和停用自动扫描。
点击创建。
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.
创建代码库后,请执行以下操作:
- 授予对代码库的访问权限。
- 配置 Docker、软件包管理器和其他第三方客户端以向代码库进行身份验证。
- 配置 Artifact Registry 连接器代码库以向其上游来源进行身份验证。
修改代码库说明
您可以通过 Google Cloud 控制台或 gcloud CLI 更改代码库说明。
控制台
在 Google Cloud 控制台中打开代码库页面。
在代码库列表中,选择相应代码库,然后点击修改代码库。
修改代码库说明,然后点击保存。
gcloud
如需更新代码库说明,请运行以下命令:
gcloud artifacts repositories update REPOSITORY \
--project=PROJECT \
--location=LOCATION \
--description="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-project 中 us-east1 内连接器代码库的设置:
gcloud artifacts vpcsc-config describe \
--project=my-project \
--location=us-east1
允许访问上游来源
如需允许访问指定位置的上游来源,请运行以下命令:
gcloud artifacts vpcsc-config allow \
--project=PROJECT_ID \
--location=LOCATION
例如,使用以下命令可允许项目 my-project 中 us-east1 的所有连接器代码库访问边界之外的上游来源:
gcloud artifacts vpcsc-config allow \
--project=my-project \
--location=us-east1
拒绝访问上游来源
如需拒绝访问指定位置的上游来源,请运行以下命令:
gcloud artifacts vpcsc-config deny \
--project=PROJECT_ID \
--location=LOCATION
例如,使用以下命令可阻止项目 my-project 中 us-west1 内的所有连接器代码库访问边界外的上游来源:
gcloud artifacts vpcsc-config deny \
--project=my-project \
--location=us-west1
后续步骤
- 详细了解 Artifact Registry 连接器代码库。
- 向来源上游验证连接器代码库的身份。