Configurer Kerberos pour les points de terminaison Thrift de Dataproc Metastore

Cette page explique comment configurer Kerberos pour votre service Dataproc Metastore qui utilise le protocole de point de terminaison Thrift. Si votre service Dataproc Metastore utilise le protocole de point de terminaison gRPC, consultez la section Configurer Kerberos pour les points de terminaison gRPC.

Avant de commencer

  • Comprendre les principes de base de Kerberos

    Dans ces instructions, vous allez utiliser un cluster Dataproc pour créer les éléments Kerberos suivants:

    • Un fichier Keytab.
    • Un fichier krb5.conf
    • Un compte principal Kerberos.

    Pour en savoir plus sur le fonctionnement de ces éléments Kerberos avec un service Dataproc Metastore, consultez la page À propos de Kerberos.

  • Créez et hébergez votre propre KDC Kerberos, ou découvrez comment utiliser le KDC local d'un cluster Dataproc.

  • Créez un bucket Cloud Storage ou accédez à un bucket existant. Vous devez stocker votre fichier krb5.conf dans ce bucket.

Remarques concernant le réseau

Avant de configurer Kerberos, tenez compte des paramètres réseau suivants:

  • Configurez une connexion IP entre votre réseau VPC et KDC. Vous devez effectuer cette opération pour authentifier votre fichier KDC auprès du service Dataproc Metastore.

  • Configurez les règles de pare-feu nécessaires sur le KDC. Ces règles sont nécessaires pour autoriser le trafic provenant de Dataproc Metastore. Pour en savoir plus, consultez la section Règles de pare-feu pour vos services.

  • Si vous utilisez VPC Service Controls, le secret Secret Manager et l'objet Cloud Storage krb5.conf doivent appartenir à un projet situé dans le même périmètre de service que le service Dataproc Metastore.

  • Décidez du réseau d'appairage VPC que vous souhaitez utiliser. Vous devez configurer votre cluster Dataproc et votre service Dataproc Metastore avec le même réseau d'appairage de VPC.

Rôles requis

Pour obtenir l'autorisation nécessaire pour créer un service Dataproc Metastore avec Kerberos, demandez à votre administrateur de vous attribuer les rôles IAM suivants pour votre projet, selon le principe du moindre privilège:

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ce rôle prédéfini contient l'autorisation metastore.services.create, qui est requise pour créer un Dataproc Metastore avec Kerberos.

Vous pouvez également obtenir cette autorisation avec des rôles personnalisés ou d'autres rôles prédéfinis.

Pour en savoir plus sur les rôles et autorisations spécifiques de Dataproc Metastore, consultez la page Gérer l'accès avec IAM.

Pour en savoir plus, consultez la page IAM et contrôle des accès Dataproc Metastore.

Activer Kerberos pour Dataproc Metastore

Les instructions suivantes vous expliquent comment configurer Kerberos pour un service Dataproc Metastore associé à un cluster Dataproc.

Créer un cluster Dataproc et activer Kerberos

gcloud

Pour configurer un cluster Dataproc avec Kerberos, exécutez la commande gcloud dataproc clusters create suivante:

gcloud dataproc clusters create CLUSTER_NAME \
    --image-version=2.0 \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

Remplacez les éléments suivants :

  • CLUSTER_NAME: nom de votre cluster Dataproc.

Configurer le cluster Dataproc pour Kerberos

Les instructions suivantes vous expliquent comment utiliser SSH pour vous connecter à un cluster Dataproc principal associé à votre service Dataproc Metastore.

Vous devez ensuite modifier le fichier hive-site.xml et configurer Kerberos pour votre service.

  1. Dans la console Google Cloud, accédez à la page Instances de VM.
  2. Dans la liste des instances de machine virtuelle, cliquez sur SSH sur la ligne du nœud principal Dataproc (your-cluster-name-m).

    Une fenêtre de navigateur s'ouvre dans votre répertoire d'accueil sur le nœud.

  3. Ouvrez le fichier /etc/hive/conf/hive-site.xml.

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

    Un résultat semblable aux lignes suivantes s'affiche:

    <property>
    <name>hive.metastore.kerberos.principal</name>
    <value>PRINCIPAL_NAME</value>
    </property>
    <property>
    <name>hive.metastore.kerberos.keytab.file</name>
    <value>METASTORE_PRINCPAL_KEYTAB</value>
    </property>
    

    Remplacez :

    • PRINCIPAL_NAME : nom de compte principal, au format suivant : primary/instance@REALM. Exemple : hive/test@C.MY-PROJECT.INTERNAL.
    • METASTORE_PRINCIPAL_KEYTAB: emplacement de votre fichier keytab de métastore Hive. Utilisez la valeur suivante : /etc/security/keytab/metastore.service.keytab.

Créer un fichier keytab

Les instructions suivantes vous expliquent comment créer un fichier keytab.

Un fichier keytab contient une paire de comptes principaux Kerberos et une paire de clés chiffrées. Il permet d'authentifier un compte principal de service auprès d'un KDC Kerberos.

Créer un fichier keytab

  1. Dans la session SSH Dataproc, créez l'onglet "Keytab" et le compte principal.

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
    
  2. Dans la session SSH de Dataproc, créez et importez le fichier keytab dans Secret Manager.

    gcloud secrets create SECRET_NAME --replication-policy automatic
    sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab

    Remplacez les éléments suivants :

    • SECRET_NAME: nom de votre secret.

