Cloud 감사 로그에서 이벤트 수신

Cloud Run for Anthos on Google Cloud에 서비스를 배포한 후 이벤트를 만들고 Cloud 감사 로그에서 해당 서비스로 전송하는 방법을 알아봅니다.

시작하기 전에

이 작업을 완료하려면 이벤트 브로커가 있어야 하고 실행 중인 네임스페이스를 알고 있어야 합니다. Cloud Run for Anthos에 대해 이벤트를 구성하고 이벤트 브로커를 만드는 방법을 알아봅니다.

실행 중인 이벤트 브로커가 있으면 다음을 실행하여 Kubernetes 네임스페이스를 볼 수 있습니다.

kubectl get brokers -n NAMESPACE

Cloud Run for Anthos 이벤트 수신자 서비스 배포

이벤트 브로커에서 이벤트를 수신하는 Cloud Run for Anthos를 배포합니다.

  1. 저장소를 클론합니다.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
    

    자바

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage
    

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage
    

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage
    
  2. 컨테이너를 빌드하고 Cloud Build에 업로드합니다.

    gcloud builds submit \
       --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

    여기서 CLOUD_RUN_CONTAINER_NAME은 컨테이너의 파일 이름입니다.

  3. 컨테이너 이미지를 Cloud Run for Anthos에 배포합니다.

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --namespace=NAMESPACE \
        --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

    서비스 URL이 표시되면 성공적으로 배포된 것입니다.

Cloud Audit Logs의 트리거 만들기

  1. 이벤트 브로커와 동일한 네임스페이스에 트리거를 만듭니다.

    gcloud beta events triggers create TRIGGER_NAME \
       --namespace NAMESPACE \
       --target-service=CLOUD_RUN_SERVICE_NAME \
       --type=google.cloud.audit.log.v1.written \
       --parameters serviceName=pubsub.googleapis.com \
       --parameters methodName=google.pubsub.v1.Publisher.CreateTopic
    

    이 예시에서 트리거는 google.pubsub.v1.Publisher.CreateTopic과 동일한 methodName 항목을 포함하는 Cloud 감사 로그 항목을 필터링합니다. 추가 필터링 옵션은 AuditLog 형식 지정을 참조하세요.

  2. 60초 후 트리거가 작동하는지 확인합니다.

    gcloud beta events triggers list \
       --target-service CLOUD_RUN_SERVICE_NAME \
       --namespace NAMESPACE
    

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

    출력은 다음과 비슷합니다.

    TRIGGER                EVENT TYPE                          TARGET
    trigger-name           google.cloud.audit.log.v1.written   cloud-run-service
    

이벤트 생성

  1. Pub/Sub 주제를 만들어 이벤트를 생성합니다.

    gcloud pubsub topics create TOPIC_NAME
    
  2. Cloud Run for Anthos 서비스에서 이벤트가 수신되었는지 확인합니다.

    kubectl logs \
       --selector serving.knative.dev/service=CLOUD_RUN_SERVICE_NAME \
       -c user-container \
       -n NAMESPACE \
       --tail=200
    

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

    출력은 다음과 비슷합니다.

      [...]
      [2020-09-10 18:51:28 +0000] [1] [INFO] Starting gunicorn 20.0.4
      [2020-09-10 18:51:28 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
      [2020-09-10 18:51:28 +0000] [1] [INFO] Using worker: threads
      [2020-09-10 18:51:28 +0000] [7] [INFO] Booting worker with pid: 7
      GCS CloudEvent type: pubsub.googleapis.com/projects/PROJECT_NAME/topics/to-be-deleted
      GCS CloudEvent type: pubsub.googleapis.com/projects/PROJECT_NAME/topics/to-be-deleted2
      [...]
    

삭제

요금이 반복해서 청구되지 않도록 이 가이드에서 만든 리소스를 삭제합니다.

  1. 트리거를 삭제하려면 다음을 입력하세요.

    gcloud beta events triggers delete TRIGGER_NAME \
        --namespace NAMESPACE
    

    여기서 NAMESPACE는 이벤트 브로커와 동일한 네임스페이스입니다.

  2. Pub/Sub 주제를 삭제합니다.

    gcloud pubsub topics delete TOPIC_NAME