存放區總覽

Artifact Registry 可讓您儲存不同類型的構件、在單一專案中建立多個存放區,並將特定區域或多地區位置與每個存放區建立關聯。本頁面將說明一些考量事項,協助您規劃存放區的位置和組織方式。

建立存放區時,請考量建立構件時的內部程序,以及構件使用者的使用情形。

存放區格式

每個存放區都與特定的構件格式相關聯。舉例來說,Docker 存放區會儲存 Docker 映像檔。您可以在同一個 Google Cloud 專案中為每個格式建立多個存放區。

存放區模式

有多種存放區模式。每個模式的用途不同,因此建立儲存庫後,就無法變更儲存庫模式。

標準存放區

標準存放區是私人構件適用的一般 Artifact Registry 存放區。您可以直接使用這些存放區上傳及下載構件,並使用 Artifact Analysis 掃描漏洞和其他中繼資料。

如要建立標準存放區,請按照「建立標準存放區」中的步驟操作。

遠端存放區

遠端存放區是唯讀存放區,可做為 Proxy 儲存下列上游來源的構件:

  • 標準 Artifact Registry 存放區。
  • 外部來源,例如 Docker Hub、Maven Central、Python Package Index (PyPI)、Debian 或 CentOS。

第一次要求容器版本時,存放區會從上游來源下載該版本,並快取副本。當再次要求相同版本時,遠端存放區會提供快取副本。

遠端存放區可縮短延遲時間,並提高 Google Cloud上建構作業和部署作業的可用性。您也可以使用「Artifact Analysis」掃描快取的套件,找出安全漏洞和其他中繼資料。

如要進一步瞭解遠端存放區,請參閱「遠端存放區總覽」。如要建立遠端存放區,請按照「建立遠端存放區」中的步驟操作。

虛擬存放區

唯讀存放區可做為單一存取點,用於從一個或多個上游存放區下載、安裝或部署相同格式的構件。上游存放區可以是標準、遠端或虛擬存放區。

虛擬存放區可簡化構件使用者的用戶端設定。您也可以設定上游政策,將私人構件儲存格優先於快取公開構件的遠端儲存格,藉此緩解依附元件混淆攻擊

如要進一步瞭解虛擬存放區,請參閱「虛擬存放區總覽」。如要建立虛擬存放區,請按照「建立虛擬存放區」中的步驟操作。

存放區使用範例

下圖顯示可同時使用不同模式的存放區的多種可能方式之一。此圖表顯示兩個Google Cloud 專案之間的工作流程。在開發專案中,開發人員會建構 Java 應用程式。在另一個獨立的執行階段專案中,另一個版本會建立含有應用程式的容器映像檔,以便部署至 Google Kubernetes Engine。

兩個專案中使用的標準、虛擬和遠端存放區。

  1. 在開發專案中,Java 開發團隊會使用 Cloud Build 建構 Java 應用程式。

    • 建構作業可以使用虛擬存放區要求公開的 Java 依附元件。虛擬存放區會提供遠端存放區的依附元件,該存放區是 Maven Central 的快取 Proxy。
    • Cloud Build 會將套件上傳至元件專案中的標準 Maven 存放區。
  2. 在執行階段專案中,Cloud Build 會將 Java 應用程式容器化。

    這個版本會使用 Maven 虛擬存放區下載應用程式。虛擬存放區會從開發專案中的標準存放區提供套件。建構作業也可以從相同的虛擬存放區下載公開 Java 依附元件。

  3. 在執行階段專案中,Cloud Build 會將已建構的容器映像檔上傳至標準 Docker 存放區。

  4. GKE 會從 Docker 虛擬存放區提取映像檔。

    • 上游標準 Docker 存放區會提供私人映像檔,例如容器化 Java 應用程式。
    • 上游遠端存放區會提供 GKE 向 Docker Hub 要求的映像檔。

在這個範例中,所有存放區、版本和 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 存放區,或是與工作負載所在地區相對應的多地區,您只能在 GKEDataproc Serverless 中使用映像串流。使用較大的容器映像檔時,映像檔串流可大幅縮短工作負載初始化時間,因為工作負載可以在整個映像檔下載完畢前啟動。

請考量消費者位於 Google Cloud以外的位置。舉例來說,如果澳洲的開發人員團隊需要從 Artifact Registry 下載構件到本機工作站,位於澳洲區域的存放區可減少延遲,且產生的傳出費用會比位於其他大洲的存放區低。

限制存放區位置

如果您需要遵守法規或政策,而這些法規或政策要求您將資料儲存在特定區域,您可以在 Google Cloud機構政策中加入資源位置限制,只允許在符合規定的區域建立存放區。您必須先在機構政策中加入限制,Artifact Registry 才會強制執行該限制。如果您在不相容的位置有現有的存放區,則必須自行將構件移至相容位置的存放區,然後刪除不相容的存放區。

資源清理政策

Artifact Registry 清理政策會定義自動刪除不再需要的構件版本,或保留要無限期儲存的構件。

如果您儲存許多構件版本,但只需要保留發布至正式環境的特定版本,清理政策就很實用。您可以定義刪除政策,其中包含刪除構件的條件,以及保留政策,其中包含保留構件的條件。

如果構件版本同時符合刪除政策和保留政策的條件,Artifact Registry 會套用保留政策。

刪除政策

刪除政策會刪除符合下列必要條件的構件:

  • 標記狀態:指出政策應檢查標記構件或未標記構件。將映像檔推送至或從存放區提取時,系統會為成果標記。如要進一步瞭解 Docker 標記,請參閱「容器概念」。

    • 任何標記狀態:忽略標記狀態,並套用至已標記和未標記的構件。
    • 已標記:僅適用於已標記的構件。
    • 未標記:僅適用於未標記的構件。

    不支援代碼的格式會視為 untagged。在已啟用不可變動標記的存放區中,標記的構件無法刪除。

    如要進一步瞭解標記狀態如何套用於清理政策,請參閱 TagState 參考資料

以下是定義刪除政策的選用方式:

  • 標記前置字元:以半形逗號分隔的標記前置字元清單。舉例來說,teststaging 前置字串會與標記 testenvstaging-1.5 的圖片相符。tagState 必須設為 TAGGED,才能使用代碼前置字串。
    • 版本前置字串:- 是以半形逗號分隔的構件版本前置字串清單。例如 v1v2 會比對版本 v1.5v2.0alphav10.2
  • 套件前置字串:是產物名稱前置字串的清單。您可以按下 Enter, 來輸入多個前置字串。舉例來說,red, blue 會建立兩個前置字串 redblue,並與 red-teamredisbluebird 的構件名稱相符。
  • 早於:是指自成果物版本上傳至存放區後的最低時間,以時間長度指定。舉例來說,30d 為 30 天。您可以分別附加 smhd,指定秒、分鐘、小時或天的時間長度。
  • Newer than:是指自成果物版本上傳至存放區後的最大時間,以時間長度指定。例如 30d 為 30 天。

Keep 政策

保留政策會保留符合刪除政策條件的構件,或是指定數量的最新版本。

舉例來說,假設存放區包含下列構件:

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-v1release-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 專案中整理資源的方式。您選擇的結構取決於資料治理要求、信任邊界和團隊結構等因素。

在多專案組織中設定存放區的方法有兩種。

集中管理存放區
在單一專案中建立所有存放區,然後在存放區層級授予其他專案的主體存取權。如果由單一人員或團隊負責管理整個機構的存放區管理和存放區存取權,這種做法會更有效。
此外,您只需啟用及管理單一 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 機構中以程式輔助方式控管政策。詳情請參閱「標記存放區」。

後續步驟