Mengautentikasi beban kerja ke beban kerja lain melalui mTLS


Dokumen ini menjelaskan cara menyiapkan penyediaan otomatis dan pengelolaan siklus proses identitas beban kerja terkelola untuk Compute Engine. Anda mengonfigurasi kumpulan CA untuk menerbitkan sertifikat menggunakan Certificate Authority Service (CA), yang merupakan layanan Google Cloud skalabel dan sangat tersedia yang menyederhanakan dan mengotomatiskan deployment, pengelolaan, dan keamanan layanan CA. Setiap VM disediakan dengan kredensial X.509 dari kumpulan CA yang dikonfigurasi. Kredensial ini kemudian dapat digunakan untuk membuat koneksi mTLS.

Dengan identitas workload terkelola untuk Compute Engine, Anda dapat menerapkan komunikasi yang saling diautentikasi dan dienkripsi antara dua VM Compute Engine. Aplikasi workload yang berjalan di VM yang dikonfigurasi dapat menggunakan kredensial X.509 untuk mTLS per VM. Sertifikat mTLS ini dirotasi dan dikelola secara otomatis untuk Anda oleh Certificate Authority Service.

Sebelum memulai

  • Minta akses ke pratinjau identitas workload terkelola.

  • Konfigurasi Google Cloud CLI.

    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.

  • Konfigurasi Google Cloud CLI untuk menggunakan project yang diizinkan untuk penagihan dan kuota.

      gcloud config set billing/quota_project PROJECT_ID

    Ganti PROJECT_ID dengan ID project yang ditambahkan ke daftar yang diizinkan untuk pratinjau identitas beban kerja terkelola.

  • Tinjau dokumentasi Ringkasan identitas workload terkelola.
  • Enable the Compute Engine API:

    gcloud services enable compute.googleapis.com

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk membuat VM yang menggunakan sertifikat identitas beban kerja terkelola untuk autentikasi ke beban kerja lain, minta administrator Anda untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Ringkasan

Untuk menggunakan identitas workload terkelola bagi aplikasi Anda, Anda harus melakukan tugas berikut:

  1. Administrator Keamanan:

  2. Compute Administrator:

Mengonfigurasi identitas workload terkelola di Identity and Access Management

  • Ikuti petunjuk di Mengonfigurasi autentikasi identitas workload terkelola .

    Petunjuk ini menjelaskan cara menyelesaikan tindakan berikut:

    • Membuat workload identity pool.
    • Buat namespace di workload identity pool. Anda menggunakan namespace untuk membuat batas administratif untuk identitas beban kerja terkelola, misalnya, namespace untuk setiap aplikasi yang dimiliki oleh organisasi Anda.
    • Buat identitas workload terkelola di namespace di workload identity pool. Misalnya, Anda dapat membuat namespace untuk aplikasi dan membuat identitas terkelola dalam namespace tersebut untuk mikroservice yang mendukung aplikasi tersebut.
    • Membuat akun layanan. VM Compute Engine dapat diberi otorisasi untuk menerima identitas beban kerja terkelola berdasarkan akun layanan yang terpasang ke VM. Google Cloud
    • Buat kebijakan pengesahan workload yang memungkinkan workload Anda dikeluarkan kredensial untuk identitas workload terkelola. Agar kredensial dikeluarkan untuk identitas workload yang dikelola, workload harus berada dalam project tertentu dan akun layanannya harus dilampirkan.
    • Konfigurasi Certificate Authority Service untuk menerbitkan sertifikat bagi identitas workload terkelola:
      • Mengonfigurasi kumpulan CA root
      • Mengonfigurasi CA subordinat
      • Memberi otorisasi identitas workload terkelola untuk meminta sertifikat dari kumpulan CA

Dapatkan file konfigurasi untuk mengupload metadata partner

Administrator keamanan Anda membuat file JSON yang berisi hal berikut:

