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 dalam resource. Namun, jika sink log Anda berada di project yang berbeda, Anda dapat membuat dan mengelola akun layanan yang dikelola pengguna sendiri, yang memungkinkan Anda 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 mengilustrasikan cara menyiapkan sink yang menggunakan akun layanan yang dikelola pengguna dengan tujuan bucket log.

Sebaiknya tinjau konfigurasi sink log Anda saat membuat perubahan pada penyimpanan log. Misalnya, jika Anda menghapus tujuan sink log, hapus sink log yang sesuai.

Sebelum memulai

  1. Di konsol, aktifkan Cloud Shell. Google Cloud

    Aktifkan Cloud Shell

    Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan prompt command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.

  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.

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

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 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 Logs Bucket Writer (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, sehingga dapat meniru akun layanan yang dikelola pengguna, CUSTOM_SA. Akun layanan Cloud Logging default ada di Google Cloud project tempat Anda ingin membuat sink log yang menggunakan akun layanan yang dikelola pengguna.

Untuk mengonfigurasi peniruan 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 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 di project bernama LOG_BUCKET_PROJECT_ID. Akun layanan Logging memiliki hak istimewa untuk merutekan entri log.

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

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

Mengizinkan akun utama menjalankan operasi sebagai akun layanan yang dikelola pengguna

Berikan izin yang diperlukan akun utama yang akan membuat sink 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 Google Cloud project 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 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

Memverifikasi bahwa 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