設定 Pub/Sub 通知

當 Container Registry 存放區發生推送、標記或刪除映像檔等變更時,您可以使用 Pub/Sub 接收通知。

Pub/Sub 會將存放區的相關訊息發布到稱為「主題」的具名資源。這些訊息會由「訂閱」Pub/Sub 主題的應用程式接收。當存放區的狀態發生變更時,訂閱者應用程式就會傳送通知。

此外,您也可以設定 Pub/Sub 主題的角色和權限,以控管使用者與存放區的互動方式。

為了支援從 Artifact Registry 轉移至 Container Registry,Artifact Registry 會將訊息發布至與 Container Registry 相同的主題。

如要瞭解如何針對新安全漏洞掃描結果等活動設定 Artifact Analysis 通知,請參閱 Artifact Analysis 說明文件

建立 Pub/Sub 主題

在 Google Cloud 專案中啟用 Container Registry API 時,Container Registry 會自動建立主題 ID 為 gcr 的 Pub/Sub 主題。

如果不慎刪除或遺失 gcr 主題,您可以自行加入。舉例來說,如果 Google Cloud貴機構有機構政策限制,要求使用客戶自行管理的加密金鑰 (CMEK) 進行加密,就可能會缺少主題。如果 Pub/Sub API 在這個限制的拒絕清單中,服務就無法使用 Google-owned and Google-managed encryption keys自動建立主題。

如何使用 Google-owned and Google-managed encryption keys建立 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 主題或確認主題存在後,您就可以建立主題訂閱項目

建立 Pub/Sub 訂閱項目

每個 Pub/Sub 主題都應有訂閱項目。

訂閱者應用程式會接收來自存放區主題的訊息。訂閱者完成的工作包含事件通知、系統記錄和應用程式間的通訊等。

您可以將訂閱設定為使用推送模型提取模型

如要建立訂閱:

控制台

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

    前往 Pub/Sub 主題頁面

  2. 按一下專案的主題。

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

  4. 輸入訂閱名稱:

    projects/[PROJECT-ID]/subscriptions/[SUBSCRIPTION-NAME]
    

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

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

gcloud

在推送或標記 Docker 映像檔的系統中,執行下列指令:

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

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

設定 Pub/Sub 權限

使用 Pub/Sub 存取權控管設定專案與資源的權限。存取權控管可維護存放區的安全,並讓您透過以角色為基礎的存取權來管理使用者權限。

您可以在 Google Cloud 主控台的 IAM 頁面中,或透過 IAM API 設定 Pub/Sub 存取權控管角色。

  • 如要設定發布權限,請使用下列任何角色:擁有者、編輯者、pubsub.admin、pubsub.editor、pubsub.publisher。從登錄檔推送或刪除圖片的主體,必須具備 pubsub.topics.publish 權限,才能將訊息發布至 Pub/Sub。

  • 如要設定訂閱權限,請使用下列任何角色:擁有者、編輯者、pubsub.admin、pubsub.editor、pubsub.subscriber。

通知範例

通知會以 JSON 格式的字串傳送。以下是 Pub/Sub 傳送 Container Registry 通知時可預期收到的內容範例。

將映像檔推送至 Container Registry 時,通知酬載看起來會如下所示:

{
  "action":"INSERT",
  "digest":"gcr.io/my-project/hello-world@sha256:6ec128e26cd5..."
}

將新標記推送至 Container Registry 時,通知酬載看起來會如下所示:

{
  "action":"INSERT",
  "digest":"gcr.io/my-project/hello-world@sha256:6ec128e26cd5...",
  "tag":"gcr.io/my-project/hello-world:1.1"
}

訊息可使用 digesttag 鍵來識別相關的圖片。

從 Container Registry 刪除標記時,通知酬載看起來會如下所示:

{
  "action":"DELETE",
  "tag":"gcr.io/my-project/hello-world:1.1"
}

訊息可能包含 DELETEINSERT 以做為 action 鍵的值。

後續步驟