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, 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 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 log sink, 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 log bucket 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 diawali dengan loggingServiceAccountId mencantumkan alamat email akun layanan Anda.

  5. Dalam 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 sehingga Anda dapat melampirkan akun layanan ke resource dalam 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 dilampirkan di seluruh project.

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 di langkah berikutnya. Tujuan sink akan berupa bucket log yang disimpan di project bernama LOG_BUCKET_PROJECT_ID.

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

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

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

Mengonfigurasi peniruan akun layanan

Konfigurasikan akun layanan Cloud Logging default, LOGGING_SA, sehingga dapat meniru identitas akun layanan yang dikelola pengguna, CUSTOM_SA. Akun layanan Cloud Logging default ada di project Google Cloud yang ingin Anda buat sink log yang menggunakan akun layanan yang dikelola pengguna.

Untuk mengonfigurasi peniruan identitas akun layanan, berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke 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 memiliki kemampuan untuk 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 log.

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

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

Mengizinkan akun utama menjalankan operasi sebagai akun layanan yang dikelola pengguna

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

Untuk memberikan izin yang diperlukan, berikan akun utama peran Pengguna Akun Layanan (roles/iam.serviceAccountUser) di project Google Cloud yang menyimpan akun layanan yang dikelola pengguna, CUSTOM_SA_PROJECT_ID.

Sebelum menjalankan perintah berikut, buat 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 kustom, akun utama memerlukan izin iam.serviceAccounts.actAs.

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

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, buat 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

Memverifikasi bahwa sink merutekan log

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

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

  1. Jalankan perintah gcloud logging write:

    Sebelum menjalankan perintah berikut, buat 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 selanjutnya