Mengonfigurasi sink log dengan akun layanan yang dikelola pengguna

Halaman ini menjelaskan cara merutekan log dengan membuat sink yang dikonfigurasi dengan akun layanan yang dikelola pengguna. Secara default, Logging menggunakan akun layanan Logging untuk semua sink dalam resource. Namun, jika sink log Anda berada di project yang berbeda, Anda dapat membuat dan mengelola akun layanan yang dikelola pengguna Anda sendiri, sehingga Anda dapat mengelola izin Identity and Access Management secara terpusat dari project yang berisi akun layanan yang dikelola pengguna.

Anda hanya dapat membuat sink yang menggunakan akun layanan yang dikelola pengguna jika tujuan sink adalah bucket log atau project Google Cloud. Contoh dalam dokumen ini menggambarkan cara menyiapkan sink yang menggunakan akun layanan yang dikelola pengguna yang tujuannya adalah bucket log.

Sebelum memulai

  1. Untuk menggunakan contoh command line dalam panduan ini, instal dan konfigurasikan Google Cloud CLI.

  2. Pastikan Anda memiliki akun layanan yang dikelola pengguna. Untuk mengetahui informasi tentang cara membuat akun layanan, lihat Membuat akun layanan.

  3. Untuk menggunakan perintah dalam dokumen ini, identifikasi nilai berikut:

    • DESTINATION_PROJECT_ID: Project ID project yang berisi bucket log Anda.

    • CUSTOM_SA_PROJECT_ID: Project ID untuk project yang berisi akun layanan yang dikelola pengguna Anda.

    • SINK_PROJECT_ID: Project ID project tempat Anda berencana membuat sink log.

    • CUSTOM_SA: Akun layanan yang dikelola pengguna. Untuk mengetahui informasi tentang cara membuat akun layanan, lihat Membuat akun layanan.

      Format untuk akun layanan yang dikelola pengguna akan terlihat seperti berikut:

      SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    • LOGGING_SA: Akun layanan Logging default. Untuk mendapatkan email ini, jalankan perintah berikut:

         gcloud logging settings describe --project=SINK_PROJECT_ID
      

      Output-nya mencakup informasi berikut tentang akun layanan Anda:

      loggingServiceAccountId: serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com

    • BUCKET_NAME: Nama bucket log Anda.

      Jalur tujuan sink untuk bucket log terlihat seperti berikut:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME

  4. Pada project yang berisi akun layanan yang dikelola pengguna, pastikan batasan boolean kebijakan organisasi iam.disableCrossProjectServiceAccountUsage tidak diterapkan. Secara default, batasan ini diterapkan. Untuk menonaktifkan batasan ini agar Anda dapat melampirkan akun layanan ke resource di project lain, jalankan perintah berikut:

      gcloud resource-manager org-policies disable-enforce \
      iam.disableCrossProjectServiceAccountUsage \
      --project=CUSTOM_SA_PROJECT_ID
    

    Untuk informasi selengkapnya tentang cara mengaktifkan akun layanan di seluruh project, lihat Mengaktifkan akun layanan untuk disertakan di seluruh project.

Memberikan peran IAM

Bagian ini menjelaskan prasyarat untuk membuat sink yang menggunakan akun layanan yang dikelola pengguna.

Pada project yang berisi bucket log yang merupakan tujuan sink log, lakukan hal berikut:

  1. Berikan peran Penulis Bucket Log (roles/logging.bucketWriter) ke akun layanan yang dikelola pengguna. Peran ini memungkinkan akun layanan yang dikelola pengguna menulis log ke bucket log:

     gcloud projects add-iam-policy-binding DESTINATION_PROJECT_ID \
     --member="serviceAccount:CUSTOM_SA" \
     --role="roles/logging.bucketWriter"
    

