Arbeitslasten über mTLS bei anderen Arbeitslasten authentifizieren


In diesem Dokument wird beschrieben, wie Sie die automatische Bereitstellung und die Lebenszyklusverwaltung verwalteter Arbeitslastidentitäten für Compute Engine einrichten. Sie konfigurieren CA-Pools so, dass Zertifikate mit Certificate Authority Service (CA) ausgestellt werden. Dies ist ein hochverfügbarer, skalierbarer Google Cloud-Dienst, der die Bereitstellung und Verwaltung und Sicherheit von CA-Diensten vereinfacht und automatisiert. Jede VM wird mit X.509-Anmeldedaten aus dem konfigurierten CA-Pool bereitgestellt. Mit diesen Anmeldedaten können dann mTLS-Verbindungen hergestellt werden.

Mit verwalteten Arbeitslastidentitäten für Compute Engine können Sie wechselseitig authentifizierte und verschlüsselte Kommunikation zwischen zwei beliebigen Compute Engine-VMs implementieren. Arbeitslastanwendungen, die auf den konfigurierten VMs ausgeführt werden, können die X.509-Anmeldedaten für mTLS pro VM verwenden. Diese mTLS-Zertifikate werden automatisch von Certificate Authority Service für Sie rotiert und verwaltet.

Hinweise

  • Zugriff auf die Vorschau der verwalteten Arbeitslastidentität anfordern

  • Google Cloud CLI konfigurieren:

    Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

    gcloud init
  • Konfigurieren Sie die Google Cloud CLI so, dass das zulässige Projekt für die Abrechnung und das Kontingent verwendet wird.

      gcloud config set billing/quota_project PROJECT_ID

    Ersetzen Sie PROJECT_ID durch die ID des Projekts, das der Zulassungsliste für die Vorschau der verwalteten Arbeitslastidentität hinzugefügt wurde.

  • Lesen Sie die Dokumentation Verwaltete Arbeitslastidentitäten.
  • Aktivieren Sie die Compute Engine API:

    gcloud services enable compute.googleapis.com

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen von VMs benötigen, die verwaltete Workload Identity-Zertifikate zur Authentifizierung bei anderen Arbeitslasten verwenden:

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.

Überblick

Führen Sie die folgenden Aufgaben aus, um verwaltete Arbeitslastidentitäten für Ihre Anwendungen zu verwenden:

  1. Sicherheitsadministrator:

  2. Compute-Administrator:

Verwaltete Arbeitslastidentitäten in der Identitäts- und Zugriffsverwaltung konfigurieren

  • Folgen Sie der Anleitung unter Authentifizierung von verwalteten Arbeitslastidentitäten konfigurieren .

    In dieser Anleitung wird Folgendes beschrieben:

    • Erstellen Sie einen Workload Identity-Pool.
    • Erstellen Sie Namespaces im Workload Identity-Pool. Sie verwenden die Namespaces, um administrative Grenzen für Ihre verwalteten Arbeitslastidentitäten zu erstellen, z. B. einen Namespace für jede Anwendung Ihrer Organisation.
    • Erstellen Sie eine verwaltete Arbeitslastidentität in einem Namespace im Workload Identity-Pool. Sie können beispielsweise einen Namespace für eine Anwendung und verwaltete Identitäten in diesem Namespace für die Mikrodienste erstellen, die diese Anwendung unterstützen.
    • Erstellen Sie ein Dienstkonto. Compute Engine-VMs können autorisiert werden, eine verwaltete Arbeitslastidentität anhand des an die VM angehängten Google Cloud-Dienstkontos zu empfangen.
    • Erstellen Sie eine Attestierungsrichtlinie für Arbeitslasten, mit der Ihre Arbeitslast Anmeldedaten für die verwaltete Arbeitslastidentität erhalten kann. Damit Anmeldedaten für die verwaltete Arbeitslastidentität ausgegeben werden können, muss sich die Arbeitslast innerhalb eines angegebenen Projekts befinden und das Dienstkonto muss angehängt sein.
    • Konfigurieren Sie den Certificate Authority Service so, dass Zertifikate für verwaltete Arbeitslastidentitäten ausgestellt werden:
      • Stamm-CA-Pool konfigurieren
      • Untergeordnete CAs konfigurieren
      • Verwaltete Arbeitslastidentitäten autorisieren, Zertifikate vom CA-Pool anzufordern

Konfigurationsdatei zum Hochladen der Partnermetadaten abrufen

Ihr Sicherheitsadministrator erstellt eine JSON-Datei, die Folgendes enthält:

