Gegenseitiges TLS mit privater CA einrichten

Diese Seite enthält eine Anleitung zum Erstellen einer privaten Zertifizierungsstelle (Certificate Authority, CA) mithilfe des Certificate Authority Service und zum Hochladen der Zertifikate in eine TrustConfig-Ressource von Zertifikatmanager.

Sie erstellen auch die Netzwerksicherheitsressourcen, die zum Konfigurieren von gegenseitigem TLS für Application Load Balancer erforderlich sind.

Hinweise

Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Anleitung benötigen:

  • Zum Erstellen von Load-Balancer-Ressourcen wie TargetHTTPProxy: Compute Load Balancer Admin (roles/compute.loadBalancerAdmin)
  • So verwenden Sie Zertifikatmanager-Ressourcen: Zertifikatmanager-Inhaber (roles/certificatemanager.owner)
  • So erstellen Sie Sicherheits- und Netzwerkkomponenten: Compute-Netzwerkadministrator (roles/compute.networkAdmin) und Compute-Sicherheitsadministrator (roles/compute.securityAdmin)
  • Zum Erstellen eines Projekts (optional): Project Creator (roles/resourcemanager.projectCreator)

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Private CA erstellen

Erstellen Sie eine private CA mit dem CA Service und erstellen Sie dann ein Root-Zertifikat:

  1. Verwenden Sie zum Erstellen eines CA-Pools den Befehl gcloud privateca pools create:

    gcloud privateca pools create CA_POOL \
       --location=us-central1
    

    Ersetzen Sie CA_POOL durch die ID oder den Namen des übergeordneten CA-Pools.

  2. Verwenden Sie zum Erstellen einer privaten CA im CA-Pool den Befehl gcloud privateca roots create:

    gcloud privateca roots create CA_ROOT \
       --pool=CA_POOL \
       --subject="CN=my-ca, O=Test LLC" \
       --location=us-central1
    

    Dabei gilt:

    • CA_ROOT ist die ID oder der Name der privaten CA
    • CA_POOL ist die ID oder der Name des übergeordneten CA-Pools
  3. Verwenden Sie zum Beschreiben der neuen CA und zum Erstellen der Datei root.cert den Befehl gcloud privateca roots describe:

    gcloud privateca roots describe CA_ROOT \
       --pool=CA_POOL \
       --location=us-central1 \
       --format='value(pemCaCertificates)' > root.cert
    
    export ROOT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    

    Dabei gilt:

    • CA_ROOT ist die ID oder der Name der privaten CA
    • CA_POOL ist die ID oder der Name des übergeordneten CA-Pools

    Hier finden Sie weitere Informationen:

TrustConfig mit privater CA erstellen

Erstellen Sie eine Zertifikatmanager-TrustConfig-Ressource, die Ihre PKI darstellt. Verwenden Sie dazu das Root-Zertifikat, das mithilfe der privaten CA generiert wurde. Wir gehen davon aus, dass die Ressource TrustConfig ein einfacher Trust Store mit einem einzelnen Trust-Anchor ist, der ein Root-Zertifikat darstellt.

Ersetzen Sie in den folgenden Schritten TRUST_CONFIG_NAME durch den Namen der TrustConfig-Ressource.

  • Erstellen Sie mit dem folgenden Befehl die Datei trust_config.yaml:

    cat << EOF > trust_config.yaml
    name: TRUST_CONFIG_NAME
    trustStores:
    - trustAnchors:
       - pemCertificate: "${ROOT?}"
    EOF
    
  • Verwenden Sie zum Erstellen der Zertifikatmanager-TrustConfig-Ressourcen den Befehl gcloud certificate-manager trust-configs import:

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
       --source=trust_config.yaml \
       --location=REGION
    

    Ersetzen Sie Folgendes:

    REGION: Verwenden Sie global für regionenübergreifenden internen Application Load Balancer, globalen externen Application Load Balancer oder klassischen Application Load Balancer. Verwenden Sie für regionale externe Application Load Balancer oder regionale interne Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.

Ressourcen für die Netzwerksicherheit erstellen

Mit einer Server-TLS-Richtlinie (Netzwerksicherheitsressource ServerTLSPolicy) können Sie den serverseitigen TLS-Modus und die Ressource TrustConfig angeben, die bei der Validierung von Clientzertifikaten verwendet werden sollen. Wenn der Client dem Load-Balancer ein ungültiges oder kein Zertifikat übergibt, gibt der clientValidationMode an, wie die Clientverbindung verarbeitet wird.

  • Wenn clientValidationMode auf ALLOW_INVALID_OR_MISSING_CLIENT_CERT gesetzt ist, werden alle Anfragen an das Backend übergeben, auch wenn die Validierung fehlschlägt oder das Clientzertifikat fehlt.
  • Wenn clientValidationMode auf REJECT_INVALID gesetzt ist, werden nur Anfragen an das Backend weitergeleitet, die ein Clientzertifikat bereitstellen, das mit einer TrustConfig-Ressource validiert werden kann.

Führen Sie die folgenden Schritte aus, um die Ressource ServerTLSPolicy zu erstellen:

  1. Wählen Sie je nachdem, wie Sie die Verbindung verarbeiten möchten, eine der folgenden Optionen aus.

    Ersetzen Sie in den folgenden Schritten SERVER_TLS_POLICY_NAME durch den Namen der Server-TLS-Richtlinie und PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

    • Option 1: clientValidationMode ist auf ALLOW_INVALID_OR_MISSING_CLIENT_CERT festgelegt.

      Erstellen Sie mit dem folgenden Befehl die Datei server_tls_policy.yaml:

      global

      Verwenden Sie für externe Application Load Balancer und regionenübergreifende interne Application Load Balancer den folgenden Befehl:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
        clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regional

      Verwenden Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den folgenden Befehl:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
        clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
    • Option 2: clientValidationMode ist auf REJECT_INVALID festgelegt.

      Erstellen Sie mit dem folgenden Befehl die Datei server_tls_policy.yaml:

      global

      Verwenden Sie für externe Application Load Balancer und regionenübergreifende interne Application Load Balancer den folgenden Befehl:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: REJECT_INVALID
        clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regional

      Verwenden Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den folgenden Befehl:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: REJECT_INVALID
        clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
  2. Verwenden Sie den Befehl gcloud network-security server-tls-policies import, um die Ressource ServerTlsPolicy zu erstellen.

    global

    Verwenden Sie für externe Application Load Balancer und regionenübergreifende interne Application Load Balancer den folgenden Befehl:

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=global
    

    regional

    Verwenden Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den folgenden Befehl:

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=REGION
    

Weitere Informationen finden Sie unter Validierungsmodi für MTLS-Clients.

Nächste Schritte