本頁說明如何建立 Artifact Registry 遠端存放區。
遠端存放區會儲存來自下列上游來源的構件:
- 標準 Artifact Registry 存放區。
- 外部來源,例如:
- CentOS
- Debian
- Docker Hub
- GitHub Container Registry (ghcr.io)
- Maven Central
- Python Package Index (PyPI)
遠端存放區可做為上游來源的 Proxy,讓您進一步掌控依附元件。第一次要求套件版本時,Artifact Registry 會下載套件並快取在遠端存放區中。下次要求相同套件版本時,Artifact Registry 會提供快取副本。
如果您從不存在的上游來源要求構件,或該來源不包含您指定的版本,要求就會失敗。
其他存放區模式包括:
- 標準:預設存放區模式。您可以將私人套件等構件直接上傳或發布至標準存放區。雖然您可以直接從個別標準存放區下載,但透過虛擬存放區存取存放區群組,可簡化工具設定。
- 虛擬:做為多個上游存放區 (包括遠端和標準存放區) 單一存取點的存放區。
如要進一步瞭解遠端存放區的運作方式,請參閱「遠端存放區總覽」。
事前準備
- 啟用 Artifact Registry,包括啟用 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
如要將 Artifact Registry 存放區設為上游,且該存放區與遠端存放區位於不同專案,則必須先授予遠端存放區專案的服務帳戶上游存放區專案的存取權,才能建立遠端存放區。
授予服務代理人角色 遠端存放區會使用 Artifact Registry 服務代理程式,向 Artifact Registry 上游存放區進行驗證。您必須授予遠端存放區服務代理程式上游存放區的讀取權限。
如要授予遠端存放區服務代理程式上游存放區的 Artifact Registry 服務代理程式角色,請執行下列指令:
gcloud projects add-iam-policy-binding UPSTREAM_REPOSITORY \ --member serviceAccount:service-REMOTE_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \ --location=REGION \ --project=UPSTREAM_PROJECT_ID \ --role roles/artifactregistry.serviceAgent
取代下列項目:
UPSTREAM_REPOSITORY
是上游存放區的 ID。 Artifact Registry 上游存放區必須是標準模式存放區。REMOTE_PROJECT_NUMBER
是遠端存放區專案的專案編號。 Google CloudREMOTE_PROJECT_ID
是遠端存放區的專案 ID。 Google CloudREGION
是您要建立遠端存放區的區域。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 金鑰。
主控台
在 Google Cloud 控制台中開啟「Repositories」(存放區) 頁面。
點選 [Create Repository] (建立存放區)。
指定存放區名稱。專案中每個存放區位置的存放區名稱不得重複。
在「格式」部分,選取存放區格式。
在「Repository mode」(存放區模式) 區段中,選取「Remote」(遠端)。
在「遠端存放區來源」部分,選取下列其中一種方式來輸入上游存放區網址:
如果選取「自訂」,請在「自訂存放區」欄位中輸入完整的存放區網址。存放區建立後,網址就無法變更。
如需常見上游網址的範例,請參閱「自訂上游」。
如果您選取 Artifact Registry 存放區:
- 在「Artifact Registry repository」(Artifact Registry 存放區) 欄位中,輸入要做為上游的存放區完整名稱,或按一下「Browse」(瀏覽),查看您有權檢視的存放區清單。系統只會列出與遠端存放區格式相同的存放區。
- 按一下要當做上游的存放區名稱。
- 按一下 [選取]。
如果您選取其中一個預設上游,或使用「自訂」按鈕輸入完整網址,請在「遠端存放區驗證模式」中選擇下列其中一個選項:
- 已驗證:輸入使用者名稱和密碼,驗證上游存放區。
- 未驗證:略過上游存放區的驗證。
如果選取「已驗證」,請輸入下列資訊:
- 在「使用者名稱」欄位中,輸入上游存放區的使用者名稱。
- 在「Secret」欄位中,輸入您儲存上游存放區密碼的密鑰版本。
建立存放區後,您可以編輯這些值。如要進一步瞭解如何驗證遠端存放區上游,請參閱「設定遠端存放區上游的驗證機制」。
在「位置類型」部分,選擇存放庫的位置:
選擇位置類型:區域或多區域。地點清單會根據您的選取項目變更。
在「Region」(區域) 或「Multi-region」(多區域) 清單中選取位置。
如要瞭解位置類型和支援的位置,請參閱「存放區位置」一文。
為存放區新增說明。說明有助於識別存放區的用途,以及其中包含的構件類型。
請勿輸入機密資料,因為存放區說明不會加密。
如要使用標籤整理存放區,請按一下「新增標籤」,然後輸入標籤的鍵/值組合。建立存放區後,您可以新增、編輯或移除標籤。
在「Encryption」(加密) 區段中,選擇存放區的加密機制。
- Google-managed encryption key - Encrypt repository content with a 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 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=SECRET_VERSION
更改下列內容:
- 將
REMOTE-REPOSITORY-NAME
替換為存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。 - 將
PROJECT_ID
替換為專案 ID。如果省略這個標記,系統會使用目前或預設專案。 LOCATION
,其中包含存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行gcloud artifacts locations list
指令。DESCRIPTION
,並提供存放區說明 (選填)。請勿輸入私密資料,因為存放區說明不會經過加密。REMOTE-REPOSITORY-DESCRIPTION
,並說明這個遠端存放區的外部存放區設定。USERNAME
(選用) 如果您使用驗證,請提供用於向上游存放區驗證的使用者名稱。SECRET_VERSION
(選用) 如果您使用驗證,請使用含有上游存放區密碼的祕密版本。UPSTREAM
,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。
如果是 Artifact Registry 上游存放區,請將存放區路徑格式設為類似下列格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY
。
如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。--disable-vulnerability-scanning
:選用旗標,可將存放區設為停用自動安全漏洞掃描。--allow-vulnerability-scanning
:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。
舉例來說,下列指令會在 Google Cloud 專案 my-project
的 us-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=SECRET_VERSION
更改下列內容:
- 將
REMOTE-REPOSITORY-NAME
替換為存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。 - 將
PROJECT_ID
替換為專案 ID。如果省略這個標記,系統會使用目前或預設專案。 LOCATION
,其中包含存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行gcloud artifacts locations list
指令。DESCRIPTION
,並提供存放區說明 (選填)。請勿輸入私密資料,因為存放區說明不會經過加密。REMOTE-REPOSITORY-DESCRIPTION
,並說明這個遠端存放區的外部存放區設定。USERNAME
(選用) 如果您使用驗證,請提供用於向上游存放區驗證的使用者名稱。SECRET_VERSION
(選用) 如果您使用驗證,請使用含有上游存放區密碼的祕密版本。UPSTREAM
,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。
如果是 Artifact Registry 上游存放區,請將存放區路徑格式設為類似下列格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY
。
如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。--disable-vulnerability-scanning
:選用旗標,可將存放區設為停用自動安全漏洞掃描。--allow-vulnerability-scanning
:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。
舉例來說,下列指令會在 Google Cloud 專案 my-project
的 us-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=SECRET_VERSION
更改下列內容:
- 將
REMOTE-REPOSITORY-NAME
替換為存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。 - 將
PROJECT_ID
替換為專案 ID。如果省略這個標記,系統會使用目前或預設專案。 LOCATION
,其中包含存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行gcloud artifacts locations list
指令。DESCRIPTION
,並提供存放區說明 (選填)。請勿輸入私密資料,因為存放區說明不會經過加密。REMOTE-REPOSITORY-DESCRIPTION
,並說明這個遠端存放區的外部存放區設定。USERNAME
(選用) 如果您使用驗證,請提供用於向上游存放區驗證的使用者名稱。SECRET_VERSION
(選用) 如果您使用驗證,請使用含有上游存放區密碼的祕密版本。UPSTREAM
,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。
如果是 Artifact Registry 上游存放區,請將存放區路徑格式設為類似下列格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY
。
如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。--disable-vulnerability-scanning
:選用旗標,可將存放區設為停用自動安全漏洞掃描。--allow-vulnerability-scanning
:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。
舉例來說,下列指令會在 Google Cloud 專案 my-project
的 us-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=SECRET_VERSION
更改下列內容:
- 將
REMOTE-REPOSITORY-NAME
替換為存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。 - 將
PROJECT_ID
替換為專案 ID。如果省略這個標記,系統會使用目前或預設專案。 LOCATION
,其中包含存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行gcloud artifacts locations list
指令。DESCRIPTION
,並提供存放區說明 (選填)。請勿輸入私密資料,因為存放區說明不會經過加密。REMOTE-REPOSITORY-DESCRIPTION
,並說明這個遠端存放區的外部存放區設定。USERNAME
(選用) 如果您使用驗證,請提供用於向上游存放區驗證的使用者名稱。SECRET_VERSION
(選用) 如果您使用驗證,請使用含有上游存放區密碼的祕密版本。UPSTREAM
,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。
如果是 Artifact Registry 上游存放區,請將存放區路徑格式設為類似下列格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY
。
如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。--disable-vulnerability-scanning
:選用旗標,可將存放區設為停用自動安全漏洞掃描。--allow-vulnerability-scanning
:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。
舉例來說,下列指令會在 Google Cloud 專案 my-project
的 us-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 專案的 us-east1
地區中,快取 Debian Buster 存放區。my-project
上游存放區的完整網址為 http://deb.debian.org/debian/dists/buster
。
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 buster distribution" \
--remote-apt-repo=DEBIAN \
--remote-apt-repo-path="debian/dists/buster"
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-project
的 us-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」(開始使用 - 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
是 Cloud Key Management Service 金鑰的名稱,前提是您使用客戶自行管理的加密金鑰 (CMEK) 進行加密。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。CONFIG_DESCRIPTION
是遠端來源的選用說明。DRY_RUN_STATUS
會判斷清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 *true
:設定要在模擬測試模式下執行的政策。模擬測試模式不會刪除任何構件。 *false
:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱設定資源清理政策。POLICY_NAME
是清理政策的名稱。TAG_STATE
是要套用政策的代碼狀態。值為tagged
、untagged
和any
。any
適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。TAG_PREFIX
和TAG_PREFIX_N
是要套用政策的代碼前置字串。PKG_PREFIX
和PKG_PREFIX_N
是套件前置字元,可將政策套用至這些套件。TIME_SINCE_UPLOAD
是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加s
、m
、h
或d
,指定秒、分、時或天的時間長度。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
是 Cloud Key Management Service 金鑰的名稱,前提是您使用客戶自行管理的加密金鑰 (CMEK) 進行加密。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。CONFIG_DESCRIPTION
是遠端來源的選用說明。DRY_RUN_STATUS
會判斷清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 *true
:設定要在模擬測試模式下執行的政策。模擬測試模式不會刪除任何構件。 *false
:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱設定資源清理政策。POLICY_NAME
是清理政策的名稱。TAG_STATE
是要套用政策的代碼狀態。值為tagged
、untagged
和any
。any
適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。TAG_PREFIX
和TAG_PREFIX_N
是要套用政策的代碼前置字串。PKG_PREFIX
和PKG_PREFIX_N
是套件前置字元,可將政策套用至這些套件。TIME_SINCE_UPLOAD
是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加s
、m
、h
或d
,指定秒、分、時或天的時間長度。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
是 Cloud Key Management Service 金鑰的名稱,前提是您使用客戶自行管理的加密金鑰 (CMEK) 進行加密。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。CONFIG_DESCRIPTION
是遠端來源的選用說明。DRY_RUN_STATUS
會判斷清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 *true
:設定要在模擬測試模式下執行的政策。模擬測試模式不會刪除任何構件。 *false
:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱設定資源清理政策。POLICY_NAME
是清理政策的名稱。TAG_STATE
是要套用政策的代碼狀態。值為tagged
、untagged
和any
。any
適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。TAG_PREFIX
和TAG_PREFIX_N
是要套用政策的代碼前置字串。PKG_PREFIX
和PKG_PREFIX_N
是套件前置字元,可將政策套用至這些套件。TIME_SINCE_UPLOAD
是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加s
、m
、h
或d
,指定秒、分、時或天的時間長度。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
是 Cloud Key Management Service 金鑰的名稱,前提是您使用客戶自行管理的加密金鑰 (CMEK) 進行加密。如要使用預設設定 (Google 代管的加密金鑰),請省略這個引數。CONFIG_DESCRIPTION
是遠端來源的選用說明。DRY_RUN_STATUS
會判斷清理政策是否要刪除構件,或只記錄在存放區設定清理政策時會刪除的構件。如不想在存放區中新增清除政策,請省略此步驟。 *true
:設定要在模擬測試模式下執行的政策。模擬測試模式不會刪除任何構件。 *false
:套用清除政策。系統會根據政策刪除或保留構件。如要進一步瞭解資源清理政策,請參閱設定資源清理政策。POLICY_NAME
是清理政策的名稱。TAG_STATE
是要套用政策的代碼狀態。值為tagged
、untagged
和any
。any
適用於已標記和未標記的構件。如果存放區已啟用不可變更的標記,就無法刪除已加上標記的構件。TAG_PREFIX
和TAG_PREFIX_N
是要套用政策的代碼前置字串。PKG_PREFIX
和PKG_PREFIX_N
是套件前置字元,可將政策套用至這些套件。TIME_SINCE_UPLOAD
是指構件版本上傳至存放區後經過的時間,以時間長度表示。您可以分別附加s
、m
、h
或d
,指定秒、分、時或天的時間長度。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 的預設公開存放區基礎。可能的值為
DEBIAN
和UBUNTU
。 - REPOSITORY_PATH 是來自基底的特定存放區。例如
debian/dists/buster
。
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 的預設公開存放區基礎。
可能的值為
CENTOS
、CENTOS_DEBUG
、CENTOS_VAULT
、CENTOS_STREAM
、ROCKY
和EPEL
。 - REPOSITORY_PATH 是來自基底的特定存放區。例如
"centos/8-stream/BaseOS/x86_64/os
。
Artifact Registry 會建立存放區。執行下列指令,查看存放區的說明:
gcloud artifacts repositories describe REPOSITORY \
--location=LOCATION
建立存放區後,請按照下列步驟操作:
- 授予存放區存取權。
- 選用:設定清理政策,刪除未使用的構件。
- 設定 Docker、套件管理員和其他第三方用戶端,以便向存放區進行驗證。
- 設定 Artifact Registry 遠端存放區,向其上游來源進行驗證。
編輯存放區說明
您可以透過 Google Cloud 控制台或 gcloud CLI 變更存放區說明。
控制台
在 Google Cloud 控制台中開啟「Repositories」(存放區) 頁面。
在存放區清單中選取存放區,然後按一下「Edit Repository」(編輯存放區)。
編輯存放區說明,然後按一下「儲存」。
gcloud
如要更新存放區說明,請執行下列指令:
gcloud artifacts repositories update REPOSITORY \
--project=PROJECT \
--location=LOCATION \
--description="DESCRIPTION"
更改下列內容:
存取服務範圍內的上游來源
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-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
後續步驟
- 建立 Docker Hub 遠端存放區。
- 進一步瞭解 Artifact Registry 遠端存放區。
- 設定 Docker Hub 的遠端存放區驗證機制。