Die Datei sollte den Namen CONFIGS.json haben. Sie verwenden diese Datei beim Erstellen einer Instanzvorlage für MIGs oder beim Erstellen einer einzelnen VM.

Die Datei CONFIGS.json sollte in etwa so aussehen:

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "rsa-2048"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

Verwaltete Arbeitslastidentitäten für eine verwaltete Instanzgruppe aktivieren

Eine verwaltete Instanzgruppe (MIG) ist eine Gruppe von VM-Instanzen, die Sie als eine einzige Entität behandeln. Jede VM in einer MIG wird mit einer Instanzvorlage erstellt. Damit die VMs in der MIG verwaltete Arbeitslastidentitäten verwenden können, geben Sie die Konfiguration in der Instanzvorlage an.

Instanzvorlage erstellen

Erstellen Sie eine Instanzvorlage mit aktiviertem Feature für verwaltete Arbeitslastidentitäten. Verwenden Sie dann diese Vorlage, um eine verwaltete Instanzgruppe (MIG) zu erstellen.

gcloud

Erstellen Sie mit dem Befehl gcloud beta compute instance-templates create eine neue Instanzvorlage, die verwaltete Arbeitslastidentitäten aktiviert.

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --metadata enable-workload-certificate=true \
    --partner-metadata-from-file CONFIGS.json

Sie können beim Erstellen der Instanzvorlage zusätzliche Flags hinzufügen, um die erstellten VMs anzupassen, z. B. um den Maschinentyp und das Image anzugeben, anstatt die Standardwerte zu verwenden.

Ersetzen Sie Folgendes:

  • INSTANCE_TEMPLATE_NAME: Der Name der neuen Vorlage.
  • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos, das die verwaltete Identität erhalten darf.
  • PROJECT_ID: die ID des Projekts, in dem das Dienstkonto erstellt wurde.
  • CONFIGS.json: Die Konfigurationsdatei, die die Konfiguration der Zertifikatsausstellung, die Vertrauenskonfiguration und die verwaltete Arbeitslastidentität enthält.

Weitere Informationen finden Sie unter Instanzvorlagen erstellen.

Verwaltete Instanzgruppe aus der Vorlage erstellen

Erstellen Sie eine verwaltete Instanzgruppe, die eine Instanzvorlage verwendet, die die verwalteten Arbeitslastidentitäten aktiviert. Weitere Informationen zum Erstellen der Instanzvorlage finden Sie unter Instanzvorlage erstellen.

gcloud

Erstellen Sie mit der Instanzvorlage und dem Befehl gcloud compute instance-groups managed create eine MIG.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

Ersetzen Sie Folgendes:

  • INSTANCE_GROUP_NAME: Eine eindeutige ID für die verwaltete Instanzgruppe. Weitere Informationen zu gültigen Namen finden Sie unter Namensressourcen.
  • SIZE: die Größe der verwalteten Instanzgruppe.
  • INSTANCE_TEMPLATE_NAME: Name der Instanzvorlage, die beim Erstellen von VMs in der MIG verwendet werden soll.
  • ZONE ist die Zone, in der die VMs erstellt werden sollen.

Ausführliche Informationen zum Erstellen von MIGs finden Sie unter Grundlegende Szenarien zum Erstellen verwalteter Instanzgruppen (MIGs).

Verwaltete Arbeitslastidentitäten für einzelne VMs aktivieren

Sie können verwaltete Arbeitslastidentitäten für eine VM aktivieren, wenn Sie die VM erstellen oder die Partnermetadaten für eine vorhandene VM aktualisieren.

VMs mit aktivierten verwalteten Arbeitslastidentitäten erstellen

So erstellen Sie eine VM, um das Feature für verwaltete Arbeitslastidentitäten für die VM zu aktivieren:

  • Dienstkonto für die zu verwendende VM angeben
  • Setzen Sie das Metadatenattribut enable-workload-certificate auf true.
  • Geben Sie die Konfiguration der Zertifikatsausstellung und die Informationen zur Vertrauenskonfiguration als Partnermetadaten an.

gcloud

