Ein gültiges Clientzertifikat muss eine Vertrauenskette zurück zum Vertrauensanker (Root-Zertifikat) im Vertrauensspeicher aufweisen. Auf dieser Seite finden Sie eine Anleitung zum Erstellen einer eigenen Vertrauenskette, indem Sie Ihre eigenen Root- und Zwischenzertifikate mit der OpenSSL-Bibliothek konfigurieren.
Nachdem Sie die Vertrauensanker erstellt haben, wird in diesem Dokument beschrieben, wie Sie sie in den Vertrauensspeicher der TrustConfig
-Ressource von Certificate Manager hochladen. Anschließend wird die Vertrauenskonfiguration mit der Ressource „Client Authentication“ (ServerTLSPolicy
) verknüpft und dann an die Ziel-HTTPS-Proxy-Ressource des Load Balancers angehängt.
Hinweise
- Lesen Sie die Übersicht zu gegenseitigem TLS.
- Weitere Informationen finden Sie im 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 den Befehl
gcloud init
zur Authentifizierung aus.Aktivieren Sie die folgenden APIs: Compute Engine API, Certificate Manager API, Network Security API und Network Services API. Weitere Informationen finden Sie unter APIs aktivieren.
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 Back-Ends einrichten:
- Back-Ends von VM-Instanzgruppen
- Cloud Storage-Buckets (werden nur unterstützt, wenn neben dem Backend-Bucket auch mindestens ein Backend-Dienst an den Load-Balancer angehängt ist)
- Cloud Run, App Engine oder Cloud Run Functions
- Hybridkonnektivität
- Private Service Connect-Back-Ends
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 Back-Ends einrichten:
- Back-Ends von VM-Instanzgruppen
- Cloud Run
- Hybridkonnektivität
- Private Service Connect-Back-Ends
Projekt festlegen
gcloud
gcloud config set project PROJECT_ID
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
TargetHTTPSProxy
: 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.
Root- und Zwischenzertifikate erstellen
In diesem Abschnitt wird die OpenSSL-Bibliothek verwendet, um das Root-Zertifikat (Vertrauensanker) und das Zwischenzertifikat zu erstellen.
Ein Root-Zertifikat befindet sich am Anfang der Zertifikatskette. Ein Zwischenzertifikat ist Teil der Vertrauenskette zum Root-Zertifikat. Das Zwischenzertifikat ist kryptografisch mit dem Root-Zertifikat signiert. Wenn der Load Balancer ein Clientzertifikat empfängt, validiert er es, indem er eine Vertrauenskette vom Clientzertifikat zurück zum konfigurierten Vertrauensanker herstellt.
Verwenden Sie die folgenden Befehle, um das Root- und das Zwischenzertifikat zu erstellen. Das Erstellen des Zwischenzertifikats ist optional. In dieser Konfiguration verwenden wir jedoch das Zwischenzertifikat zum Signieren des Clientzertifikats.
Erstellen Sie eine OpenSSL-Konfigurationsdatei.
Im folgenden Beispiel enthält die Konfigurationsdatei (
example.cnf
) den Abschnitt[ca_exts]
, in dem X.509-Erweiterungen angegeben werden, die das Zertifikat als für eine Zertifizierungsstelle geeignet kennzeichnen. Weitere Informationen zu den Anforderungen an Stamm- und Zwischenzertifikate finden Sie unter Zertifikatsanforderungen.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth EOF
Erstellen Sie ein selbstsigniertes X.509-Root-Zertifikat (
root.cert
). Das Root-Zertifikat wird mit seinem eigenen privaten Schlüssel (root.key
) selbst signiert.openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
Erstellen Sie die Anfrage für die Signierung des Zertifikats (
int.req
) für das Zwischenzertifikat.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
Signieren Sie die CSR, um das X.509-Zwischenzertifikat (
int.cert
) zu erstellen. Die CSR wird mit dem Root-Zertifikat signiert.openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
Selbstsigniertes Zertifikat erstellen, das einer Zulassungsliste hinzugefügt werden kann
Sie können ein selbst signiertes Zertifikat erstellen und es einer Zulassungsliste in der Vertrauenskonfiguration hinzufügen.
Verwenden Sie den folgenden OpenSSL-Befehl, um ein selbst signiertes X.509-Zertifikat zu erstellen.
openssl req -x509 \
-new -sha256 -newkey rsa:2048 -nodes \
-days 3650 -subj '/CN=localhost' \
-keyout allowlisted.key -out allowlisted.cert
Dieses Zertifikat wird dann einem allowlistedCertificates
-Feld in der Vertrauenskonfiguration hinzugefügt.
Zertifikate formatieren
Wenn Sie neue oder vorhandene Zertifikate in einen TrustStore
aufnehmen möchten, formatieren Sie die Zertifikate in einer einzelnen Zeile und speichern Sie sie in Umgebungsvariablen, damit sie von der YAML-Datei für die Trust-Konfiguration referenziert werden können.
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Wenn Sie neue oder vorhandene Zertifikate, die einer Zulassungsliste hinzugefügt wurden, in eine Trust-Konfiguration aufnehmen möchten, formatieren Sie die Zertifikate in einer einzelnen Zeile und speichern Sie sie in Umgebungsvariablen, damit sie in die YAML-Datei gelesen werden können. Verwenden Sie für Zertifikate auf der Zulassungsliste den folgenden Befehl, um die Zertifikate in einer einzelnen Zeile zu formatieren und in der Umgebungsvariable ALLOWLISTED_CERT
zu speichern.
export ALLOWLISTED_CERT=$(cat allowlisted.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 Certificate Manager auf.
Klicken Sie auf dem Tab Vertrauenskonfigurationen auf Vertrauenskonfiguration hinzufügen.
Geben Sie einen Namen für die Konfiguration ein.
Wählen Sie als Standort die Option Global oder Regional aus.
Der Speicherort gibt an, wo die Vertrauenskonfigurationsressource gespeichert ist. Erstellen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer eine globale Trust-Konfigurationsressource. Erstellen Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer eine regionale Vertrauenskonfigurationsressource.
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 im Abschnitt Trust Store auf Zwischen-CA hinzufügen und laden Sie die PEM-codierte Zertifikatsdatei hoch oder kopieren Sie den Inhalt des Zertifikats.
Mit diesem Schritt können Sie eine weitere Vertrauensebene zwischen dem Root-Zertifikat und Ihrem Serverzertifikat hinzufügen.
Klicken Sie auf Hinzufügen, um die Zwischenzertifizierungsstelle hinzuzufügen.
Optional: Klicken Sie im Bereich Zugelassene Zertifikate auf Zertifikat hinzufügen und laden Sie die PEM-codierte Zertifikatsdatei hoch oder kopieren Sie den Inhalt des Zertifikats.
Klicken Sie auf Hinzufügen, um das Zertifikat auf die Zulassungsliste zu setzen.
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 werden. Diese Beispielressource für die Vertrauenskonfiguration enthält einen Trust Store mit einem Trust-Anchor und einem Zwischenzertifikat. Der Zertifikatsinhalt wird aus den Umgebungsvariablen gelesen, die im vorherigen Schritt Zertifikate formatieren erstellt wurden.cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT?}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT?}" EOF
Fügen Sie im entsprechenden Abschnitt
pemCertificate
-Zeilen hinzu, um einen Trust Store mit zusätzlichen Trust-Anchors oder Zwischenzertifikaten zu erstellen.Optional: Geben Sie das Zertifikat an, das der YAML-Datei für die Trust-Konfiguration im Feld
allowlistedCertificates
hinzugefügt wird. Sie benötigen keinen Trust Store, um ein Zertifikat einer Zulassungsliste hinzuzufügen.cat << EOF >> trust_config.yaml allowlistedCertificates: - pemCertificate: "${ALLOWLISTED_CERT?}" EOF
Ein Zertifikat, das einer Zulassungsliste hinzugefügt wird, steht für jedes Zertifikat, das in der Vertrauenskonfiguration enthalten sein kann, sodass es immer als gültig betrachtet wird. Sie können mehrere Zertifikate in einer Zulassungsliste angeben, indem Sie mehrere Instanzen des Felds
pemCertificate
verwenden.Verwenden Sie den
gcloud certificate-manager trust-configs import
-Befehl, um die YAML-Datei mit der Vertrauenskonfiguration zu importieren:global
Geben Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer
global
als Speicherort der Trust-Konfigurationsressource an.gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=global
Ersetzen 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 Trust-Konfigurationsressource gespeichert ist.
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=LOCATION
Ersetzen 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 Ressource zur Clientauthentifizierung (auch als ServerTLSPolicy
bezeichnet) können Sie den serverseitigen TLS-Modus und die Trust-Konfigurationsressource angeben, die bei der Validierung von Clientzertifikaten verwendet werden soll. Wenn der Client dem Load Balancer ein ungültiges oder kein Zertifikat vorlegt, gibt der clientValidationMode
an, wie mit der Clientverbindung umgegangen wird. Weitere Informationen finden Sie unter mTLS-Clientvalidierungsmodi.
- Wenn
clientValidationMode
aufALLOW_INVALID_OR_MISSING_CLIENT_CERT
gesetzt ist, werden alle Anfragen an das Backend weitergeleitet, auch wenn die Validierung fehlschlägt oder das Clientzertifikat fehlt. - Wenn
clientValidationMode
aufREJECT_INVALID
festgelegt ist, werden nur Anfragen, die ein Clientzertifikat enthalten, das anhand einerTrustConfig
-Ressource validiert werden kann, an das Backend weitergeleitet.
Führen Sie die folgenden Schritte aus, um eine Ressource für die Clientauthentifizierung (ServerTlsPolicy
) zu erstellen:
Console
Rufen Sie in der Google Cloud Console die Seite Authentifizierungskonfiguration auf.
Klicken Sie auf dem Tab Client Authentication (Clientauthentifizierung) auf Create (Erstellen).
Geben Sie einen Namen für die Clientauthentifizierungsressource ein.
Wählen Sie als Standort die Option Global oder Regional aus.
Für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer legen Sie 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 Client Authentication mode (Clientauthentifizierungsmodus) die Option Load balancing (Lastenausgleich) aus.
Wählen Sie einen Clientvalidierungsmodus aus.
Wählen Sie die Konfigurationsressource für die Vertrauensstellung aus, die Sie zuvor erstellt haben.
Klicken Sie auf Erstellen.
Prüfen Sie, ob die Clientauthentifizierung (ServerTlsPolicy
) angezeigt wird.
gcloud
Wählen Sie je nach gewünschter Vorgehensweise eine der folgenden Optionen aus, um die Ressource „Client Authentication“ (
ServerTlsPolicy
) im YAML-Format zu definieren.Option 1:
clientValidationMode
ist aufALLOW_INVALID_OR_MISSING_CLIENT_CERT
festgelegt.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 Vertrauenskonfigurationsressource 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 EOF
regional
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 Vertrauenskonfigurationsressource 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 EOF
Option 2:
clientValidationMode
ist aufREJECT_INVALID
festgelegt.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 Vertrauenskonfigurationsressource 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 EOF
regional
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 Vertrauenskonfigurationsressource 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 EOF
Ersetzen Sie Folgendes:
SERVER_TLS_POLICY_NAME
: der Name der Ressource für die Clientauthentifizierung (ServerTlsPolicy
).PROJECT_ID
: die ID Ihres Google Cloud Projekts.LOCATION
: Verwenden Sieglobal
für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer. Verwenden Sie für einen regionalen externen oder 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 ClientauthentifizierungsressourceServerTlsPolicy
zu importieren:global
Setzen Sie für globale externe Application Load Balancer, klassische Application Load Balancer und regionenübergreifende interne Application Load Balancer das Flag
--location
aufglobal
.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 Ressource für die Clientauthentifizierung (ServerTlsPolicy
).regional
Legen Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer das Flag
--location
auf die Region fest, 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 Ressource für die Clientauthentifizierung (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 einen regionalen externen oder internen Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.
Ressource zur Clientauthentifizierung an den Load-Balancer anhängen
Damit die gegenseitige TLS-Authentifizierung funktioniert, müssen Sie nach dem Einrichten des Load-Balancers die Ressource für die Clientauthentifizierung (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 Client Authentication-Ressource (
ServerTLSPolicy
) anhängen möchten.Klicken Sie auf
Bearbeiten.Maximieren Sie im Bereich Frontend-Konfiguration für ein HTTPS-Frontend den Bereich Erweiterte Funktionen anzeigen.
Wählen Sie in der Liste Clientauthentifizierung die Clientauthentifizierungsressource aus.
Klicken Sie auf Fertig.
Klicken Sie auf Aktualisieren.
gcloud
Verwenden Sie den Befehl
gcloud compute target-https-proxies list
, um alle Ziel-HTTPS-Proxyressourcen in Ihrem Projekt aufzulisten:gcloud compute target-https-proxies list
Notieren Sie sich den Namen des HTTPS-Ziel-Proxys, an den die
ServerTLSPolicy
-Ressource angehängt werden soll. Dieser Name wird in den folgenden Schritten alsTARGET_HTTPS_PROXY_NAME
bezeichnet.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 \ --global
Ersetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME
: der Name des Zielproxys.TARGET_PROXY_FILENAME
: Der Name der Konfigurationsdatei des Zielproxys im YAML-Format. Beispiel:mtls_target_proxy.yaml
.
regional
gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \ --destination=TARGET_PROXY_FILENAME \ --region=REGION
Ersetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME
: der Name des Zielproxys.TARGET_PROXY_FILENAME
: Der Name der Konfigurationsdatei des Zielproxys im YAML-Format. z. B.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=LOCATION
Ersetzen Sie Folgendes:
LOCATION
: Verwenden Sieglobal
für den regionenübergreifenden internen Application Load Balancer, den globalen externen Application Load Balancer oder den 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.Notieren Sie sich den Namen der Clientauthentifizierungsressource (
ServerTLSPolicy
), um mTLS zu konfigurieren. Dieser Name wird im nächsten Schritt alsSERVER_TLS_POLICY_NAME
bezeichnet.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 Google Cloud Projekts.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 regionale externe Application Load Balancer oder regionale interne Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.SERVER_TLS_POLICY_NAME
: der Name der Ressource für die Clientauthentifizierung (ServerTLSPolicy
).TARGET_PROXY_FILENAME
: Der Name der Konfigurationsdatei des Zielproxys 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 \ --global
Ersetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME
: der Name des Zielproxys.TARGET_PROXY_FILENAME
: Der Name der Konfigurationsdatei des Zielproxys im YAML-Format. Beispiel:mtls_target_proxy.yaml
.
regional
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --source=TARGET_PROXY_FILENAME \ --region=REGION
Ersetzen Sie Folgendes:
TARGET_HTTPS_PROXY_NAME
: der Name des Zielproxys.TARGET_PROXY_FILENAME
: Der Name der Konfigurationsdatei des Zielproxys im YAML-Format. z. B.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 den Logs erfasst werden.
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 und Logging zu aktivieren. Dieser Name wird im folgenden Schritt als
BACKEND_SERVICE
bezeichnet.Verwenden Sie den Befehl
gcloud compute backend-services update
, um den Backend-Dienst zu aktualisieren:gcloud compute backend-services update BACKEND_SERVICE \ --global \ --enable-logging \ --logging-sample-rate=1 \ --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 und Logging 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 mit dem Zwischenzertifikat signieren
Dieser Abschnitt bietet eine zusätzliche Konfigurationsoption zum Generieren eines Clientzertifikats (untergeordnetes Zertifikat). Wenn Sie bereits eine TrustConfig-Ressource mit einem Zwischenzertifikat erstellt haben, gehen Sie so vor:
Erstellen Sie eine 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 werden, die in die CSR aufgenommen werden sollen. Weitere Informationen zu den Anforderungen an 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 EOF
Wenn Sie der Konfigurationsdatei eine SPIFFE-Identität zuweisen möchten, gehen Sie so vor:
Fügen Sie dem Abschnitt
[extension_requirements]
das FeldsubjectAltName
so hinzu:subjectAltName = @sans_list
Fügen Sie am Ende der Datei
client.config
einen neuen Abschnitt ([sans_list]
) hinzu:[sans_list] URI.1 = spiffe://example.com/test-identity
Erstellen Sie die CSR (
client.csr
) für das Clientzertifikat.openssl req -new \ -config client.config \ -keyout client.key -out client.csr
Signieren Sie den CSR, um das X.509-Clientzertifikat (
client.cert
) auszustellen. Der CSR wird mit dem Zwischenzertifikat signiert.openssl x509 -req \ -CAkey int.key -CA int.cert \ -days 365 \ -extfile client.config \ -extensions extension_requirements \ -in client.csr -out client.cert
Senden Sie mit dem clientseitigen SSL-Zertifikat eine sichere HTTPS-Anfrage an die IP-Adresse des Load-Balancers. Der Client präsentiert sein Zertifikat (
client.cert
), um sich beim Load Balancer zu authentifizieren.curl -v --key client.key --cert client.cert https://IP_ADDRESS
Ersetzen Sie IP_ADDRESS durch die IP-Adresse des Load-Balancers.