イメージが 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
Google Cloud コンソールで Pub/Sub トピックページに移動します。
[トピックを作成] をクリックします。
トピック ID
gcr
を入力します。[トピックを作成] をクリックします。
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
Google Cloud コンソールで Pub/Sub トピックページに移動します。
プロジェクトのトピックをクリックします。
[サブスクリプションを作成] をクリックします。
サブスクリプション名を入力します。
projects/[PROJECT-ID]/subscriptions/[SUBSCRIPTION-NAME]
[配信タイプ] は [Pull] に設定されたままにします。
[作成] をクリックします。
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
が含まれている場合があります。
次のステップ
- Pub/Sub のドキュメントを読む。
- Pub/Sub の詳細について Pub/Sub とはを確認する。
- Pub/Sub アクセス制御の役割の詳細を確認する。