設定 Pub/Sub 通知

Pub/Sub 通知可讓您追蹤 Artifact Registry Docker 存放區的變更,包括以 OCI 格式封裝的 Helm 3 資訊套件。您可以讓應用程式訂閱這些通知,以便在映像檔上傳、標記或刪除時,觸發自動化事件、記錄存放區活動,或在服務之間進行通訊。

總覽

Pub/Sub 會將存放區相關訊息發布至名為「主題」的具名資源。訂閱 Pub/Sub 主題的應用程式會收到這些訊息,並在存放區狀態變更時收到通知。

Artifact Registry 會在名為 gcr 的主題中,針對下列變更發布訊息:

  • 圖片上傳
  • 圖片新增標記
  • 刪除圖片

此外,您也可以設定發布或訂閱通知的角色和權限。

如要瞭解如何設定 Artifact Analysis 通知,以便接收新安全漏洞掃描結果等活動的通知,請參閱 Artifact Analysis 說明文件。

如要接收通知,請務必:

  1. 在專案中建立主題,並命名為 gcr,然後使用 Artifact Registry。
  2. 建立主題的訂閱項目。
  3. 設定訂閱者應用程式,接收存放區變更訊息。
  4. 視情況設定權限,控管主題和訂閱項目的存取權。

建立 Artifact Registry 主題

如要使用 Google 擁有及代管 的加密金鑰建立 gcr 主題,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的 Pub/Sub 主題頁面。

    前往 Pub/Sub 主題頁面

  2. 按一下 [Create Topic] (建立主題)。

  3. 輸入主題 ID gcr。

  4. 按一下 [Create Topic] (建立主題)。

gcloud

執行下列指令:

    gcloud pubsub topics create gcr --project=PROJECT-ID

將 PROJECT-ID 替換為您的 Google Cloud 專案 ID。如果省略 --project 旗標,指令會使用目前的專案。

如要進一步瞭解 gcloud pubsub topics 指令,請參閱 topics 說明文件。

如要建立採用 CMEK 加密的 gcr 主題,請參閱 Pub/Sub 加密主題的操作說明。

建立 gcr 主題或確認主題存在後,即可建立主題的訂閱項目。

建立訂閱項目

建立存放區變更主題後,您可以設定使用推送傳遞或提取傳遞的訂閱項目。建議您使用提取推送,因為 CI/CD 系統可能會對儲存的構件產生大量變更,而提取推送對於大量訊息更有效率。

如要建立提取訂閱項目,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的 Pub/Sub 主題頁面。

    前往 Pub/Sub 主題頁面

  2. 按一下專案的主題。

  3. 按一下 [Create Subscription] (建立訂閱)。

  4. 輸入訂閱名稱:

    projects/PROJECT/subscriptions/[SUBSCRIPTION-NAME]
    

    將「傳送類型」保留為「提取」。

  5. 按一下 [Create] (建立)。

gcloud

執行下列指令:

gcloud pubsub subscriptions create SUBSCRIPTION-NAME --topic=gcr

將 SUBSCRIPTION-NAME 替換為訂閱項目名稱

如要進一步瞭解 gcloud pubsub subscriptions 指令,請參閱 subscriptions 說明文件。

您現在已訂閱 gcr 主題。下一步是為觸發存放區變更的身分設定權限。

設定訂閱端應用程式

建立主題和該主題的訂閱項目後,即可設定訂閱者應用程式,也就是接收存放區變更訊息的應用程式。訂閱者應用程式會執行事件通知、系統記錄和應用程式間通訊等工作。

存放區使用者推送或刪除映像檔時,會發生下列步驟:

  1. Artifact Registry 服務帳戶會將變更發布至 gcr 主題。服務帳戶為 service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com,其中 PROJECT-NUMBER 是您的 Google Cloud 專案編號。Artifact Registry 服務帳戶預設具備 pubsub.topics.publish 權限,因此可以將變更發布至主題。

    如果管理員撤銷 Artifact Registry 服務帳戶的 pubsub.topics.publish 權限,Artifact Registry 會嘗試以存放區使用者的身分發布訊息。在這種情況下,存放區使用者的帳戶必須具備 pubsub.topics.publish 權限,才能成功發布訊息。

  2. Pub/Sub 會將訊息從主題轉送至訂閱項目。

  3. 訂閱者應用程式要求訊息時,會從訂閱項目提取新訊息。

    代表訂閱者提取訊息的身分必須具備訂閱項目的存取權限。您可以使用 Pub/Sub 訂閱者角色授予這項權限。

如要瞭解如何設定訂閱者,以便透過提取推送接收訂閱項目的訊息,請參閱「使用提取功能接收訊息」。

設定權限

您可以使用 Pub/Sub 權限控管主題和訂閱項目的存取權。

如要進一步瞭解 Pub/Sub 權限,以及如何授予主題和訂閱項目的存取權,請參閱 Pub/Sub 存取控管說明文件。

通知範例

Pub/Sub 會以 JSON 格式的字串傳送通知。請查看下列範例,瞭解從 Pub/Sub 接收 Artifact Registry 通知時會發生什麼情況。

將映像檔推送至 Artifact Registry 時,通知酬載可能如下所示:

{
  "action":"INSERT",
  "digest":"us-west1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5..."
}

將新的映像檔標記推送至 Artifact Registry 時,通知酬載會如下所示:

{
  "action":"INSERT",
  "digest":"us-west1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5...",
  "tag":"us-west1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}

訊息會使用 digest 或 tag 鍵識別相關圖片。

從 Artifact Registry 刪除映像檔標記時,通知酬載可能如下所示:

{
  "action":"DELETE",
  "tag":"us-west1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}

訊息可能包含 DELETE 或 INSERT 做為 action 鍵的值。

後續步驟