Pub/Sub 通知の構成

イメージが push、タグ付け、削除されたときなど、Container Registry リポジトリに変更が加えられた場合、Pub/Sub を使用して通知を受け取ることができます。

Pub/Sub は、リポジトリに関するメッセージをトピックという名前付きリソースに公開します。これらのメッセージは、Pub/Sub トピックに登録されたアプリケーションによって受信されます。サブスクライバー アプリケーションは、リポジトリの状態が変更されたときに通知を送信します。

さらに、Pub/Sub トピックの役割と権限を構成して、ユーザーがリポジトリをどのように操作するかを制御することもできます。

Container Registry から Artifact 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 が管理する暗号鍵を使用してトピックを自動的に作成することはできません。

Google が管理する暗号鍵を使用して gcr トピックを作成するには:

Console

  1. Google Cloud コンソールで Pub/Sub トピックページに移動します。

    Pub/Sub トピックページに移動

  2. [トピックを作成] をクリックします。

  3. トピック ID gcr を入力します。

  4. [トピックを作成] をクリックします。

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 トピックにはサブスクリプションが必要です。

サブスクライバー アプリケーションは、リポジトリのトピックからメッセージを受信します。サブスクライバーは、イベント通知、システム ロギング、アプリケーション間の通信などのタスクを遂行します。

サブスクリプションは、push モデルまたは pull モデルを使用するように構成できます。

サブスクリプションを作成するには:

Console

  1. Google Cloud コンソールで Pub/Sub トピックページに移動します。

    Pub/Sub トピックページに移動

  2. プロジェクトのトピックをクリックします。

  3. [サブスクリプションを作成] をクリックします。

  4. サブスクリプション名を入力します。

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

    [配信タイプ] は [Pull] に設定されたままにします。

  5. [作成] をクリックします。

gcloud

Docker イメージが push またはタグ付けされているシステムから、次のコマンドを実行します。

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

gcloud pubsub subscriptions コマンドについて詳しくは、subscriptions ドキュメントをご覧ください。

Pub/Sub 権限の構成

Pub/Sub アクセス制御を使用して、プロジェクトとリソースの権限を構成します。アクセス制御はリポジトリを安全に保ち、ロールベースのアクセスを使用してユーザー権限を管理できるようにします。

Pub/Sub アクセス制御は、Google Cloud コンソールの IAM ページまたは IAM API を使用して構成できます。

  • 公開の権限を構成するには、owner、editor、pubsub.admin、pubsub.editor、pubsub.publisher のいずれかのロールを使用します。イメージを push する、またはレジストリからイメージを削除するプリンシパルには、Pub/Sub にメッセージを公開するための pubsub.topics.publish 権限が必要です。

  • 登録の権限を構成するには、owner、editor、pubsub.admin、pubsub.editor、pubsub.subscriber のいずれかのロールを使用します。

通知の例

通知は、JSON 形式の文字列として送信されます。以下は、Pub/Sub から Container Registry 通知を受信するときに期待されるものの例です。

イメージが Container Registry に push されるときの通知ペイロードは次のようになります。

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

新しいタグが Container Registry に push されるときの通知ペイロードは次のようになります。

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

メッセージは、digest または tag キーを使用して関連イメージを識別します。

タグが Container Registry から削除されるときの通知ペイロードは次のようになります。

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

メッセージには、action キーの値として DELETE または INSERT が含まれている場合があります。

次のステップ