Secret Manager-Anmeldedatenanbieter verwenden

Mit Secret Manager können Sie Ihre sensiblen Daten wie API-Schlüssel, Passwörter und Zertifikate schützen. Sie können damit Ihre Secrets inGoogle Cloudverwalten, darauf zugreifen und sie prüfen.

Sie können einen Dataproc-Cluster oder -Job so konfigurieren, dass er ein Secret Manager-Secret verwendet. Verwenden Sie dazu den Secret Manager-Anmeldedatenanbieter.

Verfügbarkeit

Dieses Feature ist für die Verwendung mit Dataproc-Clustern verfügbar, die mit den Image-Versionen 2.0.97+, 2.1.41+, 2.2.6+ oder späteren Hauptversionen von Dataproc-Image-Versionen erstellt wurden.

Terminologie

In der folgenden Tabelle werden die in diesem Dokument verwendeten Begriffe beschrieben.

Begriff Beschreibung
Secret Ein Secret Manager-Secret ist ein globales Projektobjekt, das eine Sammlung von Metadaten und Secret-Versionen enthält. Sie können Secrets als binäre Blobs oder Textstrings speichern, verwalten und darauf zugreifen.
Credential In Hadoop und anderen von Dataproc gehosteten Anwendungen besteht eine Anmeldedaten aus einem Anmeldedatennamen (ID) und einem Anmeldedatenwert (Passwort). Eine Anmeldedaten-ID und ein Wert werden einer Secret Manager-Secret-ID und einem Secret-Wert (Secret-Version) zugeordnet.

Nutzung

Sie können Hadoop und andere OSS-Komponenten für die Verwendung mit Secret Manager konfigurieren, indem Sie die folgenden Attribute festlegen, wenn Sie einen Dataproc-Cluster erstellen oder einen Job senden.

  • Anbieterpfad : Die Eigenschaft „Anbieterpfad“ (hadoop.security.credential.provider.path) ist eine durch Kommas getrennte Liste mit einem oder mehreren URI-Pfaden für Anmeldedatenanbieter, die durchlaufen werden, um Anmeldedaten aufzulösen.

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • Das scheme im Anbieterpfad gibt den Typ des Anmeldedatenanbieters an. Hadoop-Schemata umfassen jceks://, user:// und localjceks://. Verwenden Sie das gsm://-Schema,um in Secret Manager nach Anmeldedaten zu suchen.
  • Punktoperator ersetzen : Der Secret Manager-Dienst lässt keine Punkte (.) in Secret-Namen zu. Einige OSS-Komponenten verwenden jedoch Punkte in ihren Anmeldedatenschlüsseln. Um diese Einschränkung zu beheben, aktivieren Sie diese Eigenschaft, damit Punkte (.) in Anmeldedatennamen durch Bindestriche (-) ersetzt werden. So wird dafür gesorgt, dass OSS-Anmeldedaten mit Punkten im Namen korrekt in Secret Manager gespeichert und abgerufen werden können.

    Wenn ein OSS-Anmeldeschlüssel beispielsweise a.b.c ist, müssen Sie ihn in a-b-c ändern, wenn Sie ihn in Secret Manager speichern.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

    Dies ist ein optionales Attribut. Der Standardwert ist false. Bei Anmeldedatenschlüsseln, deren Anmeldedatenname keinen Punktoperator (.) enthält, kann diese Eigenschaft ignoriert werden.

  • Secret-Version : Secrets in Secret Manager können mehrere Versionen (Werte) haben. Mit dieser Eigenschaft können Sie in Produktionsumgebungen stabil auf eine bestimmte Secret-Version zugreifen.

    --properties=hadoop.security.credstore.google-secret-manager.secret-version=1
    

    Dies ist ein optionales Attribut. Standardmäßig greift Secret Manager auf die Version LATEST zu, die zur Laufzeit in den neuesten Wert des Secrets aufgelöst wird. Wenn Sie immer auf die LATEST-Version eines Secrets zugreifen möchten, kann diese Eigenschaft ignoriert werden.

Dataproc-Cluster mit Secret Manager-Anmeldedatenanbieter erstellen

  1. Führen Sie den folgenden Befehl lokal oder in Cloud Shell aus, um einen Dataproc-Cluster mit den erforderlichen Eigenschaften zu erstellen.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Hinweise:

Dataproc-Job mit Secret Manager-Anmeldedatenanbieter senden

  1. Führen Sie den folgenden Befehl lokal oder in Cloud Shell aus, um einen Dataproc-Job mit den erforderlichen Eigenschaften zu senden.

    gcloud dataproc jobs submit CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed... \
        -- job-args
    

Hinweise:

Secret Manager mit Hive Metastore verwenden

Die Hive-Metastore-Eigenschaft javax.jdo.option.ConnectionPassword enthält das Passwort, das zur Authentifizierung des Zugriffs auf die Metastore-Datenbank verwendet wird. Das Passwort wird im Textformat in hive-site.xml gespeichert, was ein Sicherheitsrisiko darstellt. In der Produktion empfiehlt es sich, das Passwort in Secret Manager zu speichern und dann die Konfigurationsdatei hive-site.xml zu aktualisieren, damit der Hive-Metastore-Dienst das Passwort aus Secret Manager lesen kann.

In den folgenden Beispielen wird gezeigt, wie Sie Secret Manager in verschiedenen Hive Metastore-Szenarien verwenden.

Cluster mit lokalem Metastore erstellen

  1. Führen Sie den folgenden Befehl lokal oder in Cloud Shell aus, um einen Dataproc-Cluster zu erstellen.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

Hinweise:

  • CLUSTER_NAME: Der Name des neuen Clusters.
  • REGION: Eine Compute Engine-Region, in der Ihre Arbeitslast ausgeführt wird.
  1. Erstellen Sie ein Secret mit Secret Manager oder dem Befehl hadoop credential.

    • Alternative 1:Secret mit Secret Manager erstellen

      • Name des Secrets: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Secret-Wert: METASTORE_PASSWORD.
    • Alternative 2:Verwenden Sie den Befehl hadoop credential, um ein Secret zu erstellen.

      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      

      • METASTORE_PASSWORD: Da der Secret Manager den Punktoperator(.) nicht unterstützt, ersetzen Sie alle Punkte(.) im Passwort durch Bindestriche(-).
  2. Prüfen Sie, ob das Secret vorhanden ist.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
    

  3. Entfernen Sie mit einem Texteditor das Attribut javax.jdo.option.ConnectionPassword aus der Datei hive-site.xml und fügen Sie dann die Attribute hadoop.security.credential.provider.path und hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator in die Datei ein.

    Beispiel-Properties:

    hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

  4. Starten Sie den Hive-Metastore neu.

    sudo systemctl restart hive-metastore
    

Cluster mit einem externen Hive-Metastore erstellen

  1. Führen Sie den folgenden Befehl lokal oder in Cloud Shell aus, um einen Dataproc-Cluster mit den folgenden Clustereigenschaften zu erstellen. Verwenden Sie diesen Cluster als externen Hive-Metastore für Hive-Jobs, die in anderen Dataproc-Clustern für Spark Hive-Arbeitslasten ausgeführt werden.

    gcloud dataproc clusters create METASTORE_CLUSTER_NAME \
        --region=REGION \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore" \
        ...other flags as needed...
    
  2. Erstellen Sie ein Secret mit Secret Manager oder dem Befehl hadoop credential.

    • Alternative 1:Secret mit Secret Manager erstellen
      • Name des Secrets: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Secret-Wert: METASTORE_PASSWORD.
    • Alternative 2:Verwenden Sie den Befehl hadoop credential, um ein Secret zu erstellen.
      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      
      • METASTORE_PASSWORD: Da der Secret Manager den Punktoperator(.) nicht unterstützt, ersetzen Sie Punkte(.) im Passwort durch Bindestriche(-).
  3. Prüfen Sie, ob das Secret vorhanden ist.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
      

Cluster zum Ausführen von Hive-Jobs erstellen, die eine Verbindung zu einem externen Metastore herstellen

  1. Führen Sie den folgenden Befehl lokal oder in Cloud Shell aus, um einen Dataproc-Cluster mit den folgenden Clustereigenschaften zu erstellen. Mit diesem Cluster können Sie Hive-Jobs ausführen, die eine Verbindung zum externen Metastore in einem anderen Dataproc-Cluster herstellen.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hive:javax.jdo.option.ConnectionURL=jdbc:mysql://METASTORE_CLUSTER_NAME-m/metastore,hive:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hive:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Hadoop-Anmeldedatenbefehle

Sie können SSH verwenden, um eine Verbindung zum Dataproc-Masterknoten herzustellen und mit dem Befehl hadoop credential Geheimnisse zu erstellen, aufzulisten und zu verwalten.

hadoop credential-Befehle haben das folgende Format: hadoop credential SUBCOMMAND OPTIONS. In den folgenden Beispielen wird das Flag -provider hinzugefügt, um den Anbietertyp und den Speicherort (den Anbieterspeicher) anzugeben. Das Schema gsm:// gibt den Secret Manager an.

  • Erstellt ein Secret mit der angegebenen Secret-ID. Mit dem Befehl wird das Secret nicht erstellt, wenn die angegebene Secret-ID vorhanden ist. Dieses Verhalten entspricht der Hadoop-API CredentialProvider.

    hadoop credential create SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • In einem Projekt gespeicherte Secrets auflisten.

    hadoop credential list -provider gsm://projects/PROJECT_ID
    

  • Prüfen, ob ein Secret in einem Projekt mit einem angegebenen Wert vorhanden ist.

    hadoop credential check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • Nach einer bestimmten Secret-Version in einer Konfigurationsdatei suchen

    hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    
  • CONFIG_FILE: Die XML-Datei, in der hadoop.security.credstore.google-secret-manager.secret-version festgelegt wird.

  • Löscht alle Versionen eines Secrets in einem Projekt.

    hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
    

Weitere Informationen finden Sie im Leitfaden zu Hadoop-Befehlen.

Nächste Schritte