Configurar o Kerberos para endpoints thrift do metastore do Dataproc

Esta página explica como configurar o Kerberos para seu Serviço do Dataproc Metastore que usa o protocolo de endpoint Thrift. Se o serviço Metastore do Dataproc usa o protocolo de endpoint gRPC, consulte Configure o Kerberos para endpoints do gRPC.

Antes de começar

  • Entenda o básico sobre Kerberos

    Nestas instruções, você vai usar um cluster do Dataproc para criar os seguintes recursos do Kerberos:

    • Um arquivo keytab.
    • Um arquivo krb5.conf
    • Um principal do Kerberos.

    Para mais informações sobre como esses recursos do Kerberos funcionam com um serviço do Dataproc Metastore, consulte Sobre o Kerberos.

  • Crie e hospede seu próprio KDC Kerberos ou aprenda a usar o KDC local de um Cluster do Dataproc.

  • Crie um bucket do Cloud Storage ou acesse um bucket existente. Você precisa armazenar o arquivo krb5.conf nesse bucket.

Considerações sobre a rede

Antes de configurar o Kerberos, considere o seguinte: configurações:

  • Configure uma conexão IP entre sua rede VPC e o KDC. É necessário fazer isso para autenticar seu arquivo KDC com o serviço Metastore do Dataproc.

  • Configure as regras de firewall necessárias KDC (em inglês). Essas regras são necessárias para permitir o tráfego de Metastore do Dataproc. Para mais informações, consulte Regras de firewall para sua e serviços.

  • Se você estiver usando o VPC Service Controls, o segredo do Secret Manager e o objeto krb5.conf do Cloud Storage precisam pertencer a um projeto que resida no mesmo perímetro de serviço que o serviço Metastore do Dataproc.

  • Decida qual rede de peering da VPC você quer usar. Você precisa configurar o Cluster do Dataproc e metastore do Dataproc com a mesma rede de peering de VPC.

Papéis necessários

Para ter a permissão necessária para criar um metastore do Dataproc com o Kerberos, faça o seguinte: peça ao administrador para conceder a você papéis do IAM a seguir no projeto, com base no princípio de privilégio mínimo:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém metastore.services.create permissão, que é necessário para criar um metastore do Dataproc com o Kerberos;

Também é possível conseguir essa permissão com papéis personalizados ou outros papéis predefinidos.

Para mais informações sobre papéis e permissões específicos do Dataproc Metastore, consulte Gerenciar o acesso com o IAM.

Para mais informações, consulte IAM e Dataproc de controle de acesso.

Ativar o Kerberos para o metastore do Dataproc

As instruções a seguir mostram como configurar o Kerberos para um serviço do metastore do Dataproc anexado a um cluster do Dataproc.

Criar um cluster do Dataproc e ativar o Kerberos

gcloud

Para configurar um cluster do Dataproc com o Kerberos: execute o seguinte gcloud dataproc clusters create comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster do Dataproc.

Configurar o cluster do Dataproc para Kerberos

As instruções a seguir mostram como usar o SSH para se conectar a uma instância principal do Dataproc cluster associado ao serviço Metastore do Dataproc.

Depois, modifique o arquivo hive-site.xml e configure o Kerberos para seu serviço.

  1. No console do Google Cloud, acesse a página Instâncias de VM.
  2. Na lista de instâncias de máquina virtual, clique em SSH na linha do nó principal do Dataproc (your-cluster-name-m).

    Uma janela de navegador é aberta no diretório principal do nó.

  3. Abra o arquivo /etc/hive/conf/hive-site.xml.

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

    Você vai ver uma saída semelhante a esta:

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

    Substitua:

    • PRINCIPAL_NAME: um nome principal, no seguinte no formato primary/instance@REALM. Por exemplo, hive/test@C.MY-PROJECT.INTERNAL.
    • METASTORE_PRINCIPAL_KEYTAB: a localização do Arquivo keytab do Hive Metastore. Use o seguinte valor /etc/security/keytab/metastore.service.keytab.

Criar um arquivo keytab

As instruções a seguir mostram como criar um arquivo keytab.