Verwenden Sie den Befehl gcloud beta compute instances create, um eine neue VM zu erstellen. Verwenden Sie die Datei CONFIGS.json, die Sie von Ihrem Sicherheitsadministrator erhalten oder mithilfe der Anleitung unter Konfigurationsdatei zum Hochladen der Partnermetadaten erstellen erstellt haben.

  1. Erstellen Sie eine VM mit aktiviertem Feature für verwaltete Arbeitslastidentitäten.

    gcloud beta compute instances create INSTANCE_NAME \
       --zone=INSTANCE_ZONE \
       --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --metadata enable-workload-certificate=true \
       --partner-metadata-from-file CONFIGS.json
    

    Sie können dem Befehl zusätzliche Zeilen hinzufügen, um die VM zu konfigurieren, z. B. den Maschinentyp und das Image, anstatt die Standardwerte zu verwenden. Weitere Informationen finden Sie unter VM-Instanz erstellen und starten.

    Ersetzen Sie Folgendes:

    • INSTANCE_NAME ist ein eindeutiger Name für die VM. Weitere Informationen zu gültigen Instanznamen finden Sie unter Namensressourcen.
    • INSTANCE_ZONE ist die Zone, in der die VM erstellt werden soll.
    • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos, das die verwaltete Identität erhalten darf.
    • PROJECT_ID: die ID des Projekts, in dem das Dienstkonto erstellt wurde.
    • CONFIGS.json: Der Name der Konfigurationsdatei, die die Konfiguration der Zertifikatsausstellung, die Vertrauenskonfiguration und die Konfiguration der verwalteten Arbeitslastidentität enthält.

Verwaltete Arbeitslastidentitäten auf vorhandenen VMs aktivieren

Aktualisieren Sie die VM so, dass Folgendes konfiguriert wird, um verwaltete Arbeitslastidentitäten für eine vorhandene VM zu aktivieren:

  • Setzen Sie das Metadatenattribut enable-workload-certificate auf true.
  • Geben Sie die Konfiguration der Zertifikatsausstellung und die Informationen zur Vertrauenskonfiguration als Partnermetadaten an.

gcloud

In dieser Aufgabe wird die Datei CONFIGS.json verwendet, die von Ihrem Sicherheitsadministrator bereitgestellt oder mithilfe der Anleitung unter Konfigurationsdatei zum Hochladen der Partnermetadaten erstellen erstellt wurde.

  1. Aktualisieren Sie die Konfiguration für eine vorhandene VM, um verwaltete Arbeitslastidentitäten zu aktivieren.

    gcloud beta compute instances update VM_NAME \
       --zone=ZONE \
       --metadata enable-workload-certificate=true \
       --partner-metadata-from-file CONFIGS.json
    

    Ersetzen Sie Folgendes:

    • VM_NAME: der Name der VM
    • ZONE: die Zone, in der sich die VM befindet
    • CONFIGS.json: Die Konfigurationsdatei, die die Konfiguration der Zertifikatsausstellung, die Vertrauenskonfiguration und die verwaltete Arbeitslastidentität enthält.

Zugriff auf Anmeldedaten für Arbeitslasten auf einer Linux-VM

Nachdem Sie die Arbeitslast für die Arbeitslastauthentifizierung mit mTLS konfiguriert haben, können Sie auf die ausgegebenen Anmeldedaten auf Ihrer VM zugreifen.

Es gibt zwei Möglichkeiten, auf die Anmeldedaten der verwalteten Arbeitslastidentität von Compute Engine und auf das zugehörige Vertrauens-Bundle zuzugreifen:

  • Das Dateisystem auf der VM
  • Compute Engine-Metadatenserver

Über das Dateisystem auf der VM auf die Anmeldedaten und das Vertrauens-Bundle für die Arbeitslast zugreifen

Bei dieser Methode werden die X.509-Anmeldedaten und das Vertrauens-Bundle in einem bestimmten Pfad im Dateisystem der VM platziert. Anwendungen können die Anmeldedaten und das Vertrauens-Bundle direkt aus dem Dateisystem lesen. Beispiele zum Abrufen der Anmeldedaten finden Sie in den folgenden Beispielen auf GitHub:

Die VM muss die Version 20231103.01 oder höher des Compute Engine-Gast-Agents ausführen. Prüfen Sie mit dem folgenden Befehl die Version des Compute Engine-Gast-Agents auf Ihrer VM:

gcloud compute instances get-serial-port-output INSTANCE_NAME | grep "GCE Agent Started"

Wenn die Version des Gast-Agents kleiner als 20231103.01 ist, können Sie sie aktualisieren, indem Sie der Anleitung unter Gastumgebung aktualisieren folgen.

