Memecahkan masalah autentikasi workload ke workload


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

Sebelum memulai

  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.
    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. Menetapkan 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 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, 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 beban kerja, 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 workload terkelola, tetapi fitur tersebut tidak diaktifkan. Untuk mengaktifkan fitur pada VM, lihat Mengaktifkan identitas workload terkelola pada 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 memperbarui agen tamu Compute Engine, lihat Memperbarui lingkungan tamu.

  3. Periksa log layanan untuk memverifikasi bahwa gce-workload-cert-refresh.timer berhasil mengambil kredensial workload 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 identitas beban kerja terkelola diaktifkan. Jika fitur ini 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 beban kerja, menggunakan salah satu metode berikut:

  2. Periksa konten file config_status untuk memastikan bahwa tidak ada error akibat nilai atribut yang tidak ada atau konfigurasi yang tidak valid untuk penerbitan sertifikat atau konfigurasi kepercayaan. Jika terjadi error tersebut, perbarui nilai konfigurasi dengan mengikuti langkah-langkah di artikel Memperbarui penerbitan sertifikat dan konfigurasi kepercayaan.

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

    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 dari project Anda.
    • POOL_ID adalah ID dari kumpulan workload identity.

    Jika Anda tidak melihat output yang serupa dengan contoh sebelumnya, berikan izin yang diperlukan seperti yang dijelaskan di Mengizinkan identitas beban kerja 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.Nilainya 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 kumpulan workload identity terkelola.
    • POOL_ID adalah ID dari kumpulan workload identity.
    • NAMESPACE_ID adalah ID namespace dalam kumpulan identitas workload.
    • MANAGED_IDENTITY_ID adalah ID identitas workload yang dikelola.

    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 bahwa 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 Layanan Pelanggan Cloud atau kontak Google Cloud Anda yang berisi 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 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 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 ini tidak diaktifkan. Buat VM baru dengan fitur tersebut diaktifkan, atau buat template instance dan grup instance terkelola baru.

  • Pastikan izin yang benar telah diberikan ke kumpulan workload identity untuk mengakses kumpulan CA subordinate 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 dari kumpulan CA subordinate.

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

    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 beban kerja terkelola untuk meminta sertifikat dari kumpulan CA.

  • Pastikan nilai iam.googleapis.com/workload-identity 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 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.