Di project Google Cloud tempat Anda ingin membuat sink log yang menggunakan akun layanan yang dikelola pengguna, lakukan hal berikut:

  1. Berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke akun layanan Cloud Logging pada akun layanan yang dikelola pengguna:

      gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
      --project=CUSTOM_SA_PROJECT_ID \
      --member="serviceAccount:LOGGING_SA" \
      --role="roles/iam.serviceAccountTokenCreator"
    

    Perintah sebelumnya memungkinkan akun layanan Logging meniru akun layanan yang dikelola pengguna menggunakan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator).

    Peniruan identitas akun layanan melibatkan dua akun utama: akun layanan yang tidak memiliki izin untuk mengakses resource, dan akun layanan yang memiliki izin untuk mengakses resource. Dalam hal ini, akun layanan yang dikelola pengguna adalah akun yang berisi hak istimewa karena memiliki kemampuan untuk menulis log ke bucket log dalam project tujuan. Akun layanan Logging memiliki hak istimewa untuk merutekan log.

    Untuk mengetahui informasi selengkapnya tentang peran Service Account Token Creator, lihat Peran untuk mengelola dan meniru identitas akun layanan: Peran Token Creator Akun Layanan.

    Untuk mengetahui informasi selengkapnya tentang peniruan akun layanan, lihat Tentang peniruan akun layanan.

  2. Berikan peran Service Account User (roles/iam.serviceAccountUser) ke akun utama yang membuat sink log. Secara khusus, akun utama memerlukan izin iam.serviceAccounts.actAs di akun layanan:

     gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
     --member 'user:user@example.com' \
     --role "roles/iam.serviceAccountUser"
    

    Perintah sebelumnya memungkinkan pengguna menjalankan operasi sebagai akun layanan yang dikelola pengguna.

    Untuk mengetahui informasi selengkapnya tentang peran Service Account User, lihat Peran untuk mengelola dan meniru identitas akun layanan: Peran Service Account User.

Membuat sink log yang menggunakan akun layanan yang dikelola pengguna

gcloud

Untuk membuat sink dengan akun layanan yang dikelola pengguna, ganti variabel dengan informasi Anda, dan jalankan perintah gcloud logging sinks create dengan flag --custom-writer-identity:

    gcloud logging sinks create SINK_NAME logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
    --custom-writer-identity=serviceAccount:CUSTOM_SA \
    --project=SINK_PROJECT_ID

API

  1. Untuk membuat sink log di project Google Cloud, gunakan projects.sinks.create di Logging API. Pada objek LogSink, teruskan parameter customWriterIdentity, lalu berikan nilai yang diperlukan dan sesuai dalam isi permintaan metode:

    • name: ID untuk sink. Perlu diketahui bahwa setelah membuat sink, Anda tidak dapat mengganti nama sink, tetapi dapat menghapusnya dan membuat sink baru.
    • destination: Bucket log tempat Anda ingin log dirutekan. Jalur tujuan memiliki format berikut:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
      
  2. Panggil projects.sinks.create untuk membuat sink.

Untuk mengetahui informasi selengkapnya tentang cara membuat sink menggunakan Logging API, lihat dokumentasi referensi LogSink.

Memastikan bahwa sink Anda merutekan log

Di bagian ini, Anda akan menggunakan gcloud CLI untuk menulis dan membaca entri log guna memverifikasi bahwa sink Anda merutekan log dengan benar.

Untuk memastikan bahwa sink Anda merutekan log dengan benar, lakukan hal berikut:

  1. Ganti variabel dengan informasi Anda sendiri dan tulis contoh entri log menggunakan perintah gcloud logging write:

    gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
    

    Perintah sebelumnya akan menampilkan pesan berikut:

    Created log entry.

  2. Untuk membaca entri log yang baru saja Anda tulis, jalankan perintah berikut:

    gcloud logging read 'textPayload="Test log entry"' \
    --bucket=BUCKET_NAME --location=LOCATION \
    --view=_AllLogs --project=SINK_PROJECT_ID
    

Langkah selanjutnya