代码库概览

借助 Artifact Registry,您可以存储不同的工件类型;在单个项目中创建多个代码库,并将某个特定区域或多区域与每个代码库相关联。本页面介绍了可帮助您规划代码库位置和组织的注意事项。

在创建代码库时,请考虑创建工件的内部过程和工件消费者的使用情况。

代码库格式

每个代码库都与特定工件格式相关联。例如,Python 代码库用于存储 Python 软件包。您可以在同一 Google Cloud 项目中为每种格式创建多个代码库。

仓库模式

存储库模式有多种。每种模式都有不同的用途,因此在创建代码库后,您将无法更改代码库模式。

标准代码库
标准代码库是您的私有工件的常规 Artifact Registry 代码库。您可以直接通过这些代码库上传和下载工件,并使用 Artifact Analysis 扫描是否存在漏洞和其他元数据。
远程仓库

只读代码库,充当代理,存储来自预设外部来源(如 Docker Hub、Maven Central、Python 软件包索引 [PyPI]、Debian 或 CentOS)以及用户定义的来源的工件(对于受支持的格式)。首次请求工件版本时,代码库会从外部来源下载工件并缓存一个副本。再次请求相同版本时,代码库将提供缓存副本。

远程仓库可缩短延迟时间,提高在 Google Cloud 上进行构建和部署的可用性。您还可以使用 Artifact Analysis 扫描缓存的软件包是否存在漏洞和其他元数据。

虚拟代码库

只读代码库,充当从一个或多个上游代码库下载、安装和部署相同格式的工件的单一访问点。上游仓库可以是标准仓库、远程仓库或虚拟仓库。

虚拟代码库可简化工件使用方的客户端配置。您还可以配置上游政策,让包含私有工件的代码库优先于缓存公开工件的远程代码库,从而缓解依赖项混淆攻击

代码库用法示例

下图显示了将代码库以不同模式一起使用的多种可能方法之一。该图显示了两个 Google Cloud 项目的工作流。在开发项目中,开发者会构建 Java 应用。在一个单独的运行时项目中,另一个构建包含用于部署到 Google Kubernetes Engine 的应用的容器映像。

跨两个项目使用的标准代码库、虚拟代码库和远程代码库。

  1. 在开发项目中,Java 开发团队使用 Cloud Build 构建 Java 应用。

    • 构建可以使用虚拟代码库请求公共 Java 依赖项。虚拟代码库从远程代码库提供依赖项,远程代码库是 Maven Central 的缓存代理。
    • Cloud Build 将软件包上传到组件项目中的标准 Maven 制品库。
  2. 在运行时项目中,Cloud Build 将 Java 应用容器化。

    构建使用 Maven 虚拟代码库下载应用。虚拟代码库从开发项目中的标准代码库提供软件包。build 还可以从同一虚拟代码库下载公共 Java 依赖项。

  3. 在运行时项目中,Cloud Build 会将构建的容器映像上传到标准 Docker 代码库。

  4. GKE 从 Docker 虚拟代码库中拉取映像。

    • 上游标准 Docker 代码库提供私有映像,例如容器化 Java 应用。
    • 上游远程代码库提供 GKE 从 Docker Hub 请求的映像。

在此示例中,所有代码库、构建和 GKE 集群都位于同一区域中。为 Google Cloud 服务使用同一位置具有诸多优势,详见代码库位置

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 服务所在的区域中创建代码库有许多好处:

  • 在您运行 GKE、Cloud Run、Cloud Build 以及与代码库交互的其他 Google Cloud 服务的同一区域中创建代码库,从而缩短延迟时间和网络出站流量费用。从 Artifact Registry 到同一区域内其他 Google Cloud 服务的出站流量是免费的。

    虽然从多区域到相应区域中的 Google Cloud 服务的出站流量不收费,但此价格仅适用于有限的一组区域。

    • 对于 us 多区域,流向美国区域(例如 us-central)的出站流量不收费,流向加拿大或南美洲任何区域的出站流量是免费的。
    • 对于 asia 多区域,流向亚洲区域的出站流量(例如 asia-northeast1)不计费,但流向澳大利亚区域的出站流量费率计费。
  • 如果您的容器映像存储在工作负载所在区域或与您的工作负载所在区域对应的多区域位置中,则您只能在 GKEDataproc Serverless 中使用映像流式传输。使用较大的容器映像时,映像流式传输可以显著缩短工作负载初始化时间,因为工作负载可以在整个映像下载之前启动。

  • 考虑 Google Cloud 之外的使用方的位置。例如,如果您位于澳大利亚的开发者团队需要将工件从 Artifact Registry 下载到其本地工作站,则与位于另一个大洲的代码库相比,位于澳大利亚区域的代码库可以缩短延迟时间并产生更低的出站流量费用。

