Mengonfigurasi sink log dengan akun layanan yang dikelola pengguna

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

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 dengan tujuan berupa bucket log.

Sebelum memulai

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pastikan Anda memiliki akun layanan yang dikelola pengguna, lalu tetapkan variabel berikut ke nilai yang sesuai untuk akun layanan yang dikelola pengguna:

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

    • CUSTOM_SA: Alamat email akun layanan yang dikelola pengguna Anda.

    Untuk mengetahui informasi tentang cara membuat akun layanan, lihat Membuat akun layanan.

  3. Pastikan Anda memiliki bucket log yang dapat berfungsi sebagai tujuan sink log, lalu tetapkan variabel berikut ke nilai yang sesuai untuk bucket log Anda. Jika perlu, buat bucket log:

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

    • LOCATION: Lokasi bucket log Anda.

    • BUCKET_NAME: Nama bucket log Anda.

  4. Identifikasi nama akun layanan Logging yang ada di project tempat Anda berencana membuat sink log, lalu tetapkan variabel berikut ke nilai yang sesuai:

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

    • LOGGING_SA: Alamat email akun layanan Logging default. Untuk mendapatkan alamat ini, jalankan perintah berikut:

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      Dalam respons, baris yang dimulai dengan loggingServiceAccountId mencantumkan alamat email akun layanan Anda.

  5. Di project yang berisi akun layanan yang dikelola pengguna Anda, 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 mengetahui informasi selengkapnya tentang cara mengaktifkan akun layanan di seluruh project, lihat Mengaktifkan akun layanan untuk dilampirkan di seluruh project.

  6. Memberikan peran IAM

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

    Mengizinkan akun layanan yang dikelola pengguna menulis entri log ke tujuan sink

    Berikan izin yang diperlukan akun layanan yang dikelola pengguna untuk menulis entri log ke tujuan sink yang akan Anda buat pada langkah berikutnya. Tujuan sink adalah bucket log yang disimpan dalam project bernama LOG_BUCKET_PROJECT_ID.

    Untuk memberikan izin yang diperlukan ke akun layanan yang dikelola pengguna, beri akun layanan tersebut peran Penulis Bucket Log (roles/logging.bucketWriter) di project yang berisi bucket log:

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

    Untuk mengetahui informasi selengkapnya tentang perintah sebelumnya, lihat gcloud projects add-iam-policy-binding.

    Mengonfigurasi peniruan akun layanan

    Konfigurasi akun layanan Cloud Logging default, LOGGING_SA, agar dapat meniru identitas akun layanan yang dikelola pengguna, CUSTOM_SA. Akun layanan Cloud Logging default ada di project tempat Anda ingin membuat sink log yang menggunakan akun layanan yang dikelola pengguna. Google Cloud

    Untuk mengonfigurasi peniruan identitas akun layanan, berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) kepada akun layanan Cloud Logging di 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'
    

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

    Untuk mengetahui informasi selengkapnya tentang peran Pembuat Token Akun Layanan, lihat Peran Pembuat Token Akun Layanan.

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

    Mengizinkan akun utama menjalankan operasi sebagai akun layanan yang dikelola pengguna

    Beri akun utama yang akan membuat sink izin yang diperlukan untuk menjalankan operasi sebagai akun layanan yang dikelola pengguna.

    Untuk memberikan izin yang diperlukan, berikan peran Service Account User (roles/iam.serviceAccountUser) kepada akun utama di project Google Cloud yang menyimpan akun layanan yang dikelola pengguna, CUSTOM_SA_PROJECT_ID.

    Sebelum menjalankan perintah berikut, lakukan penggantian berikut:

    • PRINCIPAL: ID untuk akun utama yang ingin Anda berikan peran. ID utama biasanya memiliki bentuk berikut: PRINCIPAL-TYPE:ID. Misalnya, user:my-user@example.com. Untuk mengetahui daftar lengkap format yang dapat dimiliki PRINCIPAL, lihat ID utama.

    Jalankan perintah gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
    --project=CUSTOM_SA_PROJECT_ID \
    --member='PRINCIPAL' \
    --role='roles/iam.serviceAccountUser'
    

    Jika Anda menggunakan peran khusus, akun utama memerlukan izin iam.serviceAccounts.actAs.

    Untuk mengetahui informasi selengkapnya tentang peran Service Account User, lihat Peran Service Account User.

    Membuat sink log yang menggunakan akun layanan yang dikelola pengguna

    Untuk membuat sink dengan akun layanan yang dikelola pengguna, jalankan perintah gcloud logging sinks create dan sertakan opsi --custom-writer-identity.

    Sebelum menjalankan perintah berikut, lakukan penggantian berikut:

    • SINK_NAME: Nama sink log.

    Jalankan perintah gcloud logging sinks create:

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

    Pastikan sink Anda merutekan entri log

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

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

    1. Jalankan perintah gcloud logging write:

      Sebelum menjalankan perintah berikut, lakukan penggantian berikut:

      • LOG_NAME: Nama log. Misalnya, Anda dapat menetapkan kolom ini ke mylog.

      Jalankan perintah gcloud logging write:

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

      Perintah sebelumnya 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 berikutnya