Merutekan peristiwa di seluruh project Google Cloud


Tutorial ini menunjukkan cara menggunakan Eventarc untuk membaca peristiwa dari sumber dalam satu Google Cloud project dan merutekannya ke tujuan target dalam project Google Cloud lain. Hal ini dapat dilakukan dengan menggunakan Pub/Sub sebagai lapisan transpor lintas project.

Tujuan

Dalam tutorial ini, Anda akan:

  1. Buat topik di satu project, lalu publikasikan ke topik tersebut dari project lain. Tindakan ini akan merutekan peristiwa ke layanan Cloud Run yang tidak diautentikasi menggunakan pemicu Eventarc.

  2. Gunakan notifikasi Pub/Sub untuk Cloud Storage guna memublikasikan peristiwa Cloud Storage dari satu project ke project lainnya. Rutekan peristiwa ke layanan Cloud Run yang tidak diautentikasi menggunakan pemicu Eventarc.

  3. Gunakan sink Cloud Logging untuk memublikasikan Cloud Audit Logs dari satu project ke project lainnya. Rutekan peristiwa ke layanan Cloud Run yang tidak diautentikasi menggunakan pemicu Eventarc.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan Google Cloud yang terbatas.

Perhatikan bahwa Anda memerlukan dua project untuk tutorial ini. Langkah-langkah berikut berlaku untuk kedua project.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Perbarui komponen gcloud:
    gcloud components update
  11. Login menggunakan akun Anda:
    gcloud auth login

Merutekan peristiwa Pub/Sub di seluruh project

Karena Pub/Sub adalah layanan yang didistribusikan secara global, Anda dapat membuat topik di satu project, memublikasikan ke topik tersebut dari project lain, lalu memicu Eventarc yang merutekan pesan ke layanan Cloud Run:

Peristiwa lintas project: Cloud Pub/Sub dan Eventarc

  1. Tetapkan Google Cloud project ID ke project kedua Anda:

    gcloud config set project PROJECT_TWO_ID

    Ganti PROJECT_TWO_ID dengan ID projectGoogle Cloud kedua Anda.

  2. Dalam project kedua, lakukan hal berikut:

    1. Aktifkan Cloud Run dan Eventarc API:

      gcloud services enable run.googleapis.com eventarc.googleapis.com
    2. Tetapkan lokasi default:

      REGION=REGION

      Ganti REGION dengan lokasi Eventarc yang didukung pilihan Anda. Contohnya, us-central1.

    3. Buat topik Pub/Sub:

      TOPIC=my-topic
      gcloud pubsub topics create $TOPIC
    4. Deploy layanan Cloud Run yang tidak diautentikasi menggunakan image bawaan, us-docker.pkg.dev/cloudrun/container/hello:

      gcloud run deploy hello \
          --image=us-docker.pkg.dev/cloudrun/container/hello \
          --allow-unauthenticated \
          --region=$REGION

      Jika Anda melihat URL layanan, berarti deployment selesai.

    5. Hubungkan topik ke layanan dengan pemicu Eventarc:

      gcloud eventarc triggers create cross-project-trigger \
          --destination-run-service=hello \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --transport-topic=projects/PROJECT_TWO_ID/topics/$TOPIC

      Tindakan ini akan membuat pemicu yang disebut cross-project-trigger.

  3. Tetapkan Google Cloud project ID ke project pertama Anda:

    gcloud config set project PROJECT_ONE_ID

    Ganti PROJECT_ONE_ID dengan ID projectGoogle Cloud pertama Anda.

  4. Di project pertama, publikasikan pesan ke topik di project kedua:

    gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
  5. Tetapkan Google Cloud project ID ke project kedua Anda:

    gcloud config set project PROJECT_TWO_ID
  6. Di project kedua, pastikan peristiwa yang dihasilkan dicatat ke dalam log:

    gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json

    Entri logging yang mirip dengan berikut ini akan ditampilkan:

    "message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"

Merutekan peristiwa Cloud Storage di seluruh project

Gunakan notifikasi Pub/Sub untuk Cloud Storage guna memublikasikan peristiwa dari satu project ke project lain, lalu arahkan peristiwa ke layanan Cloud Run melalui pemicu Eventarc:

Peristiwa lintas project: Cloud Storage dan Eventarc

  1. Tetapkan Google Cloud project ID ke project pertama Anda:

    gcloud config set project PROJECT_ONE_ID
  2. Membuat bucket Cloud Storage:

    PROJECT1=$(gcloud config get-value project)
    BUCKET=$PROJECT1-cross-project
    gcloud storage buckets create gs://$BUCKET --location=${REGION}
  3. Buat notifikasi Pub/Sub untuk bucket ke topik di project kedua Anda:

    gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
  4. Upload file ke bucket:

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://$BUCKET/random.txt
  5. Tetapkan Google Cloud project ID ke project kedua Anda:

    gcloud config set project PROJECT_TWO_ID
  6. Di project kedua, pastikan peristiwa yang dihasilkan dicatat ke dalam log:

    gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json

    Entri logging yang mirip dengan berikut ini akan ditampilkan:

    Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: {
      "kind": "storage#object",
      "id": "project1-cross-project/random.txt/1635327604259719",
      "selfLink": "https://www.googleapis.com/storage/v1/b/project1-cross-project/o/random.txt",
      "name": "random.txt",
      "bucket": "project1-cross-project",
      "generation": "1635327604259719",
    [...]
    }

