Configurar o Kerberos para endpoints Thrift do metastore do Dataproc

Esta página explica como configurar o Kerberos para o serviço Metastore do Dataproc que usa o protocolo de endpoint Thrift. Se o serviço Metastore do Dataproc usa 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 Serviço Gerenciado para Apache Spark 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 Metastore do Dataproc, consulte Sobre o Kerberos.

  • Crie e hospede seu próprio KDC do Kerberos ou saiba como usar o KDC local de um cluster do Serviço Gerenciado para Apache Spark.

  • Crie um bucket do Cloud Storage ou acesse um bucket atual. É necessário 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 por IP entre a rede VPC e o KDC. É necessário fazer isso para autenticar o 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 do metastore do Dataproc. Para mais informações, consulte Regras de firewall para seus serviços.

  • Se você usar VPC Service Controls, então o secret do Secret Manager e o objeto krb5.conf do Cloud Storage precisarão 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 de VPC você quer usar. É necessário configurar o cluster do Serviço Gerenciado para Apache Spark 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 um metastore do Dataproc com o 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 metastore.services.create permissão, que é necessária para criar um metastore do Dataproc com o Kerberos.

Também é possível receber 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 metastore do Dataproc, 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 Metastore do Dataproc anexado a um cluster do Serviço Gerenciado para Apache Spark.

Criar um cluster do Serviço Gerenciado para Apache Spark e ativar o Kerberos

gcloud

Para configurar um cluster do Serviço Gerenciado para Apache Spark 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 Serviço Gerenciado para Apache Spark.

Configurar o cluster do Serviço Gerenciado para Apache Spark para o Kerberos

As instruções a seguir mostram como usar o SSH para se conectar a um cluster principal do Serviço Gerenciado para Apache Spark associado ao serviço Metastore do Dataproc.

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

  1. No Google Cloud console do, 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 Serviço Gerenciado para Apache Spark (your-cluster-name-m).

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

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

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

    Você 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_PRINCIPAL_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 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. Ele é usado para autenticar um principal de serviço com um KDC do Kerberos.

Para criar um arquivo keytab

  1. Na sessão SSH do Serviço Gerenciado para Apache Spark, 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 Serviço Gerenciado para Apache Spark, 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 Serviço Gerenciado para Apache Spark.

  1. Determine o endereço IP interno principal da instância principal do cluster do Serviço Gerenciado para Apache Spark.

    gcloud compute instances list
    

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

    ~$ 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 Serviço Gerenciado para Apache Spark.

    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 Serviço Gerenciado para Apache Spark 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 o arquivo krb5.conf.

    Quando o upload terminar, copie o caminho dele. É necessário usá-lo ao criar o serviço Metastore do Dataproc.

Conceder papéis e permissões 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 Metastore do Dataproc com o Kerberos

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

Crie o serviço na rede VPC como o cluster do Serviço Gerenciado para Apache Spark.

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 Metastore do Dataproc.
  • LOCATION: o local do serviço Metastore do Dataproc.
  • VPC_NETWORK: o nome da sua rede VPC. Use a mesma rede configurada no cluster do Serviço Gerenciado para Apache Spark.
  • KERBEROS_PRINCIPAL: o nome do principal do Kerberos criado anteriormente.
  • KRB5_CONFIG: o local do arquivo krb5.conf. 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 metastore do Dataproc 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 armazenamento.

  1. Faça login SSH na instância principal do cluster do Serviço Gerenciado para Apache Spark.

  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 Serviço Gerenciado para Apache Spark.

    <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 Serviço Gerenciado para Apache Spark antes de enviar jobs

Para executar os jobs do Serviço Gerenciado para Apache Spark, 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 seguinte linha em cada nó do Serviço Gerenciado para Apache Spark.

    allowed.system.users=hive
    

Receber um tíquete do Kerberos

  1. Consiga o tíquete do 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 principal.

A seguir