Um arquivo keytab contém um par de principais do Kerberos e um par de chaves criptografadas. Isso é usada para autenticar um principal de serviço com um KDC do Kerberos.

Para criar um arquivo keytab

  1. Na sessão SSH do Dataproc, crie o keytab e o principal.

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
    
  2. Na sessão SSH do Dataproc, crie e faça upload do arquivo keytab ao 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

    Substitua:

    • SECRET_NAME: o nome do secret.

Atualizar o arquivo krb5.conf

Em seguida, você deve atualizar o arquivo krb5.conf para associá-lo à sua cluster do Dataproc.

  1. Determine o endereço IP interno principal do Dataproc instância principal do cluster.

    gcloud compute instances list
    

    Por exemplo, a execução deste comando produz uma saída semelhante:

    ~$ 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
    ...
    

    Nesse caso, o endereço IP interno do cluster é 192.0.2.2.

  2. Abra o arquivo krb5.conf.

    sudo vim /etc/krb5.conf
    
  3. No arquivo, substitua o parâmetro KDC e o parâmetro admin_server pelo endereço IP interno do cluster do Dataproc.

    Por exemplo, o uso do valor do endereço IP das etapas anteriores é semelhante a esta saída.

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. Faça upload do arquivo /etc/krb5.conf do Dataproc principal VM ao bucket do Cloud Storage.

    gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5
    

    Substitua:

    • PATH_TO_KRB5: o URI do Cloud Storage que contém seu arquivo krb5.conf.

    Quando o upload terminar, copie o caminho dele. Você precisa usá-lo ao criar o serviço do metastore do Dataproc.

Conceder permissões e papéis do IAM

  1. Conceder a permissão à conta de serviço do metastore do Dataproc para acessar o arquivo keytab. Essa conta é gerenciada pelo Google e listada na página da interface de permissões do IAM selecionando Incluir concessões de papel fornecidas pelo 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. Forneça à conta de serviço do metastore do Dataproc permissão para acessar o arquivo 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

Criar um serviço do metastore do Dataproc com o Kerberos

Crie um novo serviço do Metastore do Dataproc configurado com seus arquivos Kerberos.

Certifique-se de criar seu serviço na rede VPC como seu Dataproc aglomerado.

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

Substitua:

  • SERVICE: o nome do serviço do metastore do Dataproc.
  • LOCATION: o local do serviço do metastore do Dataproc.
  • VPC_NETWORK: o nome da sua rede VPC. Use a mesma rede configurada no cluster do Dataproc.
  • KERBEROS_PRINCIPAL: o nome do principal do Kerberos que você criou anteriormente.
  • KRB5_CONFIG: o local do arquivo krb5.config. Use o URI de objeto do Cloud Storage que aponta para seu arquivo.
  • CLOUD_SECRET: o nome do recurso relativo de uma versão do secret do Secret Manager.

Depois de criar o cluster, o metastore do Dataproc tenta se conectar com suas credenciais do Kerberos usando o principal, o keytab e o krb5.conf . Se a conexão falhar, a criação do Metastore do Dataproc também falhará.

Após a criação do serviço Metastore do Dataproc, encontre o URI de endpoint do Thrift e o diretório de armazenamento.

  1. Conecte-se por SSH à instância principal do cluster do Dataproc.

  2. Na sessão SSH, abra o arquivo /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. Modifique /etc/hive/conf/hive-site.xml no cluster do 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. Reinicie o HiveServer2:

    sudo systemctl restart hive-server2.service
    

Configure o Dataproc antes de enviar jobs

Para executar jobs do Dataproc, você precisa adicionar o usuário hive à propriedade allowed.system.users no Arquivo container-executor.cfg do Hadoop. Isso permite que os usuários executem consultas para acessar dados, como select * from.

  1. Na sessão SSH, abra o arquivo container-executor.cfg do Hadoop.

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

    Adicione a linha a seguir em cada nó do Dataproc.

    allowed.system.users=hive
    

Receber um tíquete do Kerberos

  1. Consiga o tíquete kerberos antes de se conectar à instância do metastore do Dataproc.

    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
    

    Substitua:

    • PRINCIPAL_NAME: o nome do diretor.

A seguir