Merutekan peristiwa Cloud Audit Logs di seluruh project

Permintaan ke layanan Anda dapat dipicu saat entri log audit dibuat yang cocok dengan kriteria filter pemicu. (Untuk informasi selengkapnya, lihat Menentukan filter peristiwa untuk Log Audit Cloud.) Dalam hal ini, saat instance VM Compute Engine dibuat di project pertama, entri log audit yang cocok dengan kriteria filter pemicu memungkinkan Anda merekam dan merutekan peristiwa ke layanan Cloud Run di project kedua:

Peristiwa lintas project: Cloud Audit Logs dan Eventarc

  1. Tetapkan Google Cloud project ID ke project pertama Anda:

    gcloud config set project PROJECT_ONE_ID
  2. Di project pertama Anda, aktifkan Jenis Log Pembacaan Admin, Pembacaan Data, dan Penulisan Data untuk Compute Engine:

    Perhatikan bahwa di tingkat project, Anda memerlukan peran Identity and Access Management (IAM) roles/owner untuk mengonfigurasi log audit Akses Data untuk resource Google Cloud Anda.

    1. Baca kebijakan IAM project Anda dan simpan dalam file:

      gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
      
    2. Mengedit /tmp/policy.yaml, menambahkan atau mengubah hanya konfigurasi log audit Akses Data.

      auditConfigs:
      - auditLogConfigs:
        - logType: ADMIN_READ
        - logType: DATA_READ
        - logType: DATA_WRITE
        service: compute.googleapis.com
      
    3. Tulis kebijakan IAM baru Anda:

      gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
      

      Jika perintah sebelumnya melaporkan konflik dengan perubahan lain, ulangi langkah-langkah ini, dimulai dengan membaca kebijakan IAM project.

  3. Di project pertama, buat sink Cloud Logging untuk merutekan Cloud Audit Logs ke topik di project kedua:

    gcloud logging sinks create cross-project-sink \
        pubsub.googleapis.com/projects/PROJECT_TWO_ID/topics/my-topic \
        --log-filter='protoPayload.methodName="beta.compute.instances.insert"'

    Pengingat yang mirip dengan berikut ini akan ditampilkan:

    Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
  4. Tetapkan Google Cloud project ID ke project kedua Anda:

    gcloud config set project PROJECT_TWO_ID
  5. Di project kedua Anda, berikan peran ke akun layanan:

    gcloud pubsub topics add-iam-policy-binding my-topic \
        --member=SERVICE_ACCOUNT \
        --role=roles/pubsub.publisher

    Ganti SERVICE_ACCOUNT dengan alamat email akun layanan yang ditampilkan di langkah sebelumnya.

  6. Tetapkan Google Cloud project ID ke project pertama Anda:

    gcloud config set project PROJECT_ONE_ID
  7. Di project pertama Anda, buat instance VM Compute Engine.

    Jika menggunakan konsol Google Cloud untuk membuat instance VM, Anda dapat menerima setelan default untuk tujuan tutorial ini.

  8. Tetapkan Google Cloud project ID ke project kedua Anda:

    gcloud config set project PROJECT_TWO_ID
  9. Di project kedua, pastikan peristiwa yang dihasilkan dicatat ke dalam log:

    gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json

    Entri logging yang mirip dengan berikut ini akan ditampilkan:

    Received event of type google.cloud.pubsub.topic.v1.messagePublished. Eventdata: {
      "logName": "projects/workflows-atamel/logs/cloudaudit.googleapis.com%2Factivity",
      "operation": {
        "id": "operation-1635330842489-5cf5321f4f454-ecc363cd-3883c08d",
        "last": true,
        "producer": "compute.googleapis.com"
      },
      "protoPayload": {
        "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
        "methodName": "beta.compute.instances.insert",
      }
    [...]
    }

Pembersihan

Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Menghapus referensi tutorial

  1. Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:

    gcloud run services delete SERVICE_NAME

    Dengan SERVICE_NAME adalah nama layanan pilihan Anda.

    Anda juga dapat menghapus layanan Cloud Run dari Google Cloud Console.

  2. Hapus konfigurasi default gcloud CLI yang Anda tambahkan selama penyiapan tutorial.

    Contoh:

    gcloud config unset run/region

    atau

    gcloud config unset project

  3. Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:

    • Hapus pemicu Eventarc:

      gcloud eventarc triggers delete TRIGGER_NAME
      
      Ganti TRIGGER_NAME dengan nama pemicu Anda.

    • Menghapus topik Pub/Sub

      gcloud pubsub topics delete TOPIC TOPIC_ID
      
      Ganti TOPIC_ID dengan ID topik Anda.

    • Hapus sink Cloud Logging:

      gcloud logging sinks delete SINK_NAME
      
      Ganti SINK_NAME dengan nama sink Anda.

Langkah berikutnya