Memecahkan masalah autentikasi workload ke workload


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

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:
    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

Direktori kredensial yang dihasilkan tidak ada

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

  1. Pastikan VM Anda mendukung autentikasi workload ke workload dengan menjalankan perintah berikut dari dalam VM.

    curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    
    1. Jika responsnya adalah kode error HTTP 404 dengan pesan error berikut, berarti VM ini tidak mendukung fitur ini.

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
      

      Untuk mengatasinya, buat VM baru yang mendukung autentikasi workload ke workload, menggunakan salah satu metode berikut:

    2. Jika responsnya adalah kode error HTTP 404 dengan pesan error workload certificate feature not enabled, VM mendukung identitas beban kerja terkelola, tetapi fitur tersebut tidak diaktifkan. Untuk mengaktifkan fitur ini di VM, lihat Mengaktifkan identitas workload terkelola di VM yang ada.

  2. 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 VM_NAME | grep "GCE Agent Started"
    

    Ganti VM_NAME dengan nama VM.

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

  3. Periksa log layanan untuk memverifikasi bahwa 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 dihasilkan, /var/run/secrets/workload-spiffe-credentials, mungkin hanya berisi config_status karena berbagai alasan. Gunakan langkah-langkah berikut untuk memecahkan masalah ini.

  1. Periksa konten file config_status untuk memastikan bahwa fitur Workload Identity terkelola diaktifkan. Jika fitur tidak diaktifkan menggunakan metadata VM yang sesuai, file log akan berisi pesan error workload certificate feature not enabled.

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

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

  3. Pastikan izin yang benar diberikan ke identitas workload terkelola di workload identity pool untuk mengakses kumpulan CA dependen. 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 subordinate CA pool.
    • SUBORDINATE_CA_POOL_REGION: region kumpulan CA subordinat.

    Output perintah ini harus berisi hal berikut:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/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 mirip dengan contoh sebelumnya, berikan izin yang diperlukan seperti yang dijelaskan dalam Memberi otorisasi 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 hal 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 workload identity pool terkelola.
    • POOL_ID adalah ID workload identity pool.
    • NAMESPACE_ID adalah ID namespace dalam workload identity pool.
    • MANAGED_IDENTITY_ID adalah ID identitas workload terkelola.

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

  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 VM. 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 pesan error tersebut.

Membuat kueri endpoint server metadata menampilkan error 404

Jika Anda mendapatkan respons 404 saat membuat kueri endpoint workload-identities atau trust-anchors, pastikan VM mendukung identitas workload terkelola dengan menjalankan perintah berikut dari dalam VM:

curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
  • Jika responsnya adalah kode error 404 HTTP dengan pesan error berikut:

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
    

    VM tidak mendukung identitas workload terkelola. Untuk mengatasi masalah ini, lakukan salah satu langkah berikut:

  • Jika responsnya adalah kode error 404 HTTP dengan pesan error workload certificate feature not enabled, VM ini mendukung identitas beban kerja terkelola, tetapi fitur tersebut tidak diaktifkan. Buat VM baru dengan fitur yang diaktifkan, atau buat template instance dan grup instance terkelola baru.

  • Pastikan izin yang benar diberikan ke workload identity pool untuk mengakses kumpulan CA subordinat dengan menjalankan 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 kumpulan CA subordinat.
    • SUBORDINATE_CA_POOL_REGION: region kumpulan CA subordinat.

    Output perintah ini harus berisi hal berikut, dengan PROJECT_NUMBER adalah nomor project dari project Anda dan POOL_ID adalah ID workload identity pool.

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

    Jika output Anda tidak berisi nilai ini, berikan izin yang benar, seperti yang dijelaskan dalam Memberi otorisasi identitas workload terkelola untuk meminta sertifikat dari kumpulan CA.

  • Pastikan nilai iam.googleapis.com/workload-identity sudah benar dan cocok dengan hal berikut:

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

    Jika nilainya tidak cocok, Anda harus membuat VM baru karena nilai identitas terkelola tidak dapat diperbarui setelah membuat VM.

  • Pastikan trust config 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 VM.