借助 Artifact Registry,您可以存储不同的工件类型 在单个项目中创建多个仓库,并将特定的 单区域或多区域 每个仓库本页面介绍了可帮助您规划代码库位置和组织的注意事项。
在创建代码库时,请考虑创建工件的内部过程和工件消费者的使用情况。
代码库格式
每个代码库都与特定的工件格式相关联。例如,Docker 代码库用于存储 Docker 映像。您可以在以下位置为每种格式创建多个代码库: 同一个 Google Cloud 项目
代码库模式
仓库模式有多种。每种模式都有不同的用途,因此在创建代码库后,您无法更改代码库模式。
标准仓库
标准代码库是 私有工件您可以使用 并使用 Artifact Analysis 扫描漏洞 和其他元数据。
如需创建标准代码库,请按照创建标准代码库中的步骤操作。
远程仓库
远程仓库是只读仓库,充当存储 来自以下上游来源的工件:
- 标准 Artifact Registry 制品库。
- 外部源代码,如 Docker Hub、Maven Central、Python 软件包 Index (PyPI)、Debian 或 CentOS。
您首次请求工件版本时,代码库会从上游源代码下载该版本,并缓存其副本。远程仓库提供 缓存副本。
远程存储库缩短了延迟时间,并提高了构建和 Google Cloud 上的部署您还可以使用工件分析来扫描缓存的软件包,以查看是否存在漏洞和其他元数据。
如需详细了解远程仓库,请参阅远程仓库概览。如需创建远程仓库,请执行以下操作: 按照创建远程代码库中的步骤操作。
虚拟仓库
一个只读存储库,可用作从一个或多个上游代码库下载、安装或部署相同格式工件的单一接入点。上游代码库可以是标准代码库、远程代码库或虚拟代码库。
虚拟仓库可简化工件使用方的客户端配置。您还可以通过将上游政策配置为优先使用包含私有工件的代码库,而不是缓存公共工件的远程代码库,来缓解依赖项混淆攻击。
如需详细了解虚拟代码库,请参阅 虚拟代码库概览。如需创建虚拟代码库 按照创建虚拟代码库中的步骤操作。
代码库使用示例
下图展示了您可以将不同模式的代码库搭配使用的方式之一。此图显示了涉及两个操作系统的 Google Cloud 项目。在开发项目中,开发者会构建 应用。在单独的运行时项目中,另一个 build 会创建包含应用的容器映像,以便部署到 Google Kubernetes Engine。
在开发项目中,Java 开发团队使用 Cloud Build 构建 Java 应用。
- 构建可以使用 存储库虚拟仓库通过远程仓库提供依赖项 它是 Maven Central 的缓存代理。
- Cloud Build 将软件包上传到标准 Maven 制品库 组件项目中
在运行时项目中,Cloud Build 会将 Java 应用封装到容器中。
此构建使用 Maven 虚拟代码库下载应用。通过 虚拟仓库通过 开发项目。该 build 还可以从同一虚拟代码库下载公共 Java 依赖项。
在运行时项目中,Cloud Build 会将构建的容器映像上传到标准 Docker 代码库。
GKE 从 Docker 虚拟代码库拉取映像。
- 上游标准 Docker 代码库提供私有映像,例如 容器化的 Java 应用
- 上游远程仓库提供供 GKE 来自 Docker Hub 的请求
在此示例中,所有代码库、build 和 GKE 集群 同一区域内的为 Google Cloud 服务使用同一位置 具有代码库位置中描述的优势。
存储库位置
您可以在支持的组织环境中创建一个或多个代码库 单区域或多区域 。良好的代码库位置可以让数据使用者在延迟时间、可用性和带宽费用之间取得平衡。您的组织可能还有特定的合规性要求。
位置注意事项
在与其他 Google Cloud 服务相同的区域中创建代码库 具有诸多优势:
通过创建代码库减少延迟和网络出站流量费用 运行 GKE、Cloud Run、 Cloud Build 和与之交互的其他 Google Cloud 服务 代码库从 Artifact Registry 到同一区域内其他 Google Cloud 服务的出站流量不收费。
虽然从多区域流向相应区域中的 Google Cloud 服务的出站流量不收费,但此价格仅适用于一小部分区域。
- 对于
us
多区域,出站流量到美国的某个区域,例如 对于加拿大或南美的任何区域,无需支付us-central
。 - 对于
asia
多区域,发往亚洲各区域的出站流量,例如 不收取asia-northeast1
,但发往澳大利亚各区域的出站流量需付费 。
- 对于
只有当容器映像存储在与工作负载位于同一区域的 Artifact Registry 代码库中,或者存储在与工作负载位于同一区域的多区域中时,您才能在 GKE 和 Dataproc Serverless 中使用映像流式传输。图像流式传输可减少 使用较大的容器时,工作负载初始化时间会大幅增加 因为工作负载可以在整个映像下载完毕之前启动。
考虑 Google Cloud 外部消费者的位置。例如,如果您位于澳大利亚的开发者团队需要将工件从 Artifact Registry 下载到其本地工作站,那么与位于其他大陆的代码库相比,位于澳大利亚区域的代码库可以缩短延迟时间并降低出站流量费用。
限制代码库位置
如果您需要遵守要求您存储 特定区域的数据,您可以加入 Google Cloud 中的资源位置限制条件 组织政策仅允许在合规区域创建代码库。 仅当您添加限制条件后,Artifact Registry 才会强制执行该限制条件 。如果您在不合规的位置有现有代码库,则必须自行将工件移至合规位置的代码库,然后删除不合规的代码库。
清理政策
Artifact Registry 清理政策定义了自动删除的条件 您不再需要的工件版本或保留您所需的工件 可以无限期存储
如果您存储了多个版本的工件,但清理政策会非常有用, 只需保留您发布为正式版的特定版本即可。您可以定义删除政策(包含用于删除工件的条件),以及保留政策(包含用于保留工件的条件)。
工件版本同时符合删除政策和保留政策的条件 则 Artifact Registry 会应用保留政策。
删除政策
删除政策会删除与以下必需条件匹配的工件:
标记状态:指明政策是否应检查被标记的制品或 未标记工件。将映像推送到或从代码库中拉取映像时,系统会为工件添加标记。如需详细了解 Docker 标记,请参阅容器概念。
- 任何标记状态:忽略标记状态,并同时应用于带标记和不带标记的工件。
- 已标记:仅适用于已标记的工件。
- 未标记:仅适用于未标记的工件。
不支持代码的格式会被视为
untagged
。在启用了不可变标记的代码库中,无法删除添加了标记的工件。有关 有关适用于清理政策的标记状态的信息,请参阅 TagState 参考文档。
以下是定义删除政策的可选方法:
- 代码前缀:代码前缀的逗号分隔列表。例如,前缀
test
和staging
会与标记为testenv
和staging-1.5
的图片匹配。tagState
必须设置为TAGGED
表示使用标记前缀。- 版本前缀:- 是工件版本前缀的逗号分隔列表。例如,
v1
、v2
将与版本v1.5
、v2.0alpha
和v10.2
匹配。
- 版本前缀:- 是工件版本前缀的逗号分隔列表。例如,
- 软件包前缀:工件名称前缀列表。您可以输入
在前缀之间按
Enter
或,
即可添加多个前缀。 例如,red, blue
会创建两个前缀red
和blue
,并与工件名称red-team
、redis
和bluebird
匹配。 - 早于:是指工件版本上传到代码库后的最短时间,以时长指定。例如,
30d
为 30 天。您可以指定时长(以秒为单位) 分钟、小时或天,分别附加s
、m
、h
或d
。 - 晚于:是指工件版本上传到代码库后的最长时间,以时长指定。例如,
30d
为 30 天。
保留政策
保留政策可让制品保持与删除政策相同的条件,或 一定数量的最新版本
例如,假设有一个包含以下工件的代码库:
IMAGE: us-west1-docker.pkg.dev/my-project/release-xyz-v1
DIGEST: sha256:1b0a26bd07a3d17473d8d8468bea84015e27f87124b2831234581bce13f61370
TAGS:
CREATE_TIME: 2023-06-19T18:59:09
UPDATE_TIME: 2023-06-19T18:59:10
IMAGE: us-west1-docker.pkg.dev/my-project/release-xyz-v2
DIGEST: sha256:6e494387c901caf429c1bf77bd92fb82b33a68c0e19f123456a3ac8d27a7049d
TAGS: latest
CREATE_TIME: 2023-06-19T18:59:09
UPDATE_TIME: 2023-06-19T18:59:09
IMAGE: us-west1-docker.pkg.dev/my-project/release-v2
DIGEST: sha256:6e494387c901caf429c1bf77bd92fb82b33a68c0e19f123456a3ac8d27a7049d
TAGS: latest
CREATE_TIME: 2023-06-19T18:59:09
UPDATE_TIME: 2023-06-19T18:59:09
如果您的保留最新版本政策设为保留 3 个版本
与软件包前缀匹配的软件包:{release-xyz}
(仅限)
release-xyz-v1
和 release-xyz-v2
会保留。
由删除政策触发的删除操作会计入您的 Artifact Registry 每个项目的删除请求配额。
如需创建清理政策并将其应用于代码库,请参阅配置清理政策。
gcr.io 网域支持
Artifact Registry 支持在 gcr.io
网域上托管映像。如果您
从 Container Registry 转移到 Artifact Registry 时
gcr.io 代码库 Artifact Registry,以最大限度地减少对现有资源的更改
自动化和工作流。这些代码库提供:
- 将请求重定向到
gcr.io
网域。 - 在将第一个映像推送到 gcr.io 主机时创建 gcr.io 代码库,以便与 Container Registry 行为保持兼容。
如需了解详情,请参阅 转换为具有 gcr.io 网域支持的代码库
项目结构
资源层次结构是用于整理资源的方式 跨 Google Cloud 项目。您选择的结构取决于 数据治理要求、信任边界和团队等因素 结构。
在多项目组织中设置代码库有两种常用方法。
- 集中管理代码库
- 在单个项目中创建所有代码库,然后授予对 在代码库级别添加其他项目的主账号。如果单个人或团队负责整个组织的代码库管理和代码库访问权限,这种方法会更有效。
- 它还可以简化虚拟代码库或 Software Delivery Shield 等解决方案的设置,因为您只需启用和管理 Artifact Registry 的一个实例即可。
- 项目专用代码库
- 在项目中创建用于存储和下载工件的代码库。这个 数据治理政策、 信任边界,需要更多项目级隔离和控制 资源。
访问权限控制
除非 为代码库配置公共访问权限。您可以在项目或代码库级层授予权限。
某些 Google Cloud 服务使用具有对同一 Google Cloud 项目中的代码库的默认权限的默认服务账号。不过,这些默认值可能不适合您的软件开发流程,也可能不符合贵组织的安全或政策要求。如果满足以下条件,您的代码库管理员必须明确向这些服务授予对代码库的访问权限:
- Artifact Registry 与与其交互的服务位于不同的项目中。
- 您将自定义 IAM 角色与默认服务账号搭配使用,而不是使用预定义角色。
- 您未使用 Google Cloud 服务的默认服务账号。
- 您正在设置虚拟代码库。您必须明确授予 Artifact Registry 服务账号对上游的访问权限 代码库
对于需要访问代码库的其他主账号,您的代码库 管理员必须授予访问权限。遵循最低安全原则 权限,即授予最小必需权限。例如:
- 您需要将 Artifact Registry 中的容器映像部署到多个不同项目中的 GKE 集群。节点的服务账号 这些集群中的对象仅需要代码库的读取权限。
- 您可以创建一个开发代码库来存放正在开发的应用,并创建一个生产代码库来存放已发布的应用。开发者需要对开发代码库拥有读写权限, 拥有对生产代码库的只读权限。
- 您有一个包含示例应用的演示版代码库。您的销售团队只需要拥有下载演示版的只读权限。
限制制品下载
您可以使用下载规则限制工件下载。借助下载规则,您可以允许或禁止从代码库和软件包下载工件。您还可以设置条件,将规则应用于特定代码 或版本。
如需详细了解下载规则的运作方式,请参阅限制工件下载 “控制访问权限和保护工件概览”部分。
数据加密
默认情况下,Google Cloud 会自动加密 使用 Google 拥有的密钥和 Google 管理的密钥。如果您有与保护数据的密钥相关的特定合规性或监管要求,则可以创建使用客户管理的加密密钥 (CMEK) 加密的代码库。
Artifact Registry 还支持组织政策限制条件 可能需要 CMEK 来保护资源。
标签和标记
标签提供了一种整理 Google Cloud 专属资源的方法 服务。在 Artifact Registry 中,您可以向代码库添加标签, 可以将它们归为一组,或按标签过滤代码库列表。例如,您可以使用标签按开发阶段或团队对代码库进行分组,以实现自动化或结算目的。如需详细了解如何创建和使用 代码库标签,请参阅为代码库添加标签。
您还可以将标记应用于代码库。虽然标签主要用于整理和过滤服务专用资源,但标记用于对 Google Cloud 组织中的政策进行程序化控制。有关 相关信息,请参阅标记代码库。