Memecahkan masalah autentikasi workload ke workload


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

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses yang digunakan untuk memverifikasi identitas Anda untuk mengakses Google Cloud layanan 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

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 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 menyelesaikannya, 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, berarti VM mendukung identitas beban kerja terkelola, tetapi fitur tersebut tidak diaktifkan. Untuk mengaktifkan fitur 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 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 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 kesalahan karena nilai atribut yang tidak ada atau konfigurasi yang 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 kumpulan CA turunan. 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 turunan.
    • SUBORDINATE_CA_POOL_REGION: region pool CA bawahan.

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

Membuat kueri endpoint server metadata menampilkan error 404

Jika Anda mendapatkan respons 404 saat mengkueri 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 HTTP 404 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 tindakan berikut:

  • Jika responsnya adalah kode error HTTP 404 dengan pesan error workload certificate feature not enabled, berarti 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 pool CA subordinat.
    • SUBORDINATE_CA_POOL_REGION: region pool CA bawahan.

    Output perintah ini harus berisi hal berikut, dengan PROJECT_NUMBER adalah nomor 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 Mengizinkan identitas workload terkelola untuk meminta sertifikat dari kumpulan CA.

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

    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 diupdate setelah membuat VM.

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