限制代码库位置

如果您需要遵守的法规或政策要求您将数据存储在特定区域中,则可以在 Google Cloud 组织政策中添加资源位置限制条件,仅允许在合规区域中创建代码库。只有在将限制条件添加到组织政策后,Artifact Registry 才会强制执行该限制条件。如果您的现有代码库位于不合规的位置,您必须自行将工件移动到合规位置的代码库,然后删除不合规的代码库。

项目结构

资源层次结构是您跨 Google Cloud 项目组织资源的方式。您选择的结构取决于数据治理要求、信任边界和团队结构等因素。

在多项目组织中设置代码库有两种常规方法。

集中管理代码库
在单个项目中创建所有代码库,然后在代码库级别向其他项目中的主帐号授予访问权限。当单个人员或团队在您的组织中处理代码库管理和代码库访问时,此方法会更有效。此外,它还可以简化虚拟代码库或 Software Delivery Shield 等解决方案的设置,因为您只需启用和管理 Artifact Registry 的单个实例。
项目专用代码库
在存储和下载工件的项目中创建代码库。如果您的数据治理政策或信任边界需要在项目级别对资源进行更多的分离和控制,那么就可能需要使用此方法。

访问权限控制

除非您将代码库配置为公开访问,否则只有拥有相应权限才能访问代码库。您可以在项目或代码库级别授予权限。

某些 Google Cloud 服务(例如 Cloud Build、Cloud Run 和 GKE)会使用默认服务帐号,这些帐号具有对同一 Google Cloud 项目中的代码库的默认权限。但是,这些默认值可能不适合您的软件开发过程,或者可能不符合组织中的安全或政策要求。在以下情况下,您的代码库管理员必须明确向这些服务授予对代码库的访问权限:

  • Artifact Registry 所在的项目与与其交互的服务不同。
  • 您将自定义 IAM 角色与默认服务帐号(而不是预定义角色)搭配使用。
  • 您没有使用 Google Cloud 服务的默认服务帐号。
  • 您正在设置虚拟代码库。您必须明确授予 Artifact Registry 服务帐号对上游代码库的访问权限。

对于需要访问代码库的其他主账号,您的代码库管理员必须授予访问权限。请遵循最小权限安全原则,授予所需的最低权限。例如:

  • 您可以将 Artifact Registry 中的容器映像部署到多个不同项目中的 GKE 集群。这些集群中节点的服务帐号只需要对代码库的读取权限。
  • 拥有一个用于开发应用的开发仓库和为已发布的应用准备的生产仓库。开发者需要拥有对开发代码库的读写权限以及对生产代码库的只读权限。
  • 您有一个包含示例应用的演示代码库。您的销售团队只需要拥有只读权限即可下载演示。

数据加密

默认情况下,Google Cloud 会使用 Google 管理的加密密钥自动加密静态数据。如果您对保护数据的密钥有特定的合规性或监管要求,您可以创建使用客户管理的加密密钥 (CMEK) 加密的代码库。

Artifact Registry 还支持可能需要 CMEK 来保护资源的组织政策限制条件

标签和标记

标签提供了一种整理 Google Cloud 服务专用资源的方法。在 Artifact Registry 中,您可以向代码库添加标签,以便将它们分组或按标签过滤代码库列表。例如,您可以使用标签按开发阶段或团队对代码库进行分组,以实现自动化或结算。如需详细了解如何创建和使用代码库标签,请参阅为代码库添加标签

您还可以将标记应用于代码库。标签主要用于整理和过滤服务专用资源,而标记则用于以编程方式控制整个 Google Cloud 组织的政策。如需了解详情,请参阅标记代码库

后续步骤