File ini harus diberi nama CONFIGS.json. Anda menggunakan file ini saat membuat template instance untuk MIG atau saat membuat VM individual.

File CONFIGS.json akan terlihat seperti berikut:

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "rsa-2048"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

Mengaktifkan identitas workload terkelola untuk Grup Instance Terkelola (MIG)

Grup instance terkelola (MIG) adalah grup instance virtual machine (VM) yang Anda perlakukan sebagai satu entity. Setiap VM dalam MIG dibuat menggunakan template instance. Untuk mengizinkan VM di MIG menggunakan identitas beban kerja terkelola, Anda menentukan konfigurasi di template instance.

Membuat template instance

Buat template instance dengan mengaktifkan fitur identitas beban kerja terkelola. Kemudian, gunakan template ini untuk membuat grup instance terkelola (MIG).

gcloud

Gunakan perintah gcloud beta compute instance-templates create untuk membuat template instance baru yang mengaktifkan workload identity terkelola.

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --metadata enable-workload-certificate=true \
    --partner-metadata-from-file CONFIGS.json

Anda dapat menambahkan flag tambahan saat membuat template instance untuk menyesuaikan VM yang dibuatnya, seperti menentukan jenis mesin dan image, alih-alih menggunakan nilai default.

Ganti kode berikut:

  • INSTANCE_TEMPLATE_NAME: nama untuk template baru.
  • SERVICE_ACCOUNT_NAME: nama akun layanan yang diizinkan untuk menerima identitas terkelola.
  • PROJECT_ID: ID project tempat akun layanan dibuat.
  • CONFIGS.json: File konfigurasi yang berisi konfigurasi penerbitan sertifikat, konfigurasi kepercayaan, dan workload identity terkelola.

Untuk mengetahui informasi selengkapnya, lihat Membuat template instance.

Buat grup instance terkelola dari template

Buat grup instance terkelola yang menggunakan template instance yang mengaktifkan identitas beban kerja terkelola. Untuk mengetahui detail cara membuat template instance, lihat Membuat template instance.

gcloud

Buat MIG menggunakan template instance dan perintah gcloud compute instance-groups managed create.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

Ganti kode berikut:

  • INSTANCE_GROUP_NAME: ID unik untuk grup instance terkelola. Untuk detail tentang nama yang valid, lihat Beri nama resource.
  • SIZE: ukuran grup instance terkelola
  • INSTANCE_TEMPLATE_NAME: nama template instance yang akan digunakan saat membuat VM di MIG.
  • ZONE: zona tempat VM dibuat

Untuk mengetahui informasi mendetail tentang cara membuat MIG, lihat Skenario dasar untuk membuat grup instance terkelola (MIG)

Mengaktifkan identitas workload terkelola untuk VM individual

Anda dapat mengaktifkan identitas beban kerja terkelola untuk VM baik saat membuat VM atau dengan memperbarui metadata partner untuk VM yang ada.

Membuat VM dengan mengaktifkan identitas workload terkelola

Saat membuat VM, untuk mengaktifkan fitur identitas workload terkelola bagi VM, Anda harus melakukan hal berikut:

  • Tentukan akun layanan yang akan digunakan VM
  • Tetapkan atribut metadata enable-workload-certificate ke true
  • Tentukan informasi konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan sebagai metadata partner.

gcloud

