建立遠端存放區

本頁說明如何建立 Artifact Registry 遠端存放區。

遠端存放區會儲存來自下列上游來源的構件:

  • 標準 Artifact Registry 存放區。
  • 外部來源,例如:
    • CentOS
    • Debian
    • Docker Hub
    • GitHub Container Registry (ghcr.io)
    • Maven Central
    • Python 套件索引 (PyPI)

遠端存放區會做為上游來源的 Proxy,讓您對依附元件有更多控制權。首次要求套件版本時,Artifact Registry 會下載套件並快取在遠端存放區中。下次要求相同套件版本時,Artifact Registry 會提供快取副本。

如果您從上游來源要求不存在的構件,或該來源不包含您指定的版本,要求就會失敗。

如要進一步瞭解遠端存放區的運作方式,請參閱「遠端存放區總覽」。

事前準備

  1. 啟用 Artifact Registry,包括啟用 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
    
  6. 如要將 Artifact Registry 存放區設為上游,且該存放區與遠端存放區位於不同專案,則必須先授予遠端存放區專案的服務帳戶上游存放區專案的存取權,才能建立遠端存放區。

    授予服務代理人角色

    Artifact Registry 遠端存放區會使用 Artifact Registry 服務代理,向 Artifact Registry 上游存放區進行驗證。您必須授予服務代理程式上游存放區的讀取權限。

    如要將Artifact Registry 服務代理程式角色授予上游存放區的服務代理程式,請執行下列指令:

    
      gcloud artifacts repositories add-iam-policy-binding UPSTREAM_REPOSITORY \
          --member serviceAccount:service-REMOTE_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
          --location=LOCATION \
          --project=UPSTREAM_PROJECT_ID \
          --role roles/artifactregistry.serviceAgent
      

    請替換下列項目:

    • UPSTREAM_REPOSITORY 是上游存放區的 ID。 Artifact Registry 上游存放區必須是標準模式存放區。
    • REMOTE_PROJECT_NUMBER 是遠端存放區專案的專案編號。 Google Cloud
    • LOCATION 是存放區的區域或多區域位置
    • UPSTREAM_PROJECT_ID 是具有上游存放區的專案 ID。 Google Cloud

必要的角色

如要取得管理存放區所需的權限,請要求管理員授予您下列 IAM 角色:

  • 建立遠端存放區,並授予個別存放區的存取權: 專案的「Artifact Registry 管理員」 (roles/artifactregistry.admin)
  • 將上游存放區憑證儲存在密鑰版本中: 專案的 Secret Manager 管理員 (roles/secretmanager.admin)
  • 授予存取權給 VPC Service Controls 服務範圍外的上游來源: Access Context Manager 編輯者 (roles/accesscontextmanager.policyEditor) 在套用存取權政策的資源所屬機構中

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

建立遠端存放區

