Menerbitkan sertifikat menggunakan Terraform

Pelajari cara menggunakan Terraform dengan Certificate Authority Service untuk melakukan hal berikut:

  • Buat kumpulan CA dan CA root di kumpulan CA baru.
  • Buat kumpulan CA dan subordinate CA di dalamnya yang ditandatangani oleh root CA
  • Buat Permintaan Penandatanganan Sertifikat (CSR) baru.
  • Gunakan CSR yang dibuat untuk meminta sertifikat dari kumpulan CA yang berisi CA subordinat.

Terraform adalah software open source yang memungkinkan Anda membuat dan mengelola resource Layanan CA menggunakan paradigma infrastruktur sebagai kode. Panduan memulai ini menggunakan Google Cloud Penyedia Terraform untuk Terraform.


Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Google Cloud konsol, klik Pandu saya:

Pandu saya


Sebelum memulai

Pastikan Anda memiliki peran IAM CA Service Admin (roles/privateca.admin). Jika Anda tidak memiliki peran IAM ini, baca artikel Memberikan satu peran untuk mengetahui informasi tentang cara memberikan peran ini.

Buat Google Cloud project

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the CA Service API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the CA Service API.

    Enable the API

  8. Menginstal Google Cloud CLI.

    Jika Anda belum melakukannya, instal Google Cloud CLI. Saat diminta, pilih project yang Anda pilih atau buat sebelumnya.

    Jika Anda sudah menginstal Google Cloud CLI, update dengan menjalankan perintah gcloud components update:

    gcloud components update
    

    Contoh konfigurasi Terraform

    provider "google" {}
    provider "tls" {}
    
    resource "google_project_service" "privateca_api" {
      service            = "privateca.googleapis.com"
      disable_on_destroy = false
    }
    
    # Root CaPool & CA
    
    resource "google_privateca_ca_pool" "root" {
      name     = "root-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
      publishing_options {
        publish_ca_cert = true
        publish_crl     = true
      }
    }
    
    resource "google_privateca_certificate_authority" "root-ca" {
      certificate_authority_id = "my-root-ca"
      location                 = "us-central1"
      pool                     = google_privateca_ca_pool.root.name
      config {
        subject_config {
          subject {
            organization = "google"
            common_name  = "my-certificate-authority"
          }
        }
        x509_config {
          ca_options {
            is_ca = true
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign  = true
            }
            extended_key_usage {
              server_auth = true
            }
          }
        }
      }
      type = "SELF_SIGNED"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
    
      // Disable CA deletion related safe checks for easier cleanup.
      deletion_protection                    = false
      skip_grace_period                      = true
      ignore_active_certificates_on_deletion = true
    }
    
    # Sub CaPool & CA
    
    resource "google_privateca_ca_pool" "subordinate" {
      name     = "sub-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
      publishing_options {
        publish_ca_cert = true
        publish_crl     = true
      }
    
      issuance_policy {
        baseline_values {
          ca_options {
            is_ca = false
          }
          key_usage {
            base_key_usage {
              digital_signature = true
              key_encipherment  = true
            }
            extended_key_usage {
              server_auth = true
            }
          }
        }
      }
    }
    
    resource "google_privateca_certificate_authority" "sub-ca" {
      pool                     = google_privateca_ca_pool.subordinate.name
      certificate_authority_id = "my-sub-ca"
      location                 = "us-central1"
      subordinate_config {
        certificate_authority = google_privateca_certificate_authority.root-ca.name
      }
      config {
        subject_config {
          subject {
            organization = "HashiCorp"
            common_name  = "my-subordinate-authority"
          }
          subject_alt_name {
            dns_names = ["hashicorp.com"]
          }
        }
        x509_config {
          ca_options {
            is_ca = true
            # Force the sub CA to only issue leaf certs
            max_issuer_path_length = 0
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign  = true
            }
            extended_key_usage {
              server_auth = true
            }
          }
        }
      }
      lifetime = "31536000s"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
      type = "SUBORDINATE"
    
      // Disable CA deletion related safe checks for easier cleanup.
      deletion_protection                    = false
      skip_grace_period                      = true
      ignore_active_certificates_on_deletion = true
    }
    
    # Leaf cert
    
    resource "tls_private_key" "example" {
      algorithm = "RSA"
    }
    
    resource "tls_cert_request" "example" {
      private_key_pem = tls_private_key.example.private_key_pem
    
      subject {
        common_name  = "example.com"
        organization = "ACME Examples, Inc"
      }
    }
    
    resource "google_privateca_certificate" "default" {
      pool = google_privateca_ca_pool.subordinate.name
      # Explicitly refer the sub-CA so that the certificate creation will wait for the CA creation.
      certificate_authority = google_privateca_certificate_authority.sub-ca.certificate_authority_id
      location              = "us-central1"
      lifetime              = "860s"
      name                  = "my-certificate"
      pem_csr               = tls_cert_request.example.cert_request_pem
    }

    Jalankan file konfigurasi Terraform

    Untuk menerapkan konfigurasi Terraform di project Google Cloud , selesaikan langkah-langkah di bagian berikut.

    Menyiapkan Cloud Shell

    1. Luncurkan Cloud Shell.
    2. Tetapkan project default Google Cloud tempat Anda ingin menerapkan konfigurasi Terraform.

      Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

    Menyiapkan direktori

    Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

    1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

      Salin kode contoh ke dalam main.tf yang baru dibuat.

      Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

    3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
    4. Simpan perubahan Anda.
    5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
      terraform init

      Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

      terraform init -upgrade

    Menerapkan perubahan

    1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
      terraform plan

      Koreksi konfigurasi jika diperlukan.

    2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
      terraform apply

      Tunggu hingga Terraform menampilkan pesan "Apply complete!".

    3. Buka Google Cloud project Anda untuk melihat hasilnya. Di konsol Google Cloud , buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

    Pembersihan

    Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam panduan memulai ini, hapus kumpulan CA dan semua resource yang ditentukan dalam file konfigurasi Terraform:

    terraform destroy
    

    Saat diminta, masukkan yes.

    Jika Anda membuat project baru untuk panduan memulai ini dan Anda tidak lagi memerlukannya, hapus project tersebut.

    Langkah berikutnya