Gunakan perintah gcloud beta compute instances create untuk membuat VM baru. Gunakan file CONFIGS.json yang disediakan oleh administrator keamanan Anda, atau dibuat dengan mengikuti petunjuk di Membuat file konfigurasi untuk mengupload metadata partner.

  1. Buat VM dengan mengaktifkan fitur identitas workload terkelola.

    gcloud beta compute instances create INSTANCE_NAME \
       --zone=INSTANCE_ZONE \
       --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --metadata enable-workload-certificate=true \
       --partner-metadata-from-file CONFIGS.json
    

    Anda dapat menambahkan baris tambahan ke perintah untuk mengonfigurasi VM, seperti jenis mesin dan image, alih-alih menggunakan nilai default. Untuk mengetahui informasi selengkapnya, lihat Membuat dan memulai instance VM.

    Ganti kode berikut:

    • INSTANCE_NAME: nama unik untuk VM. Untuk mengetahui detail tentang nama instance yang valid, lihat Beri nama resource.
    • INSTANCE_ZONE: zona tempat VM dibuat.
    • SERVICE_ACCOUNT_NAME: nama akun layanan yang diizinkan untuk menerima identitas terkelola.
    • PROJECT_ID: ID project tempat akun layanan dibuat.
    • CONFIGS.json: Nama file konfigurasi yang berisi konfigurasi penerbitan sertifikat, konfigurasi kepercayaan, dan konfigurasi managed workload identity.

Mengaktifkan identitas workload terkelola di VM yang ada

Untuk mengaktifkan identitas workload terkelola bagi VM yang ada, perbarui VM untuk mengonfigurasi hal berikut:

  • Jika VM belum memiliki akun layanan yang terpasang, buat dan pasang akun layanan ke VM.
  • Tetapkan atribut metadata enable-workload-certificate ke true.
  • Tentukan informasi konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan sebagai metadata partner.
  • Mulai ulang VM.

gcloud

Tugas ini menggunakan file CONFIGS.json yang disediakan oleh administrator keamanan Anda, atau dibuat dengan mengikuti petunjuk di Membuat file konfigurasi untuk mengupload metadata partner.

  1. Jika VM belum memiliki akun layanan yang terpasang, pasang akun layanan ke VM.

  2. Perbarui metadata untuk VM yang ada guna mengaktifkan identitas beban kerja terkelola.

    gcloud beta compute instances add-metadata VM_NAME \
       --zone=ZONE \
       --metadata enable-workload-certificate=true
    

    Ganti kode berikut:

    • VM_NAME: nama VM
    • ZONE: zona tempat VM berada
  3. Perbarui konfigurasi untuk VM yang ada guna menambahkan file konfigurasi.

    gcloud beta compute instances update VM_NAME \
       --zone=ZONE \
       --partner-metadata-from-file CONFIGS.json
    

    Ganti kode berikut:

    • VM_NAME: nama VM
    • ZONE: zona tempat VM berada
    • CONFIGS.json: File konfigurasi yang berisi konfigurasi penerbitan sertifikat, konfigurasi kepercayaan, dan workload identity terkelola.
  4. Menghentikan VM.

    gcloud beta compute instances stop VM_NAME \
       --zone=ZONE
    

    Ganti kode berikut:

    • VM_NAME: nama VM
    • ZONE: zona tempat VM berada.
  5. Mulai VM.

    gcloud beta compute instances start VM_NAME \
       --zone=ZONE
    

    Ganti kode berikut:

    • VM_NAME: nama VM
    • ZONE: zona tempat VM berada.

Mengakses kredensial workload di VM Linux

Setelah berhasil mengonfigurasi autentikasi workload-ke-workload menggunakan mTLS, Anda dapat mengakses kredensial yang dikeluarkan di VM Anda.

Ada dua cara untuk mengakses kredensial identitas workload terkelola Compute Engine dan paket kepercayaan terkait:

  • Sistem file di VM
  • Server metadata Compute Engine

Mengakses kredensial workload dan paket kepercayaan menggunakan sistem file di VM

Metode ini menempatkan kredensial X.509 dan paket kepercayaan di jalur tertentu dalam sistem file VM. Aplikasi dapat langsung membaca kredensial dan paket kepercayaan dari sistem file. Untuk contoh cara mengambil kredensial, lihat contoh berikut di GitHub:

VM harus menjalankan agen tamu Compute Engine versi 20231103.01 atau yang lebih baru. Gunakan perintah berikut untuk memeriksa versi agen tamu Compute Engine di VM Anda:

gcloud beta compute instances get-serial-port-output INSTANCE_NAME \
   --zone=ZONE | grep "GCE Agent Started"