建立遠端存放區時,您必須設定下列設定,且存放區建立後就無法變更:

  • 構件格式
  • 存放區模式設為遠端。
  • 遠端存放區上游來源。
  • 存放區位置
  • 使用 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 控制台中開啟「Repositories」(存放區) 頁面。

    開啟「存放區」頁面

  2. 點選「Create Repository」

  3. 指定存放區名稱。專案中每個存放區位置的存放區名稱不得重複。

  4. 在「格式」部分,選取存放區格式。

  5. 在「存放區模式」區段中,選取「遠端」

  6. 在「遠端存放區來源」部分,選取下列其中一種方式來輸入上游存放區網址:

    • 為格式類型選取列出的預設上游來源。
    • 選取「自訂」,指定公開或私人存放區的完整網址 (須為支援的格式)。
    • 選取「Artifact Registry 存放區」,選取標準 Artifact Registry 存放區。
  7. 如果選取「自訂」,請在「自訂存放區」欄位中輸入完整的存放區網址。存放區建立後即無法變更網址。

    如需常見上游網址的範例,請參閱「自訂上游」。

  8. 如果選取「Artifact Registry repository」(Artifact Registry 存放區)

    1. 在「Artifact Registry repository」(Artifact Registry 存放區) 欄位中,輸入要做為上游的存放區完整名稱,或按一下「Browse」(瀏覽) 查看您有權檢視的存放區清單。系統只會列出與遠端存放區格式相同的存放區。
    2. 按一下要當做上游的存放區名稱。
    3. 按一下「選取」
  9. 如果您選取其中一個預設上游,或使用「Custom」(自訂)按鈕輸入完整網址,請在「Remote repository authentication mode」(遠端存放區驗證模式)中選擇下列其中一個選項:

    • 「已驗證」:輸入使用者名稱和密碼,向上游存放區驗證身分。
    • 未驗證:略過上游存放區的驗證。
  10. 如果選取「已驗證」,請輸入下列資訊:

    • 在「使用者名稱」欄位中,輸入上游存放區的使用者名稱。
    • 在「Secret」欄位中,輸入您儲存上游存放區密碼的密鑰版本。

    建立存放區後,您可以編輯這些值。如要進一步瞭解如何驗證遠端存放區上游,請參閱設定遠端存放區上游的驗證機制

  11. 在「位置類型」部分,選擇存放區的位置:

    1. 選擇位置類型:區域或多區域。地點清單會根據您的選取項目變更。

    2. 在「Region」(區域) 或「Multi-region」(多區域) 清單中,選取位置。

    如要瞭解位置類型和支援的位置,請參閱「存放區位置」一文。

  12. 為存放區新增說明。說明有助於識別存放區的用途,以及其中包含的構件類型。

    請勿輸入私密資料,因為存放區說明不會經過加密。

  13. 如要使用標籤整理存放區,請按一下「新增標籤」,然後輸入標籤的鍵/值組合。建立存放區後,您可以新增、編輯或移除標籤。

  14. 在「Encryption」(加密) 區段中,選擇存放庫的加密機制。

    • Google-managed encryption key - Encrypt repository content with a Google-owned and Google-managed encryption key.
    • 客戶管理的金鑰 - 使用您透過 Cloud Key Management Service 控制的金鑰,加密存放區內容。如需金鑰設定操作說明,請參閱「為存放區設定 CMEK」。
  15. 如要使用清理政策刪除未使用的構件,請在「清理政策」部分中執行下列操作:

    1. 選取「模擬測試」,即可在套用政策前進行測試。
    2. 按一下「新增政策」,即可在存放區中新增保留或刪除政策。
    3. 在「名稱」欄位中,為清除政策取個清楚易懂的名稱。
    4. 在「政策類型」部分,選取下列任一選項:

      • 條件式刪除:根據您定義的條件刪除構件。
      • 條件式保留:根據您定義的條件保留構件。
      • 保留最新版本:為每個套件保留特定數量的最新版本。

      如要進一步瞭解資源清理政策,請參閱「設定資源清理政策」。

  16. 在「Artifact Analysis」部分,選擇安全漏洞掃描設定:

    • 已啟用:允許掃描這個存放區。您必須在專案中啟用 Container Scanning API。

      啟用 Container Scanning API 後,系統會立即開始計費。在專案中啟用 Container Scanning API 後,所有新舊存放區都會啟用安全漏洞掃描功能。將映像檔推送至 Artifact Registry 時,Artifact Analysis 會自動掃描。

    • 已停用:禁止掃描這個存放區。如果專案已啟用 Container Scanning API,系統會繼續掃描其他存放區,但會排除這個存放區。

      如要進一步瞭解安全漏洞掃描選項,請參閱「啟用及停用自動掃描」。

  17. 點選「建立」

Artifact Registry 會建立存放區,並將其新增至存放區清單。

gcloud CLI

如要建立存放區,請執行適用於存放區格式的指令:

Docker

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=docker \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-docker-repo=UPSTREAM \
    --remote-username="USERNAME" \
    --remote-password-secret-version="PASSWORD"