Führen Sie die folgenden Schritte aus, um die Anmeldedaten für die Arbeitslast und das Vertrauens-Bundle im Dateisystem einer VM verfügbar zu machen:

  1. Installieren oder aktualisieren Sie den Compute Engine-Gast-Agent auf Version 20231103.01 oder höher. Der Gast-Agent führt folgende Schritte aus:

    • Die Anmeldedaten und das Vertrauens-Bundle werden automatisch vom Compute Engine-Metadatenserver abgerufen.
    • Stellt atomare Schreibvorgänge in das Dateisystem sicher, während das X.509-Zertifikat und der entsprechende private Schlüssel aktualisiert werden.
    • Die Anmeldedaten und das Vertrauens-Bundle werden automatisch aktualisiert, z. B. wenn die mTLS-Zertifikate rotiert werden.
  2. Nachdem Sie den Compute Engine-Gast-Agent auf dem Gastbetriebssystem installiert oder aktualisiert haben, erstellt der Aktualisierungsjob für die Arbeitslast das Verzeichnis /var/run/secrets/workload-spiffe-credentials und legt die Verzeichnisberechtigungen auf 0755 (rwxr-xr-x) fest.

    Das Verzeichnis enthält die folgenden Dateien, die mit Berechtigungen vom Typ 0644 (rw-r--r--) erstellt wurden:

    • private_key.pem: Ein privater Schlüssel im PEM-Format.
    • certificates.pem: Ein Paket von PEM-formatierten X.509-Zertifikaten, die anderen VMs als Clientzertifikatskette angezeigt oder als Serverzertifikatskette verwendet werden können.
    • ca_certificates.pem: Ein Paket von PEM-formatierten X.509-Zertifikaten, die als Trust-Anchors verwendet werden sollen, wenn Sie die Zertifikate von Peers validieren.

      spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      
    • config_status ist eine Logdatei mit Fehlermeldungen.

  3. Anwendungen können die Zertifikate, den privaten Schlüssel und das Vertrauens-Bundle direkt aus dem Dateisystem lesen, um mTLS-Verbindungen herzustellen.

Mit dem Metadatenserver auf die Anmeldedaten und das Vertrauens-Bundle für die Arbeitslast zugreifen

Eine auf einer Compute Engine-VM ausgeführte Anwendung kann die Metadatenserver-Endpunkte direkt abfragen und die Anmeldedaten und das Vertrauens-Bundle abrufen. Die Anwendung ist dafür verantwortlich, die Metadatenserver-Endpunkte regelmäßig auf neue Anmeldedaten und Aktualisierungen des Vertrauens-Bundles zu prüfen.

Der Compute Engine-Metadatenserver stellt drei HTTP-Endpunkte zur Verfügung, um die Verwendung des Features für verwaltete Arbeitslastidentitäten durch Anwendungen zu ermöglichen, die in der VM ausgeführt werden.

  • gce-workload-certificates/config-status: Ein Endpunkt, der Fehler in den Konfigurationswerten enthält, die über die VM-Metadaten bereitgestellt werden.
  • gce-workload-certificates/workload-identities: Ein Endpunkt von Identitäten, die von der Compute Engine-Steuerungsebene verwaltet werden. Dieser Endpunkt enthält das X.509-Zertifikat und den privaten Schlüssel für die vertrauenswürdige Domain der VM.
  • gce-workload-certificates/trust-anchors: Ein Endpunkt, der eine Reihe vertrauenswürdiger Zertifikate für die Validierung der Peer-X.509-Zertifikatskette enthält.

Weitere Informationen zum Abfragen der Metadaten für eine VM-Instanz finden Sie unter Informationen zu VM-Metadaten.

So greifen Sie über den Metadatenserver auf die Arbeitslastanmeldedaten und das Vertrauens-Bundle zu:

  1. Fragen Sie den Endpunkt gce-workload-certificates/config-status ab. Achten Sie darauf, dass der HTTP-Antwortcode 200 lautet und die Antwort keine partnerMetadataConfigsErrors-Fehler enthält. Wenn solche Fehler auftreten, aktualisieren Sie die entsprechende Konfiguration mit gültigen Werten. Führen Sie dazu die Schritte unter Zertifikatsausstellung und Vertrauenskonfiguration aktualisieren aus.

    Zum Prüfen des Werts können Sie den folgenden Befehl auf der VM ausführen:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    

    Der Endpunkt config-status gibt eine JSON-Antwort mit der folgenden Struktur zurück:

    {
        "partnerMetadataConfigsErrors": {
            "errors": {  // A map of errors keyed by attribute name.
                "ATTRIBUTE_NAME" : "ERROR_DETAILS",
                ...
            }
        }
    }
    
  2. Fragen Sie den Endpunkt gce-workload-certificates/workload-identities ab. Prüfen Sie, ob der HTTP-Antwortcode 200 lautet. Der Endpunkt gibt eine JSON-Antwort mit folgender Struktur zurück:

    {
     "workloadCredentials": {  // Credentials for the VM's trust domains
       "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID": {
          "certificatePem" : "X.509 certificate or certificate chain",
          "privateKeyPem" : "Private for X.509 leaf certificate"
       }
     }
    }
    

    Extrahieren Sie certificatePem und privateKeyPem. Es ist wichtig, dass beide Werte aus derselben Antwort gelesen werden, um eine Diskrepanz zwischen dem privaten und dem öffentlichen Schlüssel zu vermeiden, falls die verwalteten Arbeitslastidentitäten von der Compute Engine-Infrastruktur aktualisiert wurden.

  3. Fragen Sie den Endpunkt gce-workload-certificates/trust-anchors ab. Prüfen Sie, ob der HTTP-Antwortcode 200 lautet. Die Antwort enthält nur die Trust-Anchors für die SPIFFE-vertrauenswürdige Domain, sofern angegeben. Andernfalls gibt die Abfrage einen Fehler zurück. Der Endpunkt trust-anchors gibt eine JSON-Antwort mit folgender Struktur zurück:

    {
        "trustAnchors": {  // Trust bundle for the VM's trust domains
            "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
                "trustAnchorsPem" : "Trust bundle containing the X.509
                roots certificates"
            }
        }
    }
    

    Der Inhalt von trustAnchorsPem enthält das Vertrauens-Bundle, das dann zur Authentifizierung von Peer-X.509-Anmeldedaten beim Herstellen einer mTLS-Verbindung verwendet werden kann.

Anmeldedaten und Vertrauens-Bundle aktualisieren

Die Compute Engine-Steuerungsebene rotiert automatisch die Anmeldedaten für verwaltete Arbeitslastidentitäten und die Vertrauensanker regelmäßig.

Wenn Ihre Anwendungen das Dateisystem verwenden, um auf die Anmeldedaten und das Vertrauens-Bundle für die Arbeitslast zuzugreifen, aktualisiert der Compute Engine-Gast-Agent die Anmeldedaten und das Vertrauens-Bundle automatisch, z. B. wenn die mTLS-Zertifikate rotiert werden.

Wenn Ihre Anwendungen den Metadatenserver abfragen, müssen die auf einer VM ausgeführten Anwendungen regelmäßig die Metadatenserver-Endpunkte abfragen, um die neuesten Anmeldedaten für verwaltete Arbeitslastidentität und das Vertrauens-Bundle abzurufen. Andernfalls können Anwendungen aufgrund des Ablaufs des Zertifikats oder von Änderungen am Vertrauens-Bundle unterbrochen werden, was dazu führen kann, dass die mTLS-Verbindung nicht hergestellt wird. Google empfiehlt, dass Anwendungen alle fünf Minuten die Metadatenserver nach den Anmeldedaten für die verwaltete Arbeitslastidentität und das Vertrauens-Bundle abfragen.

Zertifikatsausstellung und Vertrauenskonfiguration aktualisieren

Sie können die Konfiguration der Zertifikatsausstellung und der Vertrauenskonfiguration für eine VM ändern, die verwaltete Arbeitslastidentitäten verwendet.

Instanzvorlage für eine verwaltete Instanzgruppe aktualisieren

Wenn Sie die Zertifikatsausstellungskonfiguration und die Werte der Vertrauenskonfiguration in einer Instanzvorlage aktualisieren möchten, müssen Sie eine neue Vorlage mit den neuen Werten erstellen. Daher wird das Aktualisieren der Zertifikatsausstellungskonfiguration und der Vertrauenskonfiguration für vorhandene verwaltete Instanzgruppen (MIGs) nicht unterstützt.

Einzelne Compute Engine-VMs aktualisieren

Zum Aktualisieren der Zertifikatsausstellungskonfiguration und der Vertrauenskonfiguration aktualisieren Sie den Inhalt der Datei CONFIGS.json und wenden Sie die Aktualisierungen mit dem Befehl gcloud beta compute instances update an:

gcloud beta compute instances update INSTANCE_NAME \
    --partner-metadata-from-file FILENAME.json

Ersetzen Sie Folgendes:

  • INSTANCE_NAME: der Name der VM, für die Sie die Konfigurationswerte aktualisieren
  • FILENAME: Der Name der geänderten Konfigurationsdatei, z. B. CONFIGS.json

Fehlerbehebung

Methoden zum Diagnostizieren und Beheben häufiger Fehler beim Abrufen von Arbeitslastanmeldedaten finden Sie in der Dokumentation Fehlerbehebung bei der Arbeitslastauthentifizierung bei Arbeitslasten.

Nächste Schritte