Configure o Kerberos para os pontos finais Thrift do Dataproc Metastore

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

Antes de começar

  • Compreenda as noções básicas do Kerberos.

    Nestas instruções, usa um cluster do Dataproc para criar os seguintes recursos do Kerberos:

    • Um ficheiro Keytab.
    • Um ficheiro krb5.conf.
    • Um principal do Kerberos.

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

  • Crie e aloje o seu próprio KDC Kerberos ou saiba como usar o KDC local de um cluster do Dataproc.

  • Crie um contentor do Cloud Storage ou aceda a um existente. Tem de armazenar o ficheiro krb5.conf neste contentor.

Considerações sobre a rede

Antes de configurar o Kerberos, considere as seguintes definições de rede:

  • Configure uma ligação IP entre a sua rede de VPC e o KDC. Tem de o fazer para autenticar o ficheiro KDC com o serviço Dataproc Metastore.

  • Configure as regras de firewall necessárias no seu KDC. Estas regras são necessárias para permitir o tráfego do Dataproc Metastore. Para mais informações, consulte o artigo Regras de firewall para os seus serviços.

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

  • Decida que rede de peering de VPC quer usar. Tem de configurar o cluster do Dataproc e o serviço Dataproc Metastore com a mesma rede de interligação de VPCs.

Funções necessárias

Para receber a autorização de que precisa para criar um Dataproc Metastore com Kerberos, peça ao seu administrador que lhe conceda as seguintes funções de IAM no seu projeto, com base no princípio do menor privilégio:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém a autorização metastore.services.create , que é necessária para criar um Dataproc Metastore com Kerberos.

Também pode obter esta autorização com funções personalizadas ou outras funções predefinidas.

Para mais informações sobre as funções e as autorizações específicas do Dataproc Metastore, consulte o artigo Faça a gestão do acesso com o IAM.

Para mais informações, consulte o artigo IAM e controlo de acesso do Dataproc Metastore.

Ative o Kerberos para o Dataproc Metastore

As instruções seguintes mostram como configurar o Kerberos para um serviço Dataproc Metastore associado a um cluster do Dataproc.

Crie um cluster do Dataproc e ative 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 o seguinte:

  • CLUSTER_NAME: o nome do seu cluster do Dataproc.

Configure o cluster do Dataproc para o Kerberos

As instruções seguintes mostram como usar o SSH para estabelecer ligação a um cluster principal do Dataproc associado ao seu serviço Dataproc Metastore.

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

  1. Na Google Cloud consola, aceda à página Instâncias de VM.
  2. Na lista de instâncias de máquinas virtuais, clique em SSH na linha do nó principal do Dataproc (your-cluster-name-m).

    É aberta uma janela do navegador no seu diretório base no nó.

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

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

    Vê um resultado semelhante ao seguinte:

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

    Substituição:

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

Crie um ficheiro keytab

As instruções seguintes mostram como criar um ficheiro keytab.

Um ficheiro keytab contém um par de principais do Kerberos e um par de chaves encriptadas. Esta opção é usada para autenticar um nome principal do serviço com um KDC de Kerberos.

Para criar um ficheiro 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 carregue o ficheiro 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 o seguinte:

    • SECRET_NAME: o nome do seu segredo.

Atualize o ficheiro krb5.conf

Em seguida, tem de atualizar o ficheiro krb5.conf para o associar ao seu 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 um resultado 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
    ...
    

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

  2. Abra o ficheiro krb5.conf.

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

    Por exemplo, a utilização do valor do endereço IP dos passos anteriores tem um aspeto semelhante a este resultado.

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. Carregue o ficheiro /etc/krb5.conf da VM principal do Dataproc para o seu contentor do Cloud Storage.

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

    Substituição:

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

    Após a conclusão do carregamento, copie o caminho do carregamento. Tem de o usar quando criar o serviço Dataproc Metastore.

Conceda funções e autorizações de IAM

  1. Conceda à conta de serviço do Dataproc Metastore autorização para aceder ao ficheiro keytab. Esta conta é gerida pela Google e apresentada na página da IU de autorizações do IAM se selecionar Incluir concessões de funções fornecidas pela 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. Conceda à conta de serviço do Dataproc Metastore autorização para aceder ao ficheiro 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

Crie um serviço Dataproc Metastore com Kerberos

Crie um novo serviço Dataproc Metastore configurado com os seus ficheiros Kerberos.

Certifique-se de que cria o serviço na rede VPC como o 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 o seguinte:

  • SERVICE: o nome do seu serviço Dataproc Metastore.
  • LOCATION: a localização do seu serviço Dataproc Metastore.
  • 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 criou anteriormente.
  • KRB5_CONFIG: a localização do ficheiro krb5.config. Use o URI do objeto do Cloud Storage que aponta para o seu ficheiro.
  • 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 estabelecer ligação com as suas credenciais do Kerberos através do principal, do keytab e do ficheiro krb5.conf fornecidos. Se a ligação falhar, a criação do Dataproc Metastore também falha.

Depois de criar o serviço Dataproc Metastore, encontre o URI do ponto final Thrift e o diretório do armazém de dados.

  1. SSH para a instância principal do seu cluster do Dataproc.

  2. Na sessão SSH, abra o ficheiro /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 tarefas

Para executar as suas tarefas do Dataproc, tem de adicionar o utilizador hive à propriedade allowed.system.users no ficheiro container-executor.cfg do Hadoop. Isto permite que os utilizadores executem consultas para aceder a dados, como select * from.

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

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

    Adicione a seguinte linha em todos os nós do Dataproc.

    allowed.system.users=hive
    

Obtenha uma permissão Kerberos

  1. Obtenha o pedido de autenticação Kerberos antes de se ligar à instância do 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
    

    Substitua o seguinte:

    • PRINCIPAL_NAME: o nome do seu diretor.

O que se segue?