Memecahkan masalah autentikasi workload ke workload

Dokumen ini menjelaskan cara memecahkan masalah error umum terkait Mengautentikasi beban kerja ke beban kerja lain melalui mTLS.

Untuk mengetahui informasi tambahan, lihat Memecahkan Masalah Workload Identity Federation.

Sebelum memulai

  • Siapkan autentikasi jika Anda belum melakukannya. Autentikasi memverifikasi identitas Anda untuk mengakses layanan Google Cloud dan API. Untuk menjalankan kode atau sampel dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine dengan memilih salah satu opsi berikut:
    1. Instal Google Cloud CLI. Setelah penginstalan, inisialisasi Google Cloud CLI dengan menjalankan perintah berikut:

      gcloud init

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

    2. Tetapkan region dan zona default.

Direktori kredensial yang dibuat tidak ada

Jika Anda mendapatkan error bahwa direktori /var/run/secrets/workload-spiffe-credentials tidak ada, lakukan hal berikut:

  1. Pastikan instance komputasi Anda mendukung autentikasi workload-ke-workload dengan menggunakan salah satu antarmuka berikut untuk memverifikasi bahwa identitas workload terkelola diaktifkan:

    Konsol

    1. Di konsol Google Cloud , buka halaman VM instances.

      Buka instance VM

    2. Di kolom Nama pada halaman Instance VM, klik nama instance untuk melihat detail tambahan tentang instance.

    3. Di bagian Security and access pada halaman Details, verifikasi bahwa "Workload identity certificates" memiliki nilai "Enabled".

    gcloud

    Untuk melihat apakah fitur identitas workload terkelola diaktifkan untuk instance compute, gunakan perintah gcloud alpha compute instances describe.

    gcloud alpha compute instances describe INSTANCE_NAME \
        --zone=ZONE \
        --format="table(name,zone,identityCertificate)"
    

    Ganti kode berikut:

    • INSTANCE_NAME: nama instance.

    • ZONE: zona tempat instance berada.

    REST

    Untuk melihat detail instance komputasi, buat permintaan GET ke metode instances.get. Dengan menambahkan parameter kueri $fields ke permintaan, Anda dapat membatasi output hanya ke kolom yang diinginkan.

    GET https://compute.googleapis.com/compute/alpha/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME$fields=name,identityCertificate,identity
    

    Ganti kode berikut:

    • PROJECT_ID: ID project tempat instance berada

    • ZONE: zona tempat instance berada

    • INSTANCE_NAME: nama instance

  2. Tinjau nilai instance untuk identityCertificate dan identity.

  3. Jika properti identityCertificate disetel ke false, maka instance komputasi ini tidak mendukung fitur ini.

    Untuk mengatasi masalah ini, buat instance baru yang mendukung autentikasi workload-to-workload. Untuk mengetahui detailnya, lihat Mengaktifkan identitas workload terkelola di VM yang ada.

  4. Pastikan VM menjalankan OS tamu dengan agen tamu Compute Engine versi 20231103.01 atau yang lebih baru. Gunakan gcloud CLI untuk melihat output port serial guna menentukan versi agen tamu Compute Engine saat ini:

    gcloud compute instances get-serial-port-output INSTANCE_NAME | grep "GCE Agent Started"
    

    Ganti INSTANCE_NAME dengan nama instance komputasi.

    Untuk mengupdate agen tamu Compute Engine, lihat Memperbarui lingkungan tamu.

  5. Periksa log layanan untuk memverifikasi bahwa timer systemd gce-workload-cert-refresh.timer berhasil mengambil kredensial beban kerja dan paket kepercayaan.

    # View timer logs to see when the gce-workload-cert-refresh.timer last ran
    journalctl -u gce-workload-cert-refresh.timer
    
    # View service logs from gce-workload-cert-refresh.service
    journalctl -u gce-workload-cert-refresh.service
    

Direktori kredensial yang dihasilkan hanya berisi file config_status

Direktori kredensial yang dibuat, /var/run/secrets/workload-spiffe-credentials, mungkin hanya berisi config_status karena berbagai alasan. Gunakan langkah-langkah berikut untuk memecahkan masalah ini.

  1. Periksa isi file config_status untuk memastikan fitur identitas beban kerja terkelola diaktifkan. Jika fitur tidak diaktifkan menggunakan nilai yang sesuai, file log akan berisi pesan error workload certificate feature not enabled.

    Untuk mengatasi masalah ini, buat instance komputasi baru yang mendukung autentikasi workload ke workload, menggunakan salah satu metode berikut:

  2. Periksa isi file config_status untuk memastikan tidak ada kesalahan karena nilai atribut tidak ada atau konfigurasi tidak valid untuk penerbitan sertifikat atau konfigurasi tepercaya. Jika error tersebut ada, perbarui nilai konfigurasi dengan mengikuti langkah-langkah di Memperbarui konfigurasi penerbitan dan kepercayaan sertifikat.

  3. Pastikan izin yang benar diberikan kepada identitas workload terkelola di workload identity pool untuk mengakses pool CA subordinat. Gunakan perintah berikut:

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
       --location=SUBORDINATE_CA_POOL_REGION
    

    Ganti kode berikut:

    • SUBORDINATE_CA_POOL_ID: ID untuk pool CA bawahan.
    • SUBORDINATE_CA_POOL_REGION: region pool CA bawahan.

    Output perintah ini harus berisi hal berikut:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      role: roles/privateca.workloadCertificateRequester
    

    Pada contoh sebelumnya:

    • PROJECT_NUMBER adalah nomor project Anda.
    • POOL_ID adalah ID workload identity pool.

    Jika Anda tidak melihat output yang serupa dengan contoh sebelumnya, berikan izin yang diperlukan seperti yang dijelaskan dalam Mengizinkan identitas workload terkelola untuk meminta sertifikat dari kumpulan CA.

  4. Jika file config_status tidak berisi pesan error, periksa nilai iam.googleapis.com/workload-identity dalam file.Nilai tersebut harus cocok dengan nilai berikut:

    spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
    

    Pada contoh sebelumnya:

    • PROJECT_NUMBER adalah nomor project untuk project yang berisi managed workload identity pool.
    • POOL_ID adalah ID workload identity pool.
    • NAMESPACE_ID adalah ID namespace di workload identity pool.
    • MANAGED_IDENTITY_ID adalah ID identitas workload terkelola.

    Jika nilai untuk iam.googleapis.com/workload-identity salah, Anda harus membuat instance komputasi baru dengan nilai yang benar karena nilai identitas terkelola hanya dapat diperbarui selama pembuatan instance.

  5. Jika file config_status tidak berisi pesan error, pastikan konfigurasi kepercayaan berisi entri yang valid untuk domain kepercayaan SPIFFE POOL_ID.global.PROJECT_NUMBER.workload.id.goog, yang sesuai dengan domain kepercayaan SPIFFE pada identitas terkelola yang ditetapkan ke instance komputasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan konfigurasi kepercayaan.

  6. Jika file config_status berisi pesan error dengan kode error INTERNAL_ERROR, hubungi Cloud Customer Care atau kontak Google Cloud Anda dengan menyertakan pesan error tersebut.