Jika versi agen tamu kurang dari 20231103.01, Anda dapat memperbaruinya dengan mengikuti petunjuk di Memperbarui lingkungan tamu.

Untuk menyediakan kredensial workload dan paket kepercayaan di sistem file VM, selesaikan langkah-langkah berikut:

  1. Instal atau update agen tamu Compute Engine ke versi 20231103.01 atau yang lebih baru. Agen tamu melakukan hal berikut:

    • Mengambil kredensial dan paket kepercayaan secara otomatis dari server metadata Compute Engine.
    • Memastikan penulisan atomik ke sistem file saat memperbarui sertifikat X.509 dan kunci pribadi yang sesuai.
    • Memuat ulang kredensial dan paket kepercayaan secara otomatis, misalnya, saat sertifikat mTLS dirotasi.
  2. Setelah Anda menginstal atau mengupdate agen tamu Compute Engine di OS tamu, tugas refresh workload akan membuat direktori /var/run/secrets/workload-spiffe-credentials dan menetapkan izin direktori ke 0755 (rwxr-xr-x).

    Direktori tersebut berisi file berikut yang dibuat dengan izin 0644 (rw-r--r--):

    • private_key.pem: kunci pribadi berformat PEM
    • certificates.pem: paket sertifikat X.509 berformat PEM yang dapat ditampilkan ke VM lain sebagai rantai sertifikat klien, atau digunakan sebagai rantai sertifikat server.
    • ca_certificates.pem: paket sertifikat X.509 berformat PEM untuk digunakan sebagai anchor tepercaya saat memvalidasi sertifikat peer.

      spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      
    • config_status: file log yang berisi pesan error.

  3. Aplikasi dapat membaca sertifikat, kunci pribadi, dan paket kepercayaan dari sistem file secara langsung untuk membuat koneksi mTLS.

Mengakses kredensial beban kerja dan paket kepercayaan menggunakan server metadata

Aplikasi yang berjalan di VM Compute Engine dapat langsung mengirim kueri ke endpoint server metadata dan mengambil kredensial serta paket kepercayaan. Aplikasi bertanggung jawab untuk memeriksa endpoint server metadata secara berkala untuk mendapatkan kredensial baru dan update pada paket kepercayaan.

Server metadata Compute Engine mengekspos tiga endpoint HTTP untuk memungkinkan penggunaan fitur identitas workload terkelola oleh aplikasi yang berjalan di dalam VM.

  • gce-workload-certificates/config-status: Endpoint yang berisi error dalam nilai konfigurasi yang diberikan melalui metadata VM.
  • gce-workload-certificates/workload-identities: Endpoint identitas yang dikelola oleh bidang kontrol Compute Engine. Endpoint ini berisi sertifikat X.509 dan kunci pribadi untuk domain tepercaya VM.
  • gce-workload-certificates/trust-anchors: Endpoint yang berisi serangkaian sertifikat tepercaya untuk validasi rantai sertifikat X.509 peer.

Untuk mempelajari lebih lanjut cara membuat kueri metadata untuk instance VM, lihat artikel Tentang metadata VM.

