Ein gültiges Clientzertifikat muss eine Vertrauenskette zurück zum Trust-Anchor im Trust Store aufweisen. Auf dieser Seite finden Sie eine Anleitung zum Erstellen einer eigenen Vertrauenskette mit dem Root-Zertifikat einer privaten Zertifizierungsstelle (Certificate Authority, CA), die Sie kontrollieren. In dieser Einrichtung wird die private Zertifizierungsstelle mit dem Certificate Authority Service erstellt.
Nachdem Sie das Root-Zertifikat der privaten Zertifizierungsstelle erhalten haben, wird in diesem Dokument beschrieben, wie Sie das Zertifikat in den Trust Store der TrustConfig-Ressource des Zertifikatmanagers hochladen. Anschließend wird die TrustConfig mit der Clientauthentifizierungsressource (ServerTLSPolicy) verknüpft und die Clientauthentifizierungsressource an die Ziel-HTTPS-Proxy-Ressource des Load Balancers angehängt.
Hinweis
- Lesen Sie die Übersicht zu gegenseitigem TLS.
- Lesen Sie den Leitfaden zum Verwalten von Vertrauenskonfigurationen.
Installieren Sie die Google Cloud CLI. Eine vollständige Übersicht über das Tool finden Sie im Leitfaden zur gcloud CLI. Befehle für das Load Balancing finden Sie in der Referenz für die API und gcloud CLI.
Wenn Sie die gcloud CLI noch nicht ausgeführt haben, führen Sie zuerst
gcloud initzur Authentifizierung aus.Lesen Sie die Anleitung zum Erstellen eines CA-Pools.
Wenn Sie einen globalen externen Application Load Balancer oder einen klassischen Application Load Balancer verwenden, müssen Sie einen Load Balancer mit einem der folgenden unterstützten Backends eingerichtet haben:
- Back-Ends von VM-Instanzgruppen
- Cloud Storage-Buckets (nur unterstützt, wenn zusätzlich zum Backend-Bucket mindestens ein Backend-Dienst an den Load Balancer angehängt ist)
- Cloud Run, App Engine oder Cloud Run Functions
- Hybridkonnektivität
Wenn Sie einen regionalen externen Application Load Balancer, einen regionenübergreifenden internen Application Load Balancer oder einen regionalen internen Application Load Balancer verwenden, müssen Sie einen Load Balancer mit einem der folgenden unterstützten Backends eingerichtet haben:
- Back-Ends von VM-Instanzgruppen
- Cloud Run
- Hybridkonnektivität
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 auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Zertifikat der Stamm-Zertifizierungsstelle abrufen
Die Root-Zertifizierungsstelle hat ein selbst signiertes Zertifikat, das Sie dem Trust Store hinzufügen müssen. Das Zertifikat der Root-Zertifizierungsstelle befindet sich am Anfang der Zertifikatskette.
Um das Zertifikat der Stamm-CA abzurufen, müssen Sie zuerst einen CA-Pool erstellen, der bei der Erstellung leer ist. Anschließend müssen Sie eine Root-CA erstellen und dem CA-Pool hinzufügen. Die Stamm-CA und der CA-Pool werden mit dem Certificate Authority Service erstellt, wie in den folgenden Schritten beschrieben.
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_POOLdurch die ID oder den Namen des übergeordneten CA-Pools.Verwenden Sie den Befehl
gcloud privateca roots create, um eine Stamm-CA zu erstellen und dem CA-Pool hinzuzufügen:gcloud privateca roots create CA_ROOT \ --pool=CA_POOL \ --subject="CN=my-ca, O=Test LLC" \ --location=us-central1
Ersetzen Sie Folgendes:
CA_ROOT: die ID oder der Name der Stamm-CA.CA_POOL: die ID oder der Name des übergeordneten CA-Pools.
Extrahieren Sie das PEM-codierte Zertifikat, das die Stamm-Zertifizierungsstelle identifiziert.
gcloud privateca roots describe CA_ROOT \ --pool=CA_POOL \ --location=us-central1 \ --format='value(pemCaCertificates)' > root.cert
Ersetzen Sie Folgendes:
CA_ROOT: die ID oder der Name der privaten Zertifizierungsstelle.CA_POOL: die ID oder der Name des übergeordneten CA-Pools.
Das Root-Zertifikat (
root.cert) muss in den Trust Store hochgeladen werden. Dieser Schritt wird im folgenden Abschnitt ausgeführt.
Weitere Informationen zum Erstellen eines CA-Pools und einer Root-CA mit Certificate Authority Service finden Sie hier:
Root-CA-Zertifikat formatieren
Wenn Sie das Root-Zertifikat in einen Trust Store aufnehmen möchten, formatieren Sie das Zertifikat in einer einzelnen Zeile und speichern Sie es in einer Umgebungsvariablen, damit die YAML-Datei der Trust-Konfiguration darauf verweisen kann.
export ROOT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
TrustConfig-Ressource erstellen
Eine Vertrauenskonfiguration ist eine Ressource, die Ihre Konfiguration der Public-Key-Infrastruktur (PKI) im Zertifikatmanager darstellt.
So erstellen Sie eine Vertrauenskonfigurationsressource:
Console
Rufen Sie in der Google Cloud Console die Seite Zertifikatmanager auf.
Klicken Sie auf dem Tab Vertrauenskonfigurationen auf Vertrauenskonfiguration hinzufügen.
Geben Sie einen Namen für die Konfiguration ein.
Wählen Sie unter Standort die Option Global oder Regional aus.
Der Standort gibt an, wo die Ressource für die Vertrauenskonfiguration gespeichert wird. Erstellen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer eine globale TrustConfig-Ressource. Erstellen Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer eine regionale TrustConfig-Ressource.
Wenn Sie Regional ausgewählt haben, wählen Sie die Region aus.
Klicken Sie im Abschnitt Trust Store auf Trust-Anchor hinzufügen und laden Sie die PEM-codierte Zertifikatsdatei hoch oder kopieren Sie den Inhalt des Zertifikats.
Klicken Sie auf Hinzufügen.
Klicken Sie auf Erstellen.
Prüfen Sie, ob die neue Vertrauenskonfigurationsressource in der Liste der Konfigurationen angezeigt wird.
gcloud
Erstellen Sie eine YAML-Datei für die Vertrauenskonfiguration (
trust_config.yaml), in der die Parameter für die Vertrauenskonfiguration angegeben sind. In diesem Beispiel ist die TrustConfig-Ressource ein Trust Store mit einem einzelnen Trust-Anchor, der ein Root-Zertifikat darstellt. Dieses Root-Zertifikat wird mithilfe der privaten Zertifizierungsstelle generiert.cat << EOF > trust_config.yaml name: TRUST_CONFIG_NAME trustStores: - trustAnchors: - pemCertificate: "${ROOT?}" EOFVerwenden Sie den Befehl
gcloud certificate-manager trust-configs import, um die YAML-Datei für die Vertrauenskonfiguration zu importieren:global
Geben Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer
globalals Speicherort für die TrustConfig-Ressource an.gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=globalErsetzen Sie Folgendes:
TRUST_CONFIG_NAME: der Name der Vertrauenskonfigurationsressource.
regional
Geben Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer die Region an, in der die TrustConfig-Ressource gespeichert ist.
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=LOCATIONErsetzen Sie Folgendes:
TRUST_CONFIG_NAME: der Name der Vertrauenskonfigurationsressource.LOCATION: die Region, in der die Vertrauenskonfigurationsressource gespeichert ist. Der Standardspeicherort istglobal.
Clientauthentifizierungsressource erstellen
Mit einer Clientauthentifizierungsressource (auch als ServerTLSPolicy bezeichnet) können Sie den serverseitigen TLS-Modus und die TrustConfig-Ressource angeben, die bei der Validierung von Clientzertifikaten verwendet werden soll. Wenn der Client dem Load Balancer ein ungültiges oder kein Zertifikat übergibt, gibt der clientValidationMode an, wie die Clientverbindung verarbeitet wird. Weitere Informationen finden Sie unter mTLS-Clientvalidierungsmodi.
- Wenn
clientValidationModeaufALLOW_INVALID_OR_MISSING_CLIENT_CERTgesetzt ist, werden alle Anfragen an das Backend weitergeleitet, auch wenn die Validierung fehlschlägt oder das Clientzertifikat fehlt. - Wenn
clientValidationModeaufREJECT_INVALIDgesetzt ist, werden nur Anfragen an das Backend weitergeleitet, die ein Clientzertifikat enthalten, das anhand einerTrustConfig-Ressource validiert werden kann. - Wenn
clientValidationModeaufALLOW_VALIDATION_RELAXATIONSgesetzt ist, werden nur Anfragen an das Backend weitergeleitet, die ein Clientzertifikat enthalten, das anhand einerTrustConfig-Ressource validiert werden kann, wobei die angegebenen Validierungslockerungen (clientValidationRelaxations) angewendet werden.
Führen Sie die folgenden Schritte aus, um eine Clientauthentifizierungsressource (ServerTlsPolicy) zu erstellen:
Console
Rufen Sie in der Google Cloud Console die Seite Authentifizierungskonfiguration auf.
Klicken Sie auf dem Tab Clientauthentifizierung auf Erstellen.
Geben Sie einen Namen für die Clientauthentifizierungsressource ein.
Wählen Sie unter Standort die Option Global oder Regional aus.
Legen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer den Standort auf „global“ fest. Legen Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den Standort auf die Region fest, in der der Load Balancer konfiguriert ist.
Wählen Sie für Clientauthentifizierungsmodus die Option Load Balancing aus.
Wählen Sie für Clientvalidierungsmodus eine der folgenden Optionen aus:
- Ungültiges ablehnen
- Ungültiges oder fehlendes Clientzertifikat zulassen
- Lockerungen der Validierung zulassen
Weitere Informationen finden Sie unter Clientvalidierungsmodi.
Wenn Sie Lockerungen der Validierung zulassen auswählen, wählen Sie eine oder mehrere der folgenden Lockerungen der Validierung aus:
- Fehlende EKU zulassen
- SHA-1-Hash-Technologie zulassen
- Abgelaufenes untergeordnetes Zertifikat zulassen
Wählen Sie die zuvor erstellte Ressource für die Konfiguration der Vertrauensstellung aus.
Optional: Klicken Sie auf Entsprechender Code, um die Terraform-Konfiguration für diese Ressource aufzurufen.
Klicken Sie auf Erstellen.
Prüfen Sie, ob die Clientauthentifizierung (ServerTlsPolicy) angezeigt wird.
gcloud
Wählen Sie je nachdem, wie Sie die Verbindung verarbeiten möchten, eine der folgenden Optionen aus, um die Clientauthentifizierungsressource (
ServerTlsPolicy) im YAML-Format zu definieren.Option 1:
clientValidationModeist aufALLOW_INVALID_OR_MISSING_CLIENT_CERTfestgelegt.global
Erstellen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer eine YAML-Datei, in der der Clientvalidierungsmodus und eine globale TrustConfig-Ressource deklarativ angegeben werden:
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 EOFregional
Erstellen Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer eine YAML-Datei, in der der Clientvalidierungsmodus und eine regionale TrustConfig-Ressource deklarativ angegeben werden:
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 EOFOption 2:
clientValidationModeist aufREJECT_INVALIDfestgelegt.global
Erstellen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer eine YAML-Datei, in der der Clientvalidierungsmodus und eine globale TrustConfig-Ressource deklarativ angegeben werden:
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 EOFregional
Erstellen Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer eine YAML-Datei, in der der Clientvalidierungsmodus und eine regionale TrustConfig-Ressource deklarativ angegeben werden:
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 EOFOption 3:
clientValidationModeist aufALLOW_VALIDATION_RELAXATIONSfestgelegt.global
Erstellen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer eine YAML-Datei, in der der Clientvalidierungsmodus, eine oder mehrere Validierungsentspannungen und eine globale TrustConfig-Ressource deklarativ angegeben werden:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_VALIDATION_RELAXATIONS clientValidationRelaxations: - VALIDATION_RELAXATION - VALIDATION_RELAXATION clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOFregional
Erstellen Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer eine YAML-Datei, in der der Clientvalidierungsmodus, eine oder mehrere Validierungslockerungen und eine regionale TrustConfig-Ressource deklarativ angegeben werden:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_VALIDATION_RELAXATIONS clientValidationRelaxations: - VALIDATION_RELAXATION - VALIDATION_RELAXATION clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
Ersetzen Sie Folgendes:
SERVER_TLS_POLICY_NAME: der Name der Clientauthentifizierungsressource (ServerTlsPolicy).VALIDATION_RELAXATION: einer oder mehrere der folgenden Werte:ALLOW_MISSING_EKU,ALLOW_SHA1_HASHINGoderALLOW_EXPIRED_LEAF_CERTIFICATE.PROJECT_ID: die ID Ihres Projekts in Google Cloud .REGION: Verwenden Sie für den regionalen externen Application Load Balancer oder den regionalen internen Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.TRUST_CONFIG_NAME: der Name der Vertrauenskonfigurationsressource, die Sie zuvor erstellt haben.
Verwenden Sie den Befehl
gcloud network-security server-tls-policies import, um die ClientauthentifizierungsressourceServerTlsPolicyzu importieren:global
Setzen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer das Flag
--locationaufglobal.gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
Ersetzen Sie Folgendes:
SERVER_TLS_POLICY_NAME: der Name der Clientauthentifizierungsressource (ServerTlsPolicy).regional
Setzen Sie bei regionalen externen Application Load Balancern und regionalen internen Application Load Balancern das Flag
--locationauf die Region, in der der Load Balancer konfiguriert ist.gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=LOCATION
Ersetzen Sie Folgendes:
SERVER_TLS_POLICY_NAME: der Name der Clientauthentifizierungsressource (ServerTlsPolicy).Optional: Verwenden Sie den Befehl
gcloud network-security server-tls-policies list, um alle Ressourcen der Clientauthentifizierung (ServerTlsPolicies) aufzulisten:gcloud network-security server-tls-policies list \ --location=LOCATION
Ersetzen Sie Folgendes:
LOCATION: Verwenden Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancerglobal. 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.
Clientauthentifizierungsressource an den Load Balancer anhängen
Damit die gegenseitige TLS-Authentifizierung funktioniert, müssen Sie nach dem Einrichten des Load Balancers die Clientauthentifizierungsressource (ServerTLSPolicy) an die Ziel-HTTPS-Proxy-Ressource des Load Balancers anhängen.
Console
Rufen Sie in der Google Cloud Console die Seite Load Balancing auf.
Wählen Sie in der Liste der Load Balancer den Load Balancer aus, an den Sie die Clientauthentifizierungsressource (
ServerTLSPolicy) anhängen möchten.Klicken Sie auf Bearbeiten.
Maximieren Sie im Abschnitt Frontend-Konfiguration für ein HTTPS-Frontend den Abschnitt Erweiterte Funktionen einblenden.
Wählen Sie in der Liste Clientauthentifizierung die Ressource für die Clientauthentifizierung aus.
Klicken Sie auf Fertig.
Klicken Sie auf Aktualisieren.
gcloud
Verwenden Sie den Befehl
gcloud compute target-https-proxies list, um alle Ziel-HTTPS-Proxy-Ressourcen in Ihrem Projekt aufzulisten:gcloud compute target-https-proxies list
Notieren Sie sich den Namen des HTTPS-Ziel-Proxys, um die
ServerTLSPolicy-Ressource anzuhängen. Dieser Name wird in den folgenden Schritten alsTARGET_HTTPS_PROXY_NAMEbezeichnet.Verwenden Sie den Befehl
gcloud compute target-https-proxies export, um die Konfiguration eines Ziel-HTTPS-Proxys in eine Datei zu exportieren:global
gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \ --destination=TARGET_PROXY_FILENAME \ --globalErsetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME: der Name des Zielproxys.TARGET_PROXY_FILENAME: der Name der Konfigurationsdatei des Ziel-Proxys im YAML-Format. Beispiel:mtls_target_proxy.yaml.
regional
gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \ --destination=TARGET_PROXY_FILENAME \ --region=REGIONErsetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME: der Name des Zielproxys.TARGET_PROXY_FILENAME: der Name der Konfigurationsdatei des Ziel-Proxys im YAML-Format. Beispiel:mtls_target_proxy.yaml.REGION: die Region, in der Sie den Load Balancer konfiguriert haben.
Verwenden Sie den Befehl
gcloud network-security server-tls-policies list, um alle Ressourcen der Clientauthentifizierung (ServerTlsPolicy) aufzulisten:gcloud network-security server-tls-policies list \ --location=LOCATIONErsetzen Sie Folgendes:
LOCATION: Verwenden Sie für den regionenübergreifenden internen Application Load Balancer, den globalen externen Application Load Balancer oder den klassischen Application Load Balancerglobal. Verwenden Sie für einen regionalen externen Application Load Balancer oder einen regionalen internen Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.Notieren Sie sich den Namen der Clientauthentifizierungsressource (
ServerTLSPolicy), um mTLS zu konfigurieren. Dieser Name wird im nächsten Schritt alsSERVER_TLS_POLICY_NAMEbezeichnet.Hängen Sie die Clientauthentifizierung (
ServerTlsPolicy) an den Ziel-HTTPS-Proxy an.echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/LOCATION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
Ersetzen Sie Folgendes:
PROJECT_ID: die ID Ihres Projekts in Google Cloud .LOCATION: Verwenden Sie für globale externe Application Load Balancer oder klassische Application Load Balancer und regionenübergreifende interne Application Load Balancerglobal. Verwenden Sie für einen regionalen externen Application Load Balancer oder einen regionalen internen Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.SERVER_TLS_POLICY_NAME: der Name der Clientauthentifizierungsressource (ServerTLSPolicy).TARGET_PROXY_FILENAME: der Name der Konfigurationsdatei des Ziel-Proxys im YAML-Format.
Verwenden Sie den Befehl
gcloud compute target-https-proxies import, um die Konfiguration eines Ziel-HTTPS-Proxys aus einer Datei zu importieren.global
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --source=TARGET_PROXY_FILENAME \ --globalErsetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME: der Name des Zielproxys.TARGET_PROXY_FILENAME: der Name der Konfigurationsdatei des Ziel-Proxys im YAML-Format. Beispiel:mtls_target_proxy.yaml.
regional
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --source=TARGET_PROXY_FILENAME \ --region=REGIONErsetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME: der Name des Zielproxys.TARGET_PROXY_FILENAME: der Name der Konfigurationsdatei des Ziel-Proxys im YAML-Format. Beispiel:mtls_target_proxy.yaml.REGION: die Region, in der Sie den Load Balancer konfiguriert haben.
Benutzerdefinierte mTLS-Header hinzufügen
Wenn Sie mTLS aktivieren, können Sie Informationen zur mTLS-Verbindung über benutzerdefinierte Header übergeben. Sie können auch das Logging aktivieren, damit mTLS-Verbindungsfehler in Ihren Logs erfasst werden. Weitere Informationen zum Konfigurieren des Loggings finden Sie hier:
- Logging und Monitoring für globalen externen Application Load Balancer
- Logging und Monitoring für regionalen externen Application Load Balancer
Benutzerdefinierte mTLS-Header zu Backend-Diensten hinzufügen
Für globale externe Application Load Balancer oder klassische Application Load Balancer können Sie benutzerdefinierte Header verwenden, um Informationen über die mTLS-Verbindung an Backend-Dienste zu übergeben.
Verwenden Sie den Befehl
gcloud compute backend-services list, um alle Backend-Dienste im Projekt aufzulisten:gcloud compute backend-services list
Notieren Sie sich den Namen des Backend-Dienstes, um benutzerdefinierte Header zu aktivieren. Dieser Name wird im folgenden Schritt als
BACKEND_SERVICEbezeichnet.Verwenden Sie den Befehl
gcloud compute backend-services update, um den Backend-Dienst zu aktualisieren:gcloud compute backend-services update BACKEND_SERVICE \ --global \ --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \ --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \ --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \ --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \ --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \ --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \ --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \ --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \ --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \ --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
Benutzerdefinierte mTLS-Header zur URL-Zuordnung hinzufügen
Für den regionenübergreifenden internen Application Load Balancer, den regionalen externen Application Load Balancer oder den regionalen internen Application Load Balancer können Sie benutzerdefinierte Header verwenden, um Informationen zur mTLS-Verbindung zu übergeben an die URL-Zuordnung.
Verwenden Sie den
Befehl gcloud compute url-maps list, um alle URL-Zuordnungen im Projekt aufzulisten:
gcloud compute url-maps list
Notieren Sie sich den Namen der URL-Zuordnung, um benutzerdefinierte Header zu aktivieren.
Dieser Name wird im folgenden Schritt als URL_MAP_NAME bezeichnet.
global
Verwenden Sie den Befehl gcloud compute
url-maps edit, um die URL-Zuordnung für einen regionenübergreifenden internen Application Load Balancer zu bearbeiten:
gcloud compute url-maps edit URL_MAP_NAME --global
Im Folgenden finden Sie eine YAML-Beispieldatei, die zeigt, wie Variablen in benutzerdefinierten Anfrageheadern (requestHeadersToAdd) verwendet werden. Sie können dieselben Variablen verwenden, um benutzerdefinierte Antwortheader (responseHeadersToAdd) zu senden.
headerAction:
requestHeadersToAdd:
- headerName: "X-Client-Cert-Present"
headerValue: "{client_cert_present}"
- headerName: "X-Client-Cert-Chain-Verified"
headerValue: "{client_cert_chain_verified}"
- headerName: "X-Client-Cert-Error"
headerValue: "{client_cert_error}"
- headerName: "X-Client-Cert-Hash"
headerValue: "{client_cert_sha256_fingerprint}"
- headerName: "X-Client-Cert-Serial-Number"
headerValue: "{client_cert_serial_number}"
- headerName: "X-Client-Cert-SPIFFE"
headerValue: "{client_cert_spiffe_id}"
- headerName: "X-Client-Cert-URI-SANs"
headerValue: "{client_cert_uri_sans}"
- headerName: "X-Client-Cert-DNSName-SANs"
headerValue: "{client_cert_dnsname_sans}"
- headerName: "X-Client-Cert-Valid-Not-Before"
headerValue: "{client_cert_valid_not_before}"
- headerName: "X-Client-Cert-Valid-Not-After"
headerValue: "{client_cert_valid_not_after}"
- headerName: "X-Client-Cert-Issuer-Dn"
headerValue: "{client_cert_issuer_dn}"
- headerName: "X-Client-Cert-Subject-Dn"
headerValue: "{client_cert_subject_dn}"
- headerName: "X-Client-Cert-Leaf"
headerValue: "{client_cert_leaf}"
- headerName: "X-Client-Cert-Chain"
headerValue: "{client_cert_chain}"
regional
Verwenden Sie den Befehl gcloud compute
url-maps edit, um die URL-Zuordnung für einen regionalen externen Application Load Balancer oder einen regionalen internen Application Load Balancer zu bearbeiten:
gcloud compute url-maps edit URL_MAP_NAME --region=REGION
Im Folgenden finden Sie eine YAML-Beispieldatei, die zeigt, wie Variablen in benutzerdefinierten Anfrageheadern (requestHeadersToAdd) verwendet werden. Sie können dieselben Variablen verwenden, um benutzerdefinierte Antwortheader (responseHeadersToAdd) zu senden.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
headerAction:
requestHeadersToAdd:
- headerName: "X-Client-Cert-Present"
headerValue: "{client_cert_present}"
- headerName: "X-Client-Cert-Chain-Verified"
headerValue: "{client_cert_chain_verified}"
- headerName: "X-Client-Cert-Error"
headerValue: "{client_cert_error}"
- headerName: "X-Client-Cert-Hash"
headerValue: "{client_cert_sha256_fingerprint}"
- headerName: "X-Client-Cert-Serial-Number"
headerValue: "{client_cert_serial_number}"
- headerName: "X-Client-Cert-SPIFFE"
headerValue: "{client_cert_spiffe_id}"
- headerName: "X-Client-Cert-URI-SANs"
headerValue: "{client_cert_uri_sans}"
- headerName: "X-Client-Cert-DNSName-SANs"
headerValue: "{client_cert_dnsname_sans}"
- headerName: "X-Client-Cert-Valid-Not-Before"
headerValue: "{client_cert_valid_not_before}"
- headerName: "X-Client-Cert-Valid-Not-After"
headerValue: "{client_cert_valid_not_after}"
- headerName: "X-Client-Cert-Issuer-Dn"
headerValue: "{client_cert_issuer_dn}"
- headerName: "X-Client-Cert-Subject-Dn"
headerValue: "{client_cert_subject_dn}"
- headerName: "X-Client-Cert-Leaf"
headerValue: "{client_cert_leaf}"
- headerName: "X-Client-Cert-Chain"
headerValue: "{client_cert_chain}"
Clientzertifikat über eine CSR abrufen
Dieser Abschnitt bietet eine zusätzliche Konfigurationsoption zum Generieren eines Clientzertifikats (untergeordnetes Zertifikat), das vom Zertifikat der Stammzertifizierungsstelle signiert wird.
Wenn Sie ein Clientzertifikat erhalten möchten, generieren Sie eine Zertifikatsignierungsanfrage (Certificate Signing Request, CSR) und senden Sie sie an den CA-Pool.
Erstellen Sie eine OpenSSL-Konfigurationsdatei, um die CSR für das Clientzertifikat zu generieren.
Die folgende Konfigurationsdatei (
client.config) enthält den Abschnitt[extension_requirements], in dem die X.509-Erweiterungen angegeben sind, die in die CSR aufgenommen werden sollen. Weitere Informationen zu den Anforderungen für Clientzertifikate finden Sie unter Zertifikatanforderungen.cat > client.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = test.example.com emailAddress = test@example.com EOFFühren Sie den folgenden
openssl-Befehl aus, um eine CSR (csr.pem) und einen entsprechenden privaten Schlüssel (key.pem) zu generieren.openssl req -newkey rsa:2048 -nodes \ -config client.config \ -keyout key.pem \ -out csr.pemFühren Sie den folgenden
gcloud privateca certificates create-Befehl aus, um die CSR zu senden und das X.509-Clientzertifikat von der Zertifizierungsstelle im CA-Pool anzufordern.gcloud privateca certificates create \ --issuer-pool CA_POOL \ --issuer-location=us-central1 \ --csr csr.pem \ --cert-output-file CERT_FILENAMEErsetzen Sie Folgendes:
CA_POOL: die ID oder der Name des CA-Pools.CERT_FILENAME: die PEM-codierte Zertifikatskettendatei, die vom Blatt zum Stamm sortiert ist.
Senden Sie eine sichere HTTPS-Anfrage mit dem clientseitigen SSL-Zertifikat an die IP-Adresse des Load Balancers. Der Client präsentiert sein Zertifikat, um sich gegenüber dem Load Balancer zu authentifizieren.
curl -v --key key.pem --cert CERT_FILENAME https://IP_ADDRESS
Ersetzen Sie Folgendes:
CERT_FILENAME: die PEM-codierte Zertifikatskettendatei, die vom Blatt bis zum Stamm sortiert ist.IP_ADDRESS: die IP-Adresse des Load Balancers.