更改下列內容:

  • REMOTE-REPOSITORY-NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID:專案 ID。如果省略這個旗標,系統會使用目前或預設專案。
  • LOCATION:存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會經過加密。
  • REMOTE-REPOSITORY-DESCRIPTION:選用。這個遠端存放區的外部存放區設定說明。
  • USERNAME:選用。用於向上游存放區驗證的使用者名稱。
  • PASSWORD:選用。包含上游存放區密碼的密鑰版本。
  • UPSTREAM,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。

    如果是 Artifact Registry 上游存放區,請按照下列格式設定存放區路徑: projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。

  • --disable-vulnerability-scanning:選用旗標,可將存放區設為停用自動安全漏洞掃描。

  • --allow-vulnerability-scanning:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。

舉例來說,下列指令會在 Google Cloud 專案 my-projectus-east1 區域中,建立名為 my-repo 的遠端存放區,並使用使用者名稱 my-username 和密碼版本 projects/my-project/secrets/my-secret/versions/1 向上游存放區進行驗證。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=docker \
    --location=us-east1 \
    --description="Remote Docker repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Docker Hub" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-docker-repo=DOCKER-HUB

如要進一步瞭解如何驗證 Docker Hub 上游存放區,請參閱「為 Docker Hub 設定遠端存放區驗證機制」。

Maven

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=maven \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-mvn-repo=UPSTREAM \
    --remote-username="USERNAME" \
    --remote-password-secret-version="PASSWORD"

更改下列內容:

  • REMOTE-REPOSITORY-NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID:專案 ID。如果省略這個旗標,系統會使用目前或預設專案。
  • LOCATION:存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會經過加密。
  • REMOTE-REPOSITORY-DESCRIPTION:選用。這個遠端存放區的外部存放區設定說明。
  • USERNAME:選用。用於向上游存放區驗證的使用者名稱。
  • PASSWORD:選用。包含上游存放區密碼的密鑰版本。
  • UPSTREAM,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。

    如果是 Artifact Registry 上游存放區,請按照下列格式設定存放區路徑: projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。

  • --disable-vulnerability-scanning:選用旗標,可將存放區設為停用自動安全漏洞掃描。

  • --allow-vulnerability-scanning:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。

舉例來說,下列指令會在 Google Cloud 專案 my-projectus-east1 區域中,建立名為 my-repo 的遠端存放區,並使用使用者名稱 my-username 和密碼版本 projects/my-project/secrets/my-secret/versions/1 向上游存放區進行驗證。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=maven \
    --location=us-east1 \
    --description="Remote Maven repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-mvn-repo=MAVEN-CENTRAL

npm

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=npm \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-npm-repo=UPSTREAM \
    --remote-username="USERNAME" \
    --remote-password-secret-version="PASSWORD"

更改下列內容:

  • REMOTE-REPOSITORY-NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID:專案 ID。如果省略這個旗標,系統會使用目前或預設專案。
  • LOCATION:存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會經過加密。
  • REMOTE-REPOSITORY-DESCRIPTION:選用。這個遠端存放區的外部存放區設定說明。
  • USERNAME:選用。用於向上游存放區驗證的使用者名稱。
  • PASSWORD:選用。包含上游存放區密碼的密鑰版本。
  • UPSTREAM,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。

    如果是 Artifact Registry 上游存放區,請按照下列格式設定存放區路徑: projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。

  • --disable-vulnerability-scanning:選用旗標,可將存放區設為停用自動安全漏洞掃描。

  • --allow-vulnerability-scanning:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。

舉例來說,下列指令會在 Google Cloud 專案 my-projectus-east1 區域中,建立名為 my-repo 的遠端存放區,並使用使用者名稱 my-username 和密碼版本 projects/my-project/secrets/my-secret/versions/1 向上游存放區進行驗證。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=npm \
    --location=us-east1 \
    --description="Remote npm repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Public npm registry" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-npm-repo=NPMJS

Python

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=python \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-python-repo=UPSTREAM \
    --remote-username="USERNAME" \
    --remote-password-secret-version="PASSWORD"