Untuk mengakses kredensial workload dan paket kepercayaan menggunakan server metadata, aplikasi Anda harus melakukan hal berikut:

  1. Buat kueri endpoint gce-workload-certificates/config-status. Pastikan kode respons HTTP adalah 200 dan respons tidak berisi error partnerMetadataConfigsErrors. Jika error tersebut ada, perbarui konfigurasi yang sesuai dengan nilai yang valid dengan mengikuti langkah-langkah yang dibahas dalam Memperbarui konfigurasi penerbitan dan kepercayaan sertifikat.

    Untuk memeriksa nilai, Anda dapat menjalankan perintah berikut di VM:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    

    Endpoint config-status menampilkan respons JSON dengan struktur berikut:

    {
        "partnerMetadataConfigsErrors": {
            "errors": {  // A map of errors keyed by attribute name.
                "ATTRIBUTE_NAME" : "ERROR_DETAILS",
                ...
            }
        }
    }
    
  2. Buat kueri endpoint gce-workload-certificates/workload-identities. Pastikan kode respons HTTP adalah 200. Endpoint menampilkan respons JSON dengan struktur berikut:

    {
     "workloadCredentials": {  // Credentials for the VM's trust domains
       "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID": {
          "certificatePem" : "X.509 certificate or certificate chain",
          "privateKeyPem" : "Private for X.509 leaf certificate"
       }
     }
    }
    

    Ekstrak certificatePem dan privateKeyPem. Kedua nilai harus dibaca dari respons yang sama untuk menghindari ketidakcocokan antara kunci pribadi dan kunci publik jika identitas workload terkelola diperbarui oleh infrastruktur Compute Engine.

  3. Buat kueri endpoint gce-workload-certificates/trust-anchors. Pastikan kode respons HTTP adalah 200. Respons hanya akan berisi anchor kepercayaan untuk domain kepercayaan SPIFFE, jika ditentukan. Jika tidak, kueri akan menampilkan error. Endpoint trust-anchors menampilkan respons JSON dengan struktur berikut:

    {
        "trustAnchors": {  // Trust bundle for the VM's trust domains
            "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
                "trustAnchorsPem" : "Trust bundle containing the X.509
                roots certificates"
            }
        }
    }
    

    Konten trustAnchorsPem berisi paket kepercayaan yang kemudian dapat digunakan untuk mengautentikasi kredensial X.509 peer saat membuat koneksi mTLS.

Memperbarui kredensial dan paket kepercayaan

Bidang kontrol Compute Engine secara otomatis merotasi kredensial identitas beban kerja terkelola dan anchor kepercayaan secara berkala.

Jika aplikasi Anda menggunakan sistem file untuk mengakses kredensial workload dan paket kepercayaan, agen tamu Compute Engine akan otomatis memperbarui kredensial dan paket kepercayaan, misalnya, saat sertifikat mTLS di-rotate.

Jika aplikasi Anda membuat kueri server metadata, aplikasi yang berjalan di VM harus membuat kueri endpoint server metadata secara berkala untuk mendapatkan kumpulan kredensial identitas beban kerja terkelola dan paket kepercayaan terbaru. Jika tidak dilakukan, aplikasi dapat rusak karena masa berlaku sertifikat habis atau perubahan pada paket kepercayaan, yang dapat menyebabkan kegagalan pembentukan koneksi mTLS. Google merekomendasikan agar aplikasi membuat kueri server metadata untuk kredensial managed workload identity dan paket kepercayaan setiap 5 menit.

Memperbarui konfigurasi kepercayaan dan penerbitan sertifikat

Anda dapat mengubah konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan untuk VM yang menggunakan identitas beban kerja terkelola.

Memperbarui template instance untuk grup instance terkelola

Untuk memperbarui nilai konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan di template instance, Anda harus membuat template baru dengan nilai baru. Oleh karena itu, memperbarui konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan untuk grup instance terkelola (MIG) yang ada tidak didukung.

Memperbarui VM Compute Engine satu per satu

Untuk memperbarui konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan, perbarui konten file CONFIGS.json dan gunakan perintah gcloud beta compute instances update untuk menerapkan pembaruan:

gcloud beta compute instances update INSTANCE_NAME \
    --partner-metadata-from-file FILENAME.json

Ganti kode berikut:

  • INSTANCE_NAME: Nama VM yang nilai konfigurasinya Anda update
  • FILENAME: Nama file config yang diubah, misalnya CONFIGS.json

Memecahkan masalah

Untuk menemukan metode mendiagnosis dan menyelesaikan error umum terkait pengambilan kredensial workload, lihat dokumentasi Memecahkan masalah autentikasi workload ke workload.

Langkah berikutnya