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
- Lesen Sie die Übersicht zu gegenseitigem TLS.
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 im Referenzhandbuch für die API und gcloud.
Wenn Sie die gcloud CLI noch nicht ausgeführt haben, führen Sie zuerst
gcloud init
zur Authentifizierung aus.Sie sollten wissen, wie Sie CA-Pools erstellen.
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 eingerichtet haben:
- Back-Ends von VM-Instanzgruppen
- Cloud Storage-Buckets (nur unterstützt, wenn neben dem Back-End-Bucket auch mindestens ein Back-End-Dienst auch mit dem Load-Balancer verbunden ist)
- Cloud Run, App Engine oder Cloud Run Functions
- Hybridkonnektivität
Wenn Sie regionale externe Application Load Balancer, regionenübergreifende interne Application Load Balancer oder regionale interne 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.
Private CA erstellen
Erstellen Sie eine private CA mit dem CA Service und erstellen Sie dann ein Root-Zertifikat:
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.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 CACA_POOL
ist die ID oder der Name des übergeordneten CA-Pools
Verwenden Sie zum Beschreiben der neuen CA und zum Erstellen der Datei
root.cert
den Befehlgcloud 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 CACA_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 Befehlgcloud 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 Sieglobal
für regionenübergreifenden internen Application Load Balancer, globalen externen Application Load Balancer oder klassischen Application Load Balancer. Verwenden Sie für regionale externe oder regionale interne Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.
Ressourcen für die Clientauthentifizierung erstellen
Mit einer Ressource für die Clientauthentifizierung (auch ServerTLSPolicy
genannt) 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.
Weitere Informationen finden Sie unter MTLS-Clientvalidierungsmodi.
- Wenn
clientValidationMode
aufALLOW_INVALID_OR_MISSING_CLIENT_CERT
festgelegt ist, werden alle Anfragen an das Backend übergeben, auch wenn die Validierung fehlschlägt oder das Clientzertifikat fehlt. - Wenn
clientValidationMode
aufREJECT_INVALID
gesetzt ist, werden nur Anfragen an das Backend weitergeleitet, die ein Clientzertifikat bereitstellen, das mit einerTrustConfig
-Ressource validiert werden kann.
Führen Sie die folgenden Schritte aus, um die Ressource ServerTLSPolicy
zu erstellen:
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 undPROJECT_ID
durch die ID Ihres Google Cloud-Projekts.Option 1:
clientValidationMode
ist aufALLOW_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 aufREJECT_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
Verwenden Sie den Befehl
gcloud network-security server-tls-policies import
, um die RessourceServerTlsPolicy
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 Befehl:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=REGION
Optional: Listet alle Ressourcen der Clientauthentifizierung (
ServerTlsPolicies
) am angegebenen Speicherort des aktuellen Projekts auf.Console
Rufen Sie in der Google Cloud Console die Seite Clientauthentifizierung auf.
Es werden alle
ServerTlsPolicies
-Ressourcen angezeigt.
gcloud
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=REGION
Ersetzen Sie Folgendes:
REGION
: 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 einen regionalen externen Application Load Balancer oder einen regionalen internen Application Load Balancer die Region, in der Sie den Load Balancer konfiguriert haben.
mTLS für den Load Balancer einrichten
Damit die gegenseitige TLS-Authentifizierung funktioniert, müssen Sie nach dem Einrichten eines Load-Balancers den Ziel-HTTPS-Proxy mithilfe der Ressource ServerTLSPolicy
aktualisieren.
Prüfen Sie, ob Sie die Ressource „Client Authentication“ (
ServerTLSPolicy
) bereits erstellt haben. Eine Anleitung finden Sie unter Ressourcen für die Clientauthentifizierung erstellen.Verwenden Sie den Befehl
gcloud compute target-https-proxies list
, um alle Ziel-HTTPS-Proxys 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_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 einer YAML-Datei. 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 einer YAML-Datei. z. B.mtls_target_proxy.yaml
.REGION
: die Region, in der Sie den Load Balancer konfiguriert haben.
Listet alle
ServerTlsPolicies
-Ressourcen am angegebenen Speicherort des aktuellen Projekts auf.Console
Rufen Sie in der Google Cloud Console die Seite Clientauthentifizierung auf.
Es werden alle
ServerTlsPolicies
-Ressourcen angezeigt.
gcloud
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=REGION
Ersetzen Sie Folgendes:
REGION
: 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 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
ServerTlsPolicies
-Ressource, um mTLS zu konfigurieren. Dieser Name wird im nächsten Schritt alsSERVER_TLS_POLICY_NAME
bezeichnet.Um die
ServerTlsPolicy
-RessourcendateiTARGET_PROXY_FILENAME
anzuhängen, verwenden Sie den folgenden Befehl. Ersetzen SiePROJECT_ID
durch die ID Ihres Google Cloud-Projekts.echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
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 einer YAML-Datei. 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 einer YAML-Datei. 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 mithilfe benutzerdefinierter Header übergeben. Sie können auch das Logging aktivieren, damit mTLS-Verbindungsfehler in den Logs erfasst werden.
Backend-Diensten benutzerdefinierte mTLS-Header 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 regionsü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 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 auch zum Senden benutzerdefinierter Antwortheader (responseHeadersToAdd
) verwenden.
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}"