Melakukan autentikasi beban kerja ke beban kerja lain melalui mTLS


Dokumen ini menjelaskan cara menyiapkan penyediaan otomatis dan pengelolaan siklus proses untuk identitas workload terkelola untuk Compute Engine. Anda mengonfigurasi kumpulan CA untuk menerbitkan sertifikat menggunakan Certificate Authority Service (CA), yang merupakan layanan Google Cloud yang 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 beban kerja terkelola untuk Compute Engine, Anda dapat mengimplementasikan komunikasi yang dienkripsi dan dienkripsi bersama antara dua VM Compute Engine. Aplikasi beban kerja yang berjalan pada VM yang dikonfigurasi dapat menggunakan kredensial X.509 untuk mTLS per VM. Sertifikat mTLS ini dirotasi secara otomatis dan dikelola untuk Anda oleh Certificate Authority Service.

Sebelum memulai

  • Minta akses ke pratinjau workload identity terkelola.

  • Mengonfigurasi Google Cloud CLI.

    Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

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

      gcloud config set billing/quota_project PROJECT_ID

    Ganti PROJECT_ID dengan ID project yang telah ditambahkan ke daftar yang diizinkan untuk pratinjau identitas workload 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 Anda perlukan guna membuat VM yang menggunakan sertifikat identitas workload terkelola untuk autentikasi ke workload lain, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

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

Ringkasan

Agar dapat menggunakan identitas workload terkelola untuk aplikasi, Anda harus melakukan tugas berikut:

  1. Administrator Keamanan:

  2. Administrator Compute:

Mengonfigurasi identitas workload terkelola di Identity and Access Management

  • Ikuti petunjuk dalam Mengonfigurasi autentikasi identitas workload terkelola .

    Petunjuk ini menjelaskan cara menyelesaikan hal berikut:

    • Membuat workload identity pool.
    • Buat namespace di kumpulan workload identity. Anda dapat menggunakan namespace untuk membuat batas administratif untuk identitas workload terkelola, misalnya, namespace untuk setiap aplikasi yang dimiliki organisasi Anda.
    • Buat identitas workload terkelola dalam namespace di kumpulan workload identity. Misalnya, Anda dapat membuat namespace untuk aplikasi dan membuat identitas terkelola dalam namespace tersebut untuk microservice yang mendukung aplikasi tersebut.
    • Buat akun layanan. VM Compute Engine dapat diberi otorisasi untuk menerima identitas workload terkelola berdasarkan akun layanan Google Cloud yang terpasang pada VM.
    • Buat kebijakan pengesahan workload yang memungkinkan beban kerja Anda diberi kredensial untuk identitas workload terkelola. Agar menjadi kredensial penerbitan untuk identitas workload terkelola, beban kerja harus berada dalam project yang ditentukan dan memiliki akun layanan yang terkait.
    • Konfigurasikan Certificate Authority Service agar dapat menerbitkan sertifikat untuk identitas workload yang dikelola:
      • Mengonfigurasi kumpulan root CA
      • Mengonfigurasi subordinate CA
      • 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 seharusnya mirip dengan berikut ini:

  {
  "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 beban kerja terkelola untuk Grup Instance Terkelola (MIG)

Grup instance terkelola (MIG) adalah sekelompok instance virtual machine (VM) yang Anda perlakukan sebagai entitas tunggal. Setiap VM dalam MIG dibuat menggunakan template instance. Agar VM di MIG dapat menggunakan identitas workload terkelola, Anda harus 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 alpha compute instance-templates create untuk membuat template instance baru yang memungkinkan identitas workload terkelola.

gcloud alpha 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 lain 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 identitas workload terkelola.

Untuk mengetahui informasi selengkapnya, baca Membuat template instance.

Membuat grup instance terkelola dari template

Buat grup instance terkelola yang menggunakan template instance yang memungkinkan identitas beban kerja terkelola. Untuk mengetahui detail tentang cara membuat template instance, baca artikel 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 Resource nama.
  • SIZE: ukuran grup instance terkelola
  • INSTANCE_TEMPLATE_NAME: nama template instance yang akan digunakan saat membuat VM di MIG.
  • ZONE: zona untuk membuat VM di

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

Mengaktifkan identitas workload terkelola untuk masing-masing VM

Anda dapat mengaktifkan identitas workload terkelola untuk VM baik saat membuat VM maupun dengan memperbarui metadata partner untuk VM yang sudah ada.

Buat VM dengan identitas workload terkelola aktif

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

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

gcloud

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

  1. Buat VM dengan mengaktifkan fitur identitas workload terkelola.

    gcloud alpha 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 lebih lanjut, baca bagian Membuat dan memulai instance VM.

    Ganti kode berikut:

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

Mengaktifkan identitas workload terkelola pada VM yang ada

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

  • Tetapkan atribut metadata enable-workload-certificate ke true
  • Tentukan konfigurasi penerbitan sertifikat dan informasi konfigurasi kepercayaan sebagai metadata partner.

gcloud

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

  1. Perbarui konfigurasi untuk VM yang ada guna mengaktifkan identitas workload terkelola.

    gcloud alpha compute instances update VM_NAME \
       --zone=ZONE \
       --metadata enable-workload-certificate=true \
       --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 identitas workload terkelola.

Mengakses kredensial workload di VM Linux

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

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

  • Sistem file di VM
  • Server metadata Compute Engine

Akses 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 alpha 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.

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:

    • Secara otomatis mengambil kredensial dan paket kepercayaan dari server metadata Compute Engine.
    • Memastikan operasi tulis atomik ke sistem file saat memperbarui sertifikat X.509 dan kunci pribadi yang sesuai.
    • Memperbarui 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 beban kerja 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 trust anchor saat memvalidasi sertifikat pembanding.

      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 workload dan paket kepercayaan menggunakan server metadata

Aplikasi yang berjalan di VM Compute Engine dapat langsung mengkueri endpoint server metadata serta mengambil kredensial dan paket kepercayaan. Aplikasi bertanggung jawab untuk memeriksa endpoint server metadata secara berkala guna menemukan 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 kepercayaan VM.
  • gce-workload-certificates/trust-anchors: Endpoint yang berisi kumpulan sertifikat tepercaya untuk validasi rantai sertifikat pembanding X.509.

Untuk mempelajari lebih lanjut cara membuat kueri metadata untuk instance VM, baca 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 terjadi error tersebut, perbarui konfigurasi yang sesuai dengan nilai yang valid dengan mengikuti langkah-langkah yang dibahas dalam Memperbarui konfigurasi kepercayaan dan penerbitan 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 akan 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 publik jika identitas workload terkelola dimuat ulang oleh infrastruktur Compute Engine.

  3. Buat kueri endpoint gce-workload-certificates/trust-anchors. Pastikan kode respons HTTP adalah 200. Respons hanya akan berisi trust anchor 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 peer X.509 saat membuat koneksi mTLS.

Memperbarui kredensial dan paket kepercayaan

Bidang kontrol Compute Engine otomatis merotasi kredensial identitas workload terkelola dan trust anchor 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 dirotasi.

Jika aplikasi Anda membuat kueri server metadata, aplikasi yang berjalan di VM harus secara berkala membuat kueri endpoint server metadata untuk mendapatkan kumpulan kredensial identitas workload terkelola dan paket kepercayaan terbaru. Jika hal ini tidak dilakukan, aplikasi dapat terganggu karena masa berlaku sertifikat habis atau perubahan pada paket kepercayaan, yang dapat menyebabkan kegagalan pembentukan koneksi mTLS. Google merekomendasikan agar aplikasi membuat kueri ke server metadata untuk kredensial identitas workload terkelola 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 workload 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 mengupdate konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan, perbarui konten file CONFIGS.json dan gunakan perintah gcloud alpha compute instances update untuk menerapkan update tersebut:

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

Ganti kode berikut:

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

Memecahkan masalah

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

Langkah selanjutnya