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 yang sangat tersedia dan skalabel 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 beban kerja 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 Layanan Certificate Authority.

Sebelum memulai

  • Meminta akses ke pratinjau identitas workload terkelola.

  • Konfigurasikan Google Cloud CLI.

    Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init
  • Konfigurasikan 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 guna membuat VM yang menggunakan sertifikat identitas beban kerja terkelola untuk autentikasi ke beban kerja lain, minta administrator 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 harus melakukan tugas berikut:

  1. Administrator Keamanan:

  2. Compute Administrator:

Mengonfigurasi identitas workload terkelola di Identity and Access Management

  • Ikuti petunjuk di Mengonfigurasi autentikasi workload identity terkelola .

    Petunjuk ini menjelaskan cara menyelesaikan hal berikut:

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

Mendapatkan 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. Agar VM di MIG dapat menggunakan identitas beban kerja terkelola, Anda harus menentukan konfigurasi di template instance.

Membuat template instance

Buat template instance dengan mengaktifkan fitur workload identity 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, bukan 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 ID workload terkelola.

Untuk mengetahui informasi selengkapnya, lihat Membuat template instance.

Membuat grup instance terkelola dari template

Buat grup instance terkelola yang menggunakan template instance yang mengaktifkan identitas beban kerja terkelola. Untuk mengetahui detail tentang 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 mengetahui detail tentang nama yang valid, lihat 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 informasi mendetail tentang cara membuat MIG, lihat Skenario dasar untuk membuat grup instance terkelola (MIG)

Mengaktifkan identitas workload terkelola untuk setiap VM

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

Membuat VM dengan identitas workload terkelola yang diaktifkan

Saat membuat VM, untuk mengaktifkan fitur identitas beban kerja terkelola untuk VM, Anda harus melakukan hal berikut:

  • Menentukan akun layanan yang akan digunakan VM
  • Tetapkan atribut metadata enable-workload-certificate ke true
  • Tentukan konfigurasi penerbitan sertifikat dan informasi 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 bagian Membuat file konfigurasi untuk mengupload metadata partner.

  1. Buat VM dengan fitur identitas workload terkelola diaktifkan.

    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, bukan menggunakan nilai default. Untuk mengetahui informasi selengkapnya, baca Membuat dan memulai instance VM.

    Ganti kode berikut:

    • INSTANCE_NAME: nama unik untuk VM. Untuk mengetahui detail tentang nama instance yang valid, lihat Memberi 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 identitas beban kerja terkelola.

Mengaktifkan identitas workload terkelola di VM yang ada

Untuk mengaktifkan identitas beban kerja terkelola bagi VM yang ada, update 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 konfigurasi penerbitan sertifikat dan informasi 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 dilampirkan, lampirkan akun layanan ke VM.

  2. Perbarui metadata untuk VM yang ada guna mengaktifkan Workload Identity 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 ID workload 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.

Ada dua cara untuk mengakses kredensial identitas workload yang dikelola 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 di 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 mengupdatenya dengan mengikuti petunjuk di Memperbarui lingkungan tamu.

Agar kredensial workload dan paket kepercayaan tersedia 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:

    • Otomatis mengambil kredensial dan paket kepercayaan dari server metadata Compute Engine.
    • Memastikan penulisan atomik ke sistem file saat memperbarui sertifikat X.509 dan kunci pribadi yang sesuai.
    • Otomatis memuat ulang kredensial dan paket kepercayaan, 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 kepercayaan 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 mengkueri endpoint server metadata dan mengambil kredensial serta paket kepercayaan. Aplikasi bertanggung jawab untuk memeriksa endpoint server metadata secara berkala untuk menemukan kredensial baru dan update pada trust bundle.

Server metadata Compute Engine mengekspos tiga endpoint HTTP untuk mengaktifkan penggunaan fitur identitas beban kerja 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 platform kontrol Compute Engine. Endpoint ini berisi sertifikat X.509 dan kunci pribadi untuk domain kepercayaan VM.
  • gce-workload-certificates/trust-anchors: Endpoint yang berisi kumpulan 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 di Memperbarui konfigurasi penerbitan dan kepercayaan sertifikat.

    Untuk memeriksa nilainya, 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 tersebut harus dibaca dari respons yang sama untuk menghindari ketidakcocokan antara kunci pribadi dan 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 trust bundle, agen tamu Compute Engine akan otomatis memuat ulang kredensial dan trust bundle, misalnya, saat sertifikat mTLS dirotasi.

Jika aplikasi Anda membuat kueri server metadata, aplikasi yang berjalan di VM harus membuat kueri endpoint server metadata secara berkala untuk mendapatkan kumpulan kredensial workload identity 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 menyarankan agar aplikasi membuat kueri server metadata untuk kredensial workload identity terkelola dan paket kepercayaan setiap 5 menit.

Memperbarui konfigurasi penerbitan dan kepercayaan sertifikat

Anda dapat mengubah konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan untuk VM yang menggunakan workload identity terkelola.

Memperbarui template instance untuk grup instance terkelola

Untuk memperbarui konfigurasi penerbitan sertifikat dan nilai konfigurasi kepercayaan dalam 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.

Mengupdate setiap VM Compute Engine

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

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 konfigurasi yang diubah, misalnya CONFIGS.json

Memecahkan masalah

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

Langkah selanjutnya