更改下列內容:

  • REMOTE-REPOSITORY-NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID:專案 ID。如果省略這個旗標,系統會使用目前或預設專案。
  • LOCATION:存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會經過加密。
  • REMOTE-REPOSITORY-DESCRIPTION:選用。這個遠端存放區的外部存放區設定說明。
  • USERNAME:選用。用於向上游存放區驗證的使用者名稱。
  • PASSWORD:選用。包含上游存放區密碼的密鑰版本。
  • UPSTREAM,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。

    如果是 Artifact Registry 上游存放區,請按照下列格式設定存放區路徑: projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。

  • --disable-vulnerability-scanning:選用旗標,可將存放區設為停用自動安全漏洞掃描。

  • --allow-vulnerability-scanning:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。

舉例來說,下列指令會在 Google Cloud 專案 my-projectus-east1 區域中,建立名為 my-repo 的遠端存放區,並使用使用者名稱 my-username 和密碼版本 projects/my-project/secrets/my-secret/versions/1 向上游存放區進行驗證。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=python \
    --location=us-east1 \
    --description="Remote Python repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="PyPI" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-python-repo=PYPI

Apt (預先發布版)

gcloud artifacts repositories create REMOTE_REPOSITORY_NAME \
    --project=PROJECT_ID \
    --repository-format=apt \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE_REPOSITORY_DESCRIPTION" \
    --remote-apt-repo=APT_REPOSITORY_BASE \
    --remote-apt-repo-path="APT_REPOSITORY_PATH"

更改下列內容:

  • REMOTE_REPOSITORY_NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID:專案 ID。如果省略這個旗標,系統會使用目前或預設專案。
  • LOCATION:存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION,並視需要提供存放區說明。 請勿輸入機密資料,因為存放區說明不會加密。
  • REMOTE_REPOSITORY_DESCRIPTION 選用:這個遠端存放區的外部存放區設定說明。
  • APT_REPOSITORY_BASE:支援的存放區基本名稱之一,列於 Apt 遠端存放區的「OS package supported upstreams」中。
  • APT_REPOSITORY_PATH:上游存放區的網址其餘部分,您想在存放區基底後快取至遠端存放區。

舉例來說,下列指令會建立名為 my-repo 的遠端存放區,以便在 Google Cloud 專案 my-projectus-east1 區域中,快取 Debian 穩定版存放區。上游存放區的完整網址為 http://deb.debian.org/debian/dists/stable

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=apt \
    --location=us-east1 \
    --description="Apt remote repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Debian stable distribution" \
    --remote-apt-repo=DEBIAN \
    --remote-apt-repo-path="debian/dists/stable"

Ruby (預先發布版)

gcloud artifacts repositories create REMOTE_REPOSITORY_NAME \
    --project=PROJECT_ID \
    --repository-format=ruby \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo=https://rubygems.org \
    --remote-repo-config-desc="REMOTE_REPOSITORY_DESCRIPTION" \

更改下列內容:

  • REMOTE_REPOSITORY_NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID 替換為包含存放區的專案 ID。
  • LOCATION:存放區的區域或多區域位置。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會經過加密。
  • REMOTE_REPOSITORY_DESCRIPTION (選用)。這個遠端存放區的外部存放區設定說明。

舉例來說,下列指令會在 Google Cloud 專案 my-projectus-central1 區域中,建立名為 my-ruby-repo 的遠端存放區。上游存放區的完整網址為 https://rubygems.org

gcloud artifacts repositories create my-ruby-repo \
    --project=my-project \
    --repository-format=ruby \
    --location=us-central1 \
    --description="Ruby remote repository" \
    --mode=remote-repository \
    --remote-repo=https://rubygems.org

Yum (預先發布版)

gcloud artifacts repositories create REMOTE_REPOSITORY_NAME \
    --project=PROJECT_ID \
    --repository-format=yum \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE_REPOSITORY_DESCRIPTION" \
    --remote-yum-repo=YUM_REPOSITORY_BASE \
    --remote-yum-repo-path="YUM_REPOSITORY_PATH"

更改下列內容:

  • REMOTE_REPOSITORY_NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID:專案 ID。如果省略這個旗標,系統會使用目前或預設專案。
  • LOCATION:存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會經過加密。
  • REMOTE_REPOSITORY_DESCRIPTION:選用。這個遠端存放區的外部存放區設定說明。
  • YUM_REPOSITORY_BASE:Yum 遠端存放區的作業系統套件支援的上游中列出的其中一個支援存放區基本名稱。
  • YUM_REPOSITORY_PATH:上游存放區的網址其餘部分,您想在存放區基底後快取至遠端存放區。

