Utiliser le fournisseur d'identifiants Secret Manager

Le Secret Manager peut protéger vos données sensibles, telles que vos clés API, vos mots de passe et vos certificats. Vous pouvez l'utiliser pour gérer, consulter et auditer vos secrets dans Google Cloud.

Vous pouvez configurer un cluster ou un job Managed Service pour Apache Spark afin qu'il utilise un secret Secret Manager à l'aide du fournisseur d'identifiants Secret Manager.

Disponibilité

Cette fonctionnalité est disponible pour une utilisation avec les clusters Managed Service pour Apache Spark créés avec les versions d'image 2.0.97+, 2.1.41+, 2.2.6+ ou ultérieures de Managed Service pour Apache Spark.

Terminologie

Le tableau suivant décrit les termes utilisés dans ce document.

Terme Description
Secret Un secret Secret Manager est un objet de projet global qui contient un ensemble de métadonnées et de versions de secrets. Vous pouvez les gérer et y accéder sous forme de chaînes de texte ou blobs binaires.
Credential Dans Hadoop et d'autres applications hébergées par Managed Service pour Apache Spark, un identifiant se compose d'un nom d'identifiant (ID) et d'une valeur d'identifiant (mot de passe). Un ID d'identifiant et une valeur correspondent à un Secret Manager ID de secret et à une valeur de secret (version du secret).

Utilisation

Vous pouvez configurer Hadoop et d'autres composants OSS pour qu'ils fonctionnent avec Secret Manager en définissant les propriétés suivantes lorsque vous créez un cluster Managed Service pour Apache Spark ou que vous envoyez un job.

  • Chemin du fournisseur : la propriété de chemin du fournisseur, hadoop.security.credential.provider.path, est une liste d'un ou plusieurs URI de fournisseur d'identifiants séparés par une virgule qui sont parcourus pour résoudre un identifiant.

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • Le scheme dans le chemin du fournisseur indique le type de fournisseur d'identifiants. Les schémas Hadoop incluent jceks://, user:// et localjceks://. Utilisez le schéma gsm:// pour rechercher des identifiants dans Secret Manager.
  • Opérateur de substitution de point : le service Secret Manager n'autorise pas les points (.) dans les noms de secrets. Toutefois, certains composants de logiciels Open Source (OSS) utilisent des points dans leurs clés d'identifiants. Pour résoudre cette limitation, activez cette propriété afin de remplacer les points (.) par des traits d'union (-) dans les noms d'identifiants. Cela garantit que les identifiants OSS contenant des points dans leur nom peuvent être stockés et récupérés correctement à partir de Secret Manager.

    Par exemple, si une clé d'identifiant OSS est a.b.c, vous devez la modifier en a-b-c lorsque vous la stockez dans Secret Manager.

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

    Il s'agit d'une propriété facultative. La valeur par défaut est false. Pour les clés d'identifiants dont le nom ne contient pas d'opérateur de point (.), cette propriété peut être ignorée sans risque.

  • Version du secret : les secrets dans Secret Manager peuvent avoir plusieurs versions (valeurs). Utilisez cette propriété pour accéder à une version de secret spécifique afin de bénéficier d'un accès stable dans les environnements de production.

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

    Il s'agit d'une propriété facultative. Par défaut, Secret Manager accède à la version LATEST, qui correspond à la dernière valeur du secret au moment de l'exécution. Si votre cas d'utilisation consiste à toujours accéder à la version LATEST d'un secret, cette propriété peut être ignorée sans risque.

Créer un cluster Managed Service pour Apache Spark avec le fournisseur d'identifiants Secret Manager

  1. Exécutez la commande suivante en local ou dans Cloud Shell pour créer un cluster Managed Service pour Apache Spark avec les propriétés requises.
    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...
    

Remarques :

Envoyer un job Managed Service pour Apache Spark avec le fournisseur d'identifiants Secret Manager

  1. Exécutez la commande suivante en local ou dans Cloud Shell pour envoyer un job Managed Service pour Apache Spark avec les propriétés requises.

    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
    

Remarques :

Utiliser Secret Manager avec Hive Metastore

La propriété Hive Metastore, javax.jdo.option.ConnectionPassword, contient le mot de passe utilisé pour authentifier l'accès à la base de données du metastore. Le mot de passe est enregistré au format texte dans hive-site.xml, ce qui représente un risque pour la sécurité. Une bonne pratique de production consiste à stocker le mot de passe dans Secret Manager, puis à mettre à jour le fichier de configuration hive-site.xml pour permettre au service de métastore Hive de lire le mot de passe à partir de Secret Manager.

Les exemples suivants montrent comment utiliser Secret Manager dans différents scénarios Hive Metastore.

Créer un cluster avec un metastore local

  1. Exécutez la commande suivante en local ou dans Cloud Shell pour créer un cluster Managed Service pour Apache Spark.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

Remarques :

  • CLUSTER_NAME : nom du nouveau cluster.
  • REGION : région Compute Engine dans laquelle votre charge de travail s'exécutera.
  1. Créez un secret à l'aide de Secret Manager ou de la commande hadoop credential.

    • Option 1 : Utilisez Secret Manager pour créer un secret.

      • Nom du secret : /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valeur du secret : METASTORE_PASSWORD.
    • Option 2 : Utilisez la commande hadoop credential pour créer un secret.

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

      • METASTORE_PASSWORD : étant donné que Secret Manager n'est pas compatible avec l'opérateur de point(.), remplacez tous les points(.) du mot de passe par des traits d'union(-).
  2. Vérifiez que le secret existe.

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

  3. Utilisez un éditeur de texte pour supprimer la propriété javax.jdo.option.ConnectionPassword du fichier hive-site.xml, puis ajoutez-y les propriétés hadoop.security.credential.provider.path et hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator.

    Exemple de propriétés :

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

  4. Redémarrez Hive Metastore.

    sudo systemctl restart hive-metastore
    

Créer un cluster avec un metastore Hive externe

  1. Exécutez la commande suivante en local ou dans Cloud Shell pour créer un cluster Managed Service pour Apache Spark avec les propriétés de cluster suivantes. Utilisez ce cluster comme metastore Hive externe pour les jobs Hive exécutés à partir d'autres clusters Managed Service pour Apache Spark pour les charges de travail Spark Hive.

    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. Créez un secret à l'aide de Secret Manager ou de la commande hadoop credential.

    • Option 1 : Utilisez Secret Manager pour créer un secret.
      • Nom du secret : /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valeur du secret : METASTORE_PASSWORD.
    • Option 2 : Utilisez la commande hadoop credential pour créer un secret.
      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      
      • METASTORE_PASSWORD : étant donné que Secret Manager n'est pas compatible avec l'opérateur de point(.), remplacez tous les points(.) du mot de passe par des traits d'union(-).
  3. Vérifiez que le secret existe.

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

Créer un cluster pour exécuter des jobs Hive qui se connectent à un metastore externe

  1. Exécutez la commande suivante en local ou dans Cloud Shell pour créer un cluster Managed Service pour Apache Spark avec les propriétés de cluster suivantes. Utilisez ce cluster pour exécuter des jobs Hive qui se connectent au metastore externe sur un autre cluster Managed Service pour Apache Spark.
    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...
    

Commandes d'identifiants Hadoop

Vous pouvez utiliser SSH vous connecter au nœud maître Managed Service pour Apache Spark pour utiliser la commande hadoop credential pour créer, lister et gérer des secrets.

hadoop credential commandes utilisent le format suivant : hadoop credential SUBCOMMAND OPTIONS. Dans les exemples suivants, l'indicateur -provider est ajouté pour spécifier le type et l'emplacement du fournisseur (le magasin de fournisseurs). Le schéma gsm:// spécifie Secret Manager.

  • Créez un secret avec l'ID de secret spécifié. La commande ne crée pas le secret si l'ID de secret spécifié existe déjà. Ce comportement est conforme à l'API Hadoop CredentialProvider.

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

  • Répertoriez les secrets stockés dans un projet.

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

  • Vérifiez si un secret existe dans un projet avec une valeur spécifiée.

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

  • Recherchez une version de secret spécifique dans un fichier de configuration.

    hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    
  • CONFIG_FILE : fichier XML qui définit hadoop.security.credstore.google-secret-manager.secret-version.

  • Supprimez toutes les versions d'un secret dans un projet.

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

Pour en savoir plus, consultez le Guide des commandes Hadoop.

Étape suivante