建立連接器存放區

連接器存放區會做為上游來源的 Proxy,確保所有要求都由上游來源處理。與遠端存放區不同,連接器存放區不會快取構件。因此,如果您需要完整稽核上游來源,或必須遵守禁止構件快取的第三方政策,連接器存放區就相當實用。

本頁說明如何建立 Artifact Registry 連接器存放區。

支援的連接器格式

Artifact Registry 僅支援 Docker 格式的連接器存放區。

事前準備

  1. 啟用 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
    

必要的角色

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

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

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

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

建立連接器存放區

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

  • 構件格式,只能是 Docker。
  • 存放區模式設為連接器。
  • 連接器存放區上游來源。
  • 存放區位置
  • 使用 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. 在「格式」部分,選取「Docker」

  5. 在「Repository mode」(存放區模式) 部分,選取「Connector」(連接器)

  6. 在「連接器存放區來源」部分,選取下列其中一個選項:

    • Docker Hub:連接器會使用 Docker Hub (https://docker.io) 做為上游存放區。
    • 自訂:連接器會為上游存放區使用不同的 Docker 上游網址。
  7. 如果選取「自訂」,請在「自訂存放區」欄位中輸入完整的存放區網址。存放區建立後即無法變更網址。

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

  8. 在「Connector repository authentication mode」(連接器存放區驗證模式) 部分,輸入下列資訊:

    1. 上游存放區的使用者名稱。
    2. 在 Secret Manager 中儲存憑證的密鑰。

    建立存放區後,您可以編輯這些值。

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

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

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

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

  10. 為存放區新增說明。說明可協助您瞭解存放區的用途,以及其中包含的構件類型。

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

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

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

    • Google-managed encryption key - Encrypt repository content with a Google-owned and Google-managed encryption key.
    • 客戶管理的金鑰 - 使用您透過 Cloud Key Management Service 控制的金鑰,加密存放區內容。如需金鑰設定操作說明,請參閱「為存放區設定 CMEK」。
  13. 在「Artifact Analysis」部分,選擇安全漏洞掃描設定:

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

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

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

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

  14. 點選「建立」

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

gcloud CLI

如要建立連接器存放區,請執行指令來建立 Docker 連接器存放區或自訂連接器存放區。

  gcloud artifacts repositories create CONNECTOR-REPOSITORY-NAME \
      --project=PROJECT_ID \
      --location=LOCATION \
      --description="DESCRIPTION" \
      --repository-format=docker \
      --mode=connector-repository \
      --remote-docker-repo="UPSTREAM-NAME" \
      --remote-username="USERNAME" \
      --remote-password-secret-version="PASSWORD" \

您必須使用 --mode=connector-repository 旗標,將存放區定義為連接器存放區。--repository-format 必須為 docker

更改下列內容:

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

舉例來說,下列指令會建立名為 my-connector-repo 的連接器存放區,將上游的 Jfrog 存放區連結至 Google Cloud 專案 my-project。上游存放區的完整網址為 https://my-account.jfrog.io/scoped-repo

gcloud artifacts repositories create my-connector-repo \
    --project=my-project \
    --location=us-east1 \
    --repository-format=docker \
    --mode=connector-repository \
    --remote-docker-repo=https://my-account.jfrog.io/scoped-repo \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1

如要進一步瞭解如何向上游存放區驗證,請參閱「向來源驗證連接器存放區」。

Terraform

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

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

下列範例會使用 Terra 資源名稱 my-repo 定義供應商和連接器存放區。

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

resource "google_artifact_registry_repository" "NAME" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "docker"
  mode          = "REMOTE_REPOSITORY"

  # Setting mode="REMOTE_REPOSITORY" and no_cache() together configures the repository as a connector-type repository.
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    docker_repository {
      public_repository = "DOCKER_HUB"
    }
    no_cache {}
  }
}
```

Replace the following:

  * `PROJECT-ID`: the Google Cloud project ID.
  * `NAME`: the name of your repository.
  * `LOCATION`: the repository location.
  * `REPOSITORY_ID`: the repository ID.
  * `DESCRIPTION`: optional. A description for the repository.
    Do not include sensitive data. Repository descriptions are
    not encrypted.
  * `KEY`: the name of the Cloud Key Management Service key, if you are using
    [customer-managed encryption keys][cmek] (CMEK) for encryption. Omit
    this argument to use the default setting, Google-managed encryption
    keys.
  * `CONFIG_DESCRIPTION`: optional. A description of the remote
    source.

建立存放區後,請執行下列操作:

編輯存放區說明

您可以透過 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 內所有連接器存放區的周邊以外上游來源存取權:

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

後續步驟