舉例來說,下列指令會在 Google Cloud 專案的 us-east1 區域中,為上游存放區 9-stream/BaseOs/x86_64/os 建立名為 my-repo 的 Yum 套件遠端存放區。my-project存放區的完整網址為 https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=yum \
    --location=us-east1 \
    --description="Yum remote repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="CentOS 8 x86" \
    --remote-yum-repo=CENTOS_STREAM \
    --remote-yum-repo-path="9-stream/BaseOs/x86_64/os"

Go

Artifact Registry Go 遠端存放區僅支援公開上游 https://proxy.golang

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=go \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --remote-go-repo=https://proxy.golang.org

更改下列內容:

  • REMOTE-REPOSITORY-NAME:存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。
  • PROJECT_ID:專案 ID。如果省略這個旗標,系統會使用目前或預設專案。
  • LOCATION:存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行 gcloud artifacts locations list 指令。
  • DESCRIPTION:選用。存放區的說明。 請勿提供私密資料。存放區說明不會加密。
  • REMOTE-REPOSITORY-DESCRIPTION:選用。這個遠端存放區的外部存放區設定說明。

舉例來說,下列指令會在 Google Cloud 專案 my-projectus-east1 區域中,建立名為 my-repo 的遠端存放區。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=go \
    --location=us-east1 \
    --description="Remote Go repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Go proxy" \
    --remote-go-repo=https://proxy.golang.org

Artifact Registry 會建立存放區。執行下列指令,查看存放區的說明:

gcloud artifacts repositories describe REMOTE_REPOSITORY_NAME \
    --location=LOCATION

Terraform

使用 google_artifact_registry_repository 資源建立存放區。 必須使用 terraform-provider-google 以上版本。5.0.0

如果您是第一次將 Terraform 與 Google Cloud搭配使用,請參閱 HashiCorp 網站上的「 Get Started - Google Cloud」頁面。

以下範例會定義供應商和遠端存放區,並使用 Terraform 資源名稱 my-repo

Docker

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

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "docker"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    docker_repository {
      public_repository = "DOCKER_HUB"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地點

  • PROJECT-ID 是 Google Cloud 專案 ID。
  • LOCATION 是存放區位置。
  • REPOSITORY_ID 是存放區 ID。
  • DESCRIPTION 是存放區的選填說明。 請勿加入私密資料,因為存放區說明不會加密。
  • KEY:如果您使用客戶自行管理的加密金鑰 (CMEK) 進行加密,這是 Cloud Key Management Service 金鑰的名稱。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。
  • CONFIG_DESCRIPTION 是遠端來源的選用說明。
  • DRY_RUN_STATUS:決定清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 * true:將政策設為模擬測試模式。模擬測試模式不會刪除任何構件。 * false:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱「設定資源清理政策」。
    • POLICY_NAME 是清除政策的名稱。
    • TAG_STATE 是要套用政策的代碼狀態。值為 taggeduntaggedanyany 適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。
    • TAG_PREFIXTAG_PREFIX_N 是要套用政策的代碼前置字串。
    • PKG_PREFIXPKG_PREFIX_N 是套件前置字元,可將政策套用至這些套件。
    • TIME_SINCE_UPLOAD 是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加 smhd,指定秒、分、時或天數的持續時間。
    • KEEP_COUNT 是指要保留在存放區中的構件版本數量 (以每個套件為單位)。

Maven

如果您未指定版本政策,Artifact Registry 預設會建立 Maven 存放區,儲存套件的快照和發布版本

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

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "maven"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    maven_repository {
      public_repository = "MAVEN_CENTRAL"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地點

  • PROJECT-ID 是 Google Cloud 專案 ID。
  • LOCATION 是存放區位置。
  • REPOSITORY_ID 是存放區 ID。
  • DESCRIPTION 是存放區的選填說明。 請勿加入私密資料,因為存放區說明不會加密。
  • KEY:如果您使用客戶自行管理的加密金鑰 (CMEK) 進行加密,這是 Cloud Key Management Service 金鑰的名稱。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。
  • CONFIG_DESCRIPTION 是遠端來源的選用說明。
  • DRY_RUN_STATUS 可決定清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 * true:將政策設為模擬測試模式。模擬測試模式不會刪除任何構件。 * false:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱「設定資源清理政策」。
    • POLICY_NAME 是清除政策的名稱。
    • TAG_STATE 是要套用政策的代碼狀態。值為 taggeduntaggedanyany 適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。
    • TAG_PREFIXTAG_PREFIX_N 是要套用政策的代碼前置字串。
    • PKG_PREFIXPKG_PREFIX_N 是套件前置字元,可將政策套用至這些套件。
    • TIME_SINCE_UPLOAD 是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加 smhd,指定秒、分、時或天數的持續時間。
    • KEEP_COUNT 是指要保留在存放區中的構件版本數量 (以每個套件為單位)。

如要在不同存放區中儲存快照和發布版本,請使用 maven_config 區塊,為存放區指定版本政策。這個區塊支援下列設定:

  • version_policy 會使用下列其中一個值設定版本政策:
    • VERSION_POLICY_UNSPECIFIED:儲存快照和發布套件。這是預設設定。
    • 發布:僅儲存發布套件。
    • 快照:僅儲存快照套件。
  • allow_snapshot_overwrites 設定存放區,並採用SNAPSHOT版本政策,接受會覆寫存放區現有版本的重複快照。

以下範例定義了具有發布版本政策的 Maven 存放區。

provider "google" {
project = "my-project"
}

resource "google_artifact_registry_repository" "my-repo" {
provider = google-beta

location = "LOCATION"
repository_id = "my-repo"
description = "Maven repository"
format = "MAVEN"
mode = "REMOTE_REPOSITORY"
maven_config {
  version_policy = "RELEASE"
}
}

npm

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

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "npm"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    npm_repository {
      public_repository = "NPMJS"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地點

  • PROJECT-ID 是 Google Cloud 專案 ID。
  • LOCATION 是存放區位置。
  • REPOSITORY_ID 是存放區 ID。
  • DESCRIPTION 是存放區的選填說明。 請勿加入私密資料,因為存放區說明不會加密。
  • KEY:如果您使用客戶自行管理的加密金鑰 (CMEK) 進行加密,這是 Cloud Key Management Service 金鑰的名稱。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。
  • CONFIG_DESCRIPTION 是遠端來源的選用說明。
  • DRY_RUN_STATUS 可決定清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 * true:將政策設為模擬測試模式。模擬測試模式不會刪除任何構件。 * false:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱「設定資源清理政策」。
    • POLICY_NAME 是清除政策的名稱。
    • TAG_STATE 是要套用政策的代碼狀態。值為 taggeduntaggedanyany 適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。
    • TAG_PREFIXTAG_PREFIX_N 是要套用政策的代碼前置字串。
    • PKG_PREFIXPKG_PREFIX_N 是套件前置字元,可將政策套用至這些套件。
    • TIME_SINCE_UPLOAD 是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加 smhd,指定秒、分、時或天數的持續時間。
    • KEEP_COUNT 是指要保留在存放區中的構件版本數量 (以每個套件為單位)。

Python

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

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "python"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    python_repository {
      public_repository = "PYPI"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地點

  • PROJECT-ID 是 Google Cloud 專案 ID。
  • LOCATION 是存放區位置。
  • REPOSITORY_ID 是存放區 ID。
  • DESCRIPTION 是存放區的選填說明。 請勿加入私密資料,因為存放區說明不會加密。
  • KEY:如果您使用客戶自行管理的加密金鑰 (CMEK) 進行加密,這是 Cloud Key Management Service 金鑰的名稱。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。
  • CONFIG_DESCRIPTION 是遠端來源的選用說明。
  • DRY_RUN_STATUS:決定清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 * true:將政策設為模擬測試模式。模擬測試模式不會刪除任何構件。 * false:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱「設定資源清理政策」。
    • POLICY_NAME 是清除政策的名稱。
    • TAG_STATE 是要套用政策的代碼狀態。值為 taggeduntaggedanyany 適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。
    • TAG_PREFIXTAG_PREFIX_N 是要套用政策的代碼前置字串。
    • PKG_PREFIXPKG_PREFIX_N 是套件前置字元,可將政策套用至這些套件。
    • TIME_SINCE_UPLOAD 是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加 smhd,指定秒、分、時或天數的持續時間。
    • KEEP_COUNT 是指要保留在存放區中的構件版本數量 (以每個套件為單位)。

Apt (預先發布版)

  provider "google" {
  project = "PROJECT_ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "APT"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    apt_repository {
      public_repository {
        repository_base = "REPOSITORY_BASE"
        repository_path = "REPOSITORY_PATH"
      }
    }
  }
}

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID。
  • LOCATION:存放區位置。
  • REPOSITORY_ID:存放區 ID。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會經過加密。
  • CONFIG_DESCRIPTION:選用。遠端來源的說明。
  • REPOSITORY_BASE:Apt 的預設公開存放區基礎。可能的值為 DEBIANUBUNTU
  • REPOSITORY_PATH:來自底座的特定存放區。例如 debian/dists/stable

Yum (預先發布版)

  provider "google" {
  project = "PROJECT_ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "YUM"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    yum_repository {
      public_repository {
        repository_base = "REPOSITORY_BASE"
        repository_path = "REPOSITORY_PATH"
      }
    }
  }
}

地點

  • PROJECT_ID: Google Cloud 專案 ID。
  • LOCATION:存放區位置。
  • REPOSITORY_ID:存放區 ID。
  • DESCRIPTION:選用。存放區的說明。 請勿輸入私密資料,因為存放區說明不會加密。
  • CONFIG_DESCRIPTION:選用。遠端來源的說明。
  • REPOSITORY_BASE:Yum 的預設公開存放區基礎。可能的值為 CENTOSCENTOS_DEBUGCENTOS_VAULTCENTOS_STREAMROCKYEPEL
  • REPOSITORY_PATH:來自底座的特定存放區。例如 "centos/8-stream/BaseOS/x86_64/os

Artifact Registry 會建立存放區。執行下列指令,查看存放區的說明:

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

建立存放區後,請按照下列步驟操作:

編輯存放區說明

您可以透過 Google Cloud 控制台或 gcloud CLI 變更存放區說明。

控制台

  1. 在 Google Cloud 控制台中開啟「Repositories」(存放區) 頁面。

    開啟「存放區」頁面

  2. 在存放區清單中選取存放區,然後按一下「Edit Repository」(編輯存放區)

  3. 編輯存放區說明,然後按一下「儲存」

gcloud

如要更新存放區說明,請執行下列指令:

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

更改下列內容:

  • REPOSITORY:存放區的名稱。如果您已設定預設存放區,可以省略這個標記,使用預設存放區。
  • PROJECT:專案 ID。 Google Cloud如果省略這個旗標,系統會使用目前或預設的專案。
  • LOCATION 是存放區的區域或多區域位置。 使用這個旗標,即可查看特定位置的存放區。如果您已設定預設位置,可以省略這個標記,使用預設位置。
  • DESCRIPTION:存放區的說明。

存取 service perimeter 中的上游來源

VPC Service Controls 服務範圍內的服務,存取範圍外的資源時會受到限制。

您可以允許或拒絕存取指定Google Cloud 專案和位置的上游來源。

根據預設,如果您未明確授予存取權,Artifact Registry 會拒絕存取上游來源。

如果是 Artifact Registry,則必須具備 Artifact Registry 管理員 (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 的所有遠端存放區存取 perimeter 外部的上游來源:

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

拒絕存取上游來源

拒絕存取上游來源後,遠端存放區中現有的快取構件仍可使用。

如要在特定位置拒絕存取上游來源,請執行下列指令:

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

舉例來說,使用下列指令,禁止專案 my-projectus-west1 的所有遠端存放區存取 perimeter 外部的上游來源:

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

後續步驟