Configurar o Kerberos para endpoints Thrift do metastore do Dataproc

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

Antes de começar

  • Entenda os conceitos básicos do Kerberos.

    Nestas instruções, você usa 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 do 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 as seguintes configurações de rede:

  • Configure uma conexão IP entre a 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 no KDC. Essas regras são necessárias para permitir o tráfego da Metastore do Dataproc. Para mais informações, consulte Regras de firewall para seus 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. É necessário configurar o cluster do Dataproc e o serviço Metastore do Dataproc com a mesma rede de peering de VPC.

Papéis necessários

Para receber a permissão necessária para criar uma Metastore do Dataproc com Kerberos, peça ao administrador para conceder a você os seguintes papéis do IAM 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 a permissão metastore.services.create, que é necessária para criar uma metastore do Dataproc com 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 comando gcloud dataproc clusters create:

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 um cluster principal do Dataproc associado ao serviço do 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 formato primary/instance@REALM. Por exemplo, hive/test@C.MY-PROJECT.INTERNAL.
    • METASTORE_PRINCIPAL_KEYTAB: o local do arquivo keytab do Metastore do Hive. Use o valor /etc/security/keytab/metastore.service.keytab a seguir.

Criar um arquivo de chaves

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 é usado 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 a chavetab 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 para o 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, atualize o arquivo krb5.conf para associá-lo ao cluster do Dataproc.

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

    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 da VM principal do Dataproc para o 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 seu serviço do Dataproc Metastore.

Conceder permissões e papéis do IAM

  1. Forneça à conta de serviço do metastore do Dataproc permissão para acessar o arquivo keytab. Essa conta é gerenciada pelo Google e listada na página da UI 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.

Crie o serviço na rede VPC como cluster do 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

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 rede VPC. Use a mesma rede configurada no cluster do Dataproc.
  • KERBEROS_PRINCIPAL: o nome do principal do Kerberos criado anteriormente.
  • KRB5_CONFIG: o local do arquivo krb5.config. Use o URI do objeto do Cloud Storage que aponta para o arquivo.
  • CLOUD_SECRET: o nome do recurso relativo de uma versão do secret do Secret Manager.

Depois de criar o cluster, o Dataproc Metastore tenta se conectar às credenciais do kerberos usando o principal, o keytab e o arquivo krb5.conf fornecidos. Se a conexão falhar, a criação do Metastore do Dataproc também falhará.

Depois que o serviço Metastore do Dataproc for criado, encontre o URI do endpoint do Thrift e o diretório do armazém.

  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
    

Configurar o Dataproc antes de enviar jobs

Para executar os jobs do Dataproc, adicione 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