Mettre à jour le fichier krb5.conf

Vous devez ensuite mettre à jour le fichier krb5.conf pour l'associer à votre cluster Dataproc.

  1. Déterminez l'adresse IP interne principale de l'instance principale du cluster Dataproc.

    gcloud compute instances list
    

    Par exemple, l'exécution de cette commande génère un résultat semblable à celui-ci:

    ~$ gcloud compute instances list --project kerberos-project
    NAME                                                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP    EXTERNAL_IP     STATUS
    cluster-236-m                                        us-central1-c  n2-standard-4               192.0.2.2      *.*.*.*         RUNNING
    ...
    

    Dans ce cas, l'adresse IP interne du cluster est 192.0.2.2.

  2. Ouvrez le fichier krb5.conf.

    sudo vim /etc/krb5.conf
    
  3. Dans le fichier, remplacez les paramètres KDC et admin_server existants par l'adresse IP interne de votre cluster Dataproc.

    Par exemple, l'utilisation de la valeur d'adresse IP des étapes précédentes ressemble à ce résultat.

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. Importez le fichier /etc/krb5.conf depuis votre VM principale Dataproc vers votre bucket Cloud Storage.

    gsutil cp /etc/krb5.conf gs://PATH_TO_KRB5
    

    Remplacez :

    • PATH_TO_KRB5: URI Cloud Storage contenant votre fichier krb5.conf.

    Une fois l'importation terminée, copiez le chemin d'accès. Vous en aurez besoin lorsque vous créerez votre service Dataproc Metastore.

Accorder des rôles et des autorisations IAM

  1. Accordez au compte de service Dataproc Metastore l'autorisation d'accéder au fichier keytab. Ce compte est géré par Google et figure sur la page de l'interface utilisateur des autorisations IAM en sélectionnant Inclure les attributions de rôles fournies par Google.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/secretmanager.secretAccessor

  2. Accordez au compte de service Dataproc Metastore l'autorisation d'accéder au fichier krb5.conf.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/storage.objectViewer

Créer un service Dataproc Metastore avec Kerberos

Créez un service Dataproc Metastore configuré avec vos fichiers Kerberos.

Veillez à créer votre service dans le réseau VPC en tant que cluster Dataproc.

gcloud metastore services create SERVICE \
   --location=LOCATION \
   --instance-size=medium \
   --network=VPC_NETWORK \
   --kerberos-principal=KERBEROS_PRINCIPAL \
   --krb5-config=KRB5_CONFIG \
   --keytab=CLOUD_SECRET

Remplacez les éléments suivants :

  • SERVICE: nom de votre service Dataproc Metastore.
  • LOCATION: emplacement de votre service Dataproc Metastore.
  • VPC_NETWORK:nom de votre réseau VPC. Utilisez le même réseau que celui configuré dans votre cluster Dataproc.
  • KERBEROS_PRINCIPAL: nom du compte principal kerberos que vous avez créé précédemment.
  • KRB5_CONFIG: emplacement du fichier krb5.config. Utilisez l'URI de l'objet Cloud Storage qui pointe vers votre fichier.
  • CLOUD_SECRET: nom de ressource relatif d'une version de secret Secret Manager.

Une fois le cluster créé, Dataproc Metastore tente de se connecter avec vos identifiants kerberos à l'aide du compte principal, du fichier keytab et du fichier krb5.conf fournis. Si la connexion échoue, la création de Dataproc Metastore échouera également.

Une fois le service Dataproc Metastore créé, recherchez votre URI du point de terminaison Thrift et votre répertoire d'entrepôt.

  1. Connectez-vous en SSH à l'instance principale de votre cluster Dataproc.

  2. Dans la session SSH, ouvrez le fichier /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. Modifiez le fichier /etc/hive/conf/hive-site.xml sur le cluster Dataproc.

    <property>
    <name>hive.metastore.uris</name>
    <!-- Update this value. -->
    <value>ENDPOINT_URI</value>
    </property>
    <!-- Add this property entry. -->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>WAREHOUSE_DIR</value>
    </property>
    
  4. Redémarrez HiveServer2.

    sudo systemctl restart hive-server2.service
    

Configurer Dataproc avant d'envoyer des jobs

Pour exécuter vos tâches Dataproc, vous devez ajouter l'utilisateur hive à la propriété allowed.system.users dans le fichier container-executor.cfg Hadoop. Cela permet aux utilisateurs d'exécuter des requêtes pour accéder à des données telles que select * from.

  1. Dans la session SSH, ouvrez le fichier Hadoop container-executor.cfg.

    sudo vim /etc/hadoop/conf/container-executor.cfg
    

    Ajoutez la ligne suivante sur chaque nœud Dataproc.

    allowed.system.users=hive
    

Obtenir un ticket kerberos

  1. Obtenez le ticket kerberos avant de vous connecter à l'instance Dataproc Metastore.

    sudo klist -kte /etc/security/keytab/metastore.service.keytab
    sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME
    sudo klist # gets the ticket information.
    sudo hive
    

    Remplacez les éléments suivants :

    • PRINCIPAL_NAME: nom de votre compte principal.

Étapes suivantes