Fournisseur d'identifiants Secret Manager

Présentation

Secret Manager peut protéger vos données sensibles, telles que vos clés API, vos mots de passe et vos certificats. Utilisez-le pour gérer vos secrets, y accéder et les auditer sur Google Cloud.

L'API GoogleHadoopSecretManagerCredentialProvider, qui s'intègre à Secret Manager, est une implémentation de l'API Hadoop CredentialProvider, une solution permettant de sécuriser les identifiants sensibles contre l'accès public.

Vous pouvez utiliser l'API du fournisseur d'identifiants Hadoop de différentes manières:

Terminologie

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

Terme Description
Secret Un secret est un objet de projet global qui contient une collection de métadonnées et de versions de secrets. Secret Manager vous permet de stocker et de gérer les secrets, ainsi que d'y accéder sous forme de chaînes de texte ou de blobs binaires.
Credential Dans Hadoop et d'autres applications hébergées par Dataproc, un identifiant se compose d'un nom (ID) et d'une valeur d'identifiant (mot de passe). L'ID et la valeur des identifiants correspondent à un ID et à une valeur de secret (version du secret) dans Secret Manager.

Commandes d'identifiants Hadoop

Vous pouvez utiliser la commande hadoop credential pour créer, répertorier et gérer des secrets. Les commandes hadoop credential utilisent le format général suivant : hadoop credential SUBCOMMAND OPTIONS.

Dans les exemples suivants, l'option -provider est ajoutée pour spécifier le type et l'emplacement du fournisseur (le magasin du fournisseur). 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. Ce comportement est cohérent avec l'API Hadoop CredentialProvider.

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

  • Listez 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
    

  • rechercher 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.

  • Supprimer 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.

Configurer les composants OSS

Vous pouvez configurer Hadoop et d'autres composants OSS compatibles pour qu'ils fonctionnent avec Secret Manager en définissant les propriétés de composant suivantes:

  • Chemin d'accès au fournisseur (obligatoire): la propriété de chemin d'accès au 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 balayés pour résoudre un identifiant.

    --properties=hadoop.security.credential.provider.path=gsm://projects/project-id
    
    • Un élément scheme permet d'indiquer le type de fournisseur d'identifiants. Les schémas Hadoop incluent jceks://, user:// et localjceks://. Utilisez le schéma gsm:// comme indiqué dans l'exemple précédent pour rechercher les identifiants dans Secret Manager.
  • Opérateur de remplacement de point (facultatif): Secret Manager n'accepte pas l'opérateur point(.) dans les noms de secrets, mais les clés d'identification des composants OSS peuvent contenir cet opérateur. Lorsque cette propriété est définie sur true. vous pouvez remplacer les points(.) par des traits d'union(-) dans les noms d'identifiants. Par exemple, lorsque cette propriété est définie sur true, vous pouvez spécifier le nom de l'identifiant a.b.c sur a-b-c lorsque vous le transmettez à Secret Manager. Cette propriété n'est nécessaire que pour spécifier des identifiants à l'aide de commandes d'identifiants Hadoop ou lorsqu'un composant OSS tente de résoudre les identifiants. Il n'a aucun effet sur les commandes de création, de liste ou de suppression d'identifiants Hadoop.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    
  • Version du secret (facultatif): les secrets dans Secret Manager peuvent avoir plusieurs versions (valeurs). Utilisez cette propriété pour accéder à la version d'un secret. Par défaut, Secret Manager accède à la version LATEST, qui résout la dernière valeur du secret au moment de l'exécution. Il est recommandé de définir cette propriété pour un accès stable dans les environnements de production.

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

Exemples de métastore Hive

La propriété de métastore Hive, javax.jdo.option.ConnectionPassword, contient le mot de passe utilisé pour authentifier l'accès à une base de données de métastore. Ce mot de passe est enregistré au format texte brut dans hive-site.xml, ce qui représente un risque de 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 sections suivantes fournissent des instructions sur l'utilisation de Secret Manager dans différents scénarios de métastore Hive.

Cluster Hive avec métastore local

  1. Exécutez la commande suivante en local ou dans Cloud Shell pour créer un cluster Dataproc avec les propriétés de cluster requises.

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

  2. Créez un secret. Vous pouvez créer un secret à l'aide de Secret Manager ou de la commande hadoop credential.

    • Variante 1:utiliser 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.
    • Variante 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: comme Secret Manager n'est pas compatible avec l'opérateur dot(.), remplacez tous les points(.) contenus dans le mot de passe par des traits d'union(-).
  3. Vérifiez que le secret existe.

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

  4. Supprimez javax.jdo.option.ConnectionPassword du fichier hive-site.xml. La commande suivante ouvre le fichier pour le modifier dans vim.

    sudo vim /etc/hive/conf/hive-site.xml
    

  5. Redémarrez Hive Metastore.

    sudo systemctl restart hive-metastore
    

Cluster Hive avec métastore externe

  1. Exécutez la commande suivante localement ou dans Cloud Shell pour créer un cluster Dataproc avec les propriétés de cluster suivantes.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore"
    

  2. Créez un secret. Vous pouvez créer un secret à l'aide de Secret Manager ou de la commande hadoop credential.

    • Variante 1:créer un secret à l'aide de Secret Manager :
      • Nom du secret: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valeur du secret: METASTORE_PASSWORD.
    • Variante 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: comme Secret Manager n'est pas compatible avec l'opérateur dot(.), remplacez les points(.) par des traits d'union(-) dans le mot de passe.
  3. Vérifiez que le secret existe.

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

  4. Exécutez la commande suivante localement ou dans Cloud Shell pour créer un cluster Dataproc avec les propriétés de cluster suivantes. Utilisez ce cluster pour exécuter des tâches Hive et vous connecter au métastore externe.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed...
        --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"
    

Pour en savoir plus