Pub/Sub 알림 구성

Docker 저장소 변경사항에 대한 알림을 Pub/Sub에서 수신할 수 있습니다. 알림은 OCI 형식으로 패키징된 Helm 3 차트를 포함하여 저장소에 저장된 모든 컨테이너 이미지에 적용됩니다.

Pub/Sub는 저장소에 대한 메시지를 주제라고 하는 명명된 리소스에 게시합니다. Pub/Sub 주제를 구독하는 애플리케이션은 이러한 메시지를 수신하고 저장소 상태가 변경되면 알림을 수신합니다.

Artifact Registry는 다음 변경사항에 대한 메시지를 게시합니다.

  • 이미지 업로드
  • 새 태그가 이미지에 추가됨
  • 이미지 삭제

또한 알림을 게시하거나 구독하기 위한 역할과 권한을 구성할 수 있습니다.

새로운 취약점 스캔 결과와 같은 활동의 Artifact Analysis 알림을 구성하는 방법은 Artifact Analysis 문서를 참조하세요.

개요

Artifact Registry는 gcr이라는 주제의 저장소에 대한 변경사항에 관한 메시지를 게시합니다.

알림을 받으려면 다음을 수행해야 합니다.

  1. Artifact Registry를 사용하여 프로젝트에 gcr이라는 주제를 만듭니다.
  2. 주제에 대한 구독을 만듭니다.
  3. 저장소 변경사항에 대한 메시지를 수신하도록 구독자 애플리케이션을 설정합니다.
  4. 필요한 경우 주제와 구독에 대한 액세스를 제어하도록 권한을 구성합니다.

Artifact Registry 주제 만들기

Google Cloud 프로젝트에서 Artifact Registry API를 활성화하면 Artifact Registry는 주제 ID gcr로 Pub/Sub 주제를 자동으로 만듭니다. Container Registry가 동일한 Google Cloud 프로젝트에서 사용 설정된 경우 두 레지스트리 서비스가 동일한 주제를 사용하여 메시지를 게시하므로 해당 주제가 이미 있을 수 있습니다.

gcr 주제가 실수로 삭제되거나 누락된 경우 직접 추가할 수 있습니다. 예를 들어 Google Cloud 조직에 고객 관리 암호화 키(CMEK)로 암호화해야 하는 조직 정책 제약조건이 있는 경우 주제가 누락될 수 있습니다. Pub/Sub API가 이 제약조건의 거부 목록에 있으면 서비스에서 Google 소유 및 Google 관리 키로 주제를 자동으로 만들 수 없습니다.

기존 주제 목록을 보려면 Google Cloud 콘솔에서 Pub/Sub 주제 페이지를 확인하거나 다음 명령어를 실행하면 됩니다.

gcloud pubsub topics list

Google 소유 및 Google 관리 키로 gcr 주제를 만들려면 다음 안내를 따르세요.

콘솔

  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 주제를 만들었거나 주제의 존재가 확인되었으면 주제에 대한 구독을 만들 수 있습니다.

구독 만들기

저장소 변경사항에 대한 주제를 만든내보내기 전송 또는 가져오기 전송을 사용하는 구독을 구성할 수 있습니다. CI/CD 시스템은 저장된 아티팩트에 수많은 변경사항을 생성할 수 있고 가져오기 전송이 대량 메시지에 전송에 더 효과적이므로 가져오기 전송을 사용하는 것이 좋습니다.

가져오기 전송이 포함된 구독을 만들려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 Pub/Sub 주제 페이지로 이동합니다.

    Pub/Sub 주제 페이지로 이동

  2. 프로젝트 주제를 클릭합니다.

  3. 구독 만들기를 클릭합니다.

  4. 구독 이름을 입력합니다.

    projects/PROJECT/subscriptions/[SUBSCRIPTION-NAME]
    

    전송 유형가져오기로 설정합니다.

  5. 만들기를 클릭합니다.

gcloud

다음 명령어를 실행합니다.

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

SUBSCRIPTION-NAME을 구독 이름으로 바꿉니다.

gcloud pubsub subscriptions 명령어에 대한 자세한 내용은 subscriptions 문서를 참조하세요.

이제 gcr 주제에 대한 구독이 있습니다. 다음 단계는 저장소의 변경사항을 트리거하는 ID에 대한 권한을 구성하는 것입니다.

구독자 애플리케이션 구성

해당 주제에 대한 주제 만들기구독을 만든 후에는 저장소 변경사항에 대한 메시지를 수신하는 애플리케이션인 구독자 애플리케이션을 설정할 수 있습니다. 구독자 애플리케이션은 이벤트 알림, 시스템 로깅, 애플리케이션 간 통신과 같은 태스크를 실행합니다.

저장소 사용자가 이미지를 내보내거나 삭제하면 다음 단계가 실행됩니다.

  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. 구독자 애플리케이션이 메시지를 요청하면 구독에서 새 메시지를 가져옵니다.

    구독자를 대신하여 메시지를 가져오는 ID에는 구독에 액세스할 수 있는 권한이 있어야 합니다. Pub/Sub 구독자 역할을 사용하여 이 권한을 부여할 수 있습니다.

가져오기 전송으로 구독에서 메시지를 수신하도록 구독자를 설정하는 방법은 Pull을 사용하여 메시지 수신을 참조하세요.

권한 구성

Pub/Sub 권한을 사용하여 주제와 구독에 대한 액세스를 제어할 수 있습니다.

Pub/Sub 권한과 주제 및 구독 액세스 권한 부여에 대한 자세한 내용은 Pub/Sub 액세스 제어 문서를 참조하세요.

알림 예시

Pub/Sub은 알림을 JSON 형식의 문자열로 전송합니다. 다음 예시를 검토하여 Pub/Sub에서 Artifact Registry 알림을 수신할 때의 예상 결과를 알아보세요.

이미지를 Artifact Registry로 내보내면 알림 페이로드는 다음과 같은 형식이 됩니다.

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

새 이미지 태그를 Artifact Registry로 내보내면 알림 페이로드는 다음과 같은 형식이 됩니다.

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

메시지는 digest 또는 tag 키를 이용해 관련 이미지를 식별합니다.

Artifact Registry에서 이미지 태그를 삭제하면 알림 페이로드가 다음과 같이 표시됩니다.

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

메시지에는 action 키 값으로 DELETEINSERT가 포함될 수 있습니다.

다음 단계