Zertifikat mit Terraform ausstellen

Terraform mit dem Certificate Authority Service verwenden, um Folgendes zu tun:

  • Erstellen Sie einen CA-Pool und eine Root-CA im neuen CA-Pool.
  • CA-Pool und untergeordnete CA darin erstellen, die von der Root-CA signiert wird
  • Generieren Sie eine neue Zertifikatsignierungsanfrage (Certificate Signing Request, CSR).
  • Verwenden Sie den generierten CSR, um ein Zertifikat vom CA-Pool anzufordern, der die untergeordnete CA enthält.

Terraform ist eine Open-Source-Software, mit der Sie Ihre CA Service-Ressourcen mithilfe des Paradigmas „Infrastruktur als Code“ erstellen und verwalten können. In dieser Kurzanleitung wird der Google Cloud Terraform-Anbieter für Terraform verwendet.


Eine detaillierte Anleitung dazu finden Sie direkt in der Google Cloud Console. Klicken Sie dazu einfach auf Anleitung:

Anleitung


Hinweise

Sie benötigen die IAM-Rolle „CA Service Admin“ (roles/privateca.admin). Wenn Sie diese IAM-Rolle nicht haben, lesen Sie den Abschnitt Einzelne Rolle zuweisen, um Informationen zum Zuweisen dieser Rolle zu erhalten.

Google Cloud -Projekt erstellen

  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. Google Cloud CLI installieren

    Installieren Sie die Google Cloud CLI, falls noch nicht geschehen. Wählen Sie bei Aufforderung das Projekt aus, das Sie zuvor ausgewählt oder erstellt haben.

    Wenn Sie die Google Cloud CLI bereits installiert haben, aktualisieren Sie sie mit dem gcloud components update-Befehl:

    gcloud components update
    

    Terraform-Konfigurationsbeispiel

    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
    }

    Terraform-Konfigurationsdatei ausführen

    Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud -Projekt anzuwenden.

    Cloud Shell vorbereiten

    1. Rufen Sie Cloud Shell auf.
    2. Legen Sie das Standardprojekt Google Cloud fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

      Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

    Verzeichnis vorbereiten

    Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

    1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

      Kopieren Sie den Beispielcode in das neu erstellte main.tf.

      Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

    3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
    4. Speichern Sie die Änderungen.
    5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
      terraform init

      Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

      terraform init -upgrade

    Änderungen anwenden

    1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
      terraform plan

      Korrigieren Sie die Konfiguration nach Bedarf.

    2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
      terraform apply

      Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

    3. Öffnen Sie Ihr Google Cloud Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

    Bereinigen

    Wenn Sie vermeiden möchten, dass Ihrem Google Cloud Konto die in dieser Kurzanleitung verwendeten Ressourcen in Rechnung gestellt werden, löschen Sie den CA-Pool und alle Ressourcen, die in der Terraform-Konfigurationsdatei definiert sind:

    terraform destroy
    

    Geben Sie bei Aufforderung yes ein.

    Wenn Sie ein neues Projekt für diese Kurzanleitung erstellt haben und es nicht mehr benötigen, löschen Sie das Projekt.

    Nächste Schritte