Como configurar o Kerberos para um serviço

Kerberos é um protocolo de autenticação de rede projetado para fornecer autenticação forte para aplicativos cliente/servidor usando criptografia de chave secreta. Ele é comumente usado entre a pilha do Hadoop para autenticação em todo o ecossistema de software.

O metastore do Dataproc é compatível com o Kerberos por meio de um centro de distribuição de chaves (KDC, na sigla em inglês) hospedado pelo cliente. Os requisitos da API para oferecer compatibilidade com o Kerberos são um arquivo keytab, um principal e um arquivo krb5.conf.

Esta página explica como ativar e configurar o Kerberos para seu serviço metastore do metastore do Dataproc.

Antes de começar

  • Se quiser ativar o Kerberos para sua instância do metastore do Hive, você precisa ter a seguinte configuração:

    • Seu KDC Kerberos hospedado.

      O KDC é um aplicativo que emite tíquetes do Kerberos. Ele é responsável por autenticar os usuários quando o Kerberos é usado. Nesta página, explicamos como usar um KDC no cluster fornecido pelo Dataproc.

    • Conectividade IP entre a rede VPC e o KDC para realizar a autenticação inicial

    • Regras de firewall no KDC para permitir tráfego do metastore do Dataproc. Consulte também Regras de firewall para seus serviços.

    • Um segredo do Gerenciador de secrets que contém o conteúdo de um arquivo keytab.

      Um arquivo keytab contém pares de principais do Kerberos e chaves criptografadas, que podem ser usadas para autenticar um principal de serviço com um KDC do Kerberos. Nesta página, explicamos como gerar um arquivo keytab com o KDC no cluster do Dataproc e usá-lo para configurar seu serviço Metastore do Dataproc.

      Esse arquivo keytab precisa conter a entrada do principal do serviço criado para um metastore do Hive. O secret do Gerenciador de secrets fornecido precisa ser fixado em uma versão específica do secret. A versão mais recente não é compatível.

    • Um principal que está no KDC e no arquivo keytab.

      Um arquivo keytab válido e o Kerberos válidos são necessários para iniciar o metastore do Hive. O principal existe no KDC e no keytab. O princípio precisa conter três partes: primary/instance@REALM. A instância _HOST não é compatível.

    • Um arquivo krb5.conf em um bucket do Cloud Storage.

      Um arquivo krb5.conf válido contém informações de configuração do Kerberos, como entrada do usuário, como IP do KDC, porta e nome do realm. Especifique o IP do KDC, não o KDC FQDN.

      O metastore do Dataproc leva todo o krb5.conf como um objeto do Cloud Storage. É necessário fornecer o URI do Cloud Storage que especifica o caminho para o arquivo krb5.conf durante a criação do serviço. Um URI típico tem o formato gs://{bucket_name}/path/to/krb5.conf.

    • Para melhores resultados, use os buckets do Cloud Storage localizados na mesma região do serviço Metastore do Dataproc. O metastore do Dataproc não impõe restrições de região, mas os recursos colocalizados e recursos globais têm melhor desempenho. Por exemplo, um bucket global é adequado para qualquer região de serviço, mas um bucket multirregional da UE não funciona bem com um serviço us-central1. O acesso entre regiões resulta em maior latência, falta de isolamento da falha regional e cobranças pela largura de banda da rede entre regiões.

Controle de acesso

  • Para criar um serviço, você precisa receber um papel do IAM que contenha a permissão do IAM metastore.services.create. Os papéis específicos do Metastore do Dataproc roles/metastore.admin e roles/metastore.editor podem ser usados para conceder permissão de criação.

  • Também é possível conceder permissão de criação a usuários ou grupos usando os papéis legados roles/owner e roles/editor.

  • Se você usarVPC Service Controls Em seguida, o secret do Secret Manager e o objeto do krb5.conf do Cloud Storage precisam pertencer a um projeto que resida no mesmo perímetro de serviço que o serviço do metastore do Dataproc.

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

Como ativar o Kerberos para um serviço

As instruções a seguir demonstram como ativar o Kerberos para um serviço metastore do Dataproc integrado ao Dataproc.

  1. Configure um cluster do Dataproc com o Kerberos ativado na mesma rede VPC que será pareada com o serviço Metastore do Dataproc.

    1. Ative Acesso ao projeto ao criar o cluster do Dataproc para permitir o acesso da API a todos os serviços do Google Cloud no mesmo projeto. Para fazer isso, transmita --scopes 'https://www.googleapis.com/auth/cloud-platform' no comando gcloud de criação do cluster do Dataproc.
  2. Incorpore o SSH ao nó mestre do cluster do Dataproc. Faça isso em um navegador ou na linha de comando. Execute os comandos a seguir na instância mestre:

    1. Modifique /etc/hive/conf/hive-site.xml no cluster do Dataproc. Selecione um nome principal, que deve estar no formato primary/instance@REALM. Procure o hive.metastore.keberos.principal preexistente em /etc/hive/conf/hive-site.xml para encontrar o REALM e substituir os segmentos principal e da instância. Um exemplo de nome principal é hive/test@C.MY-PROJECT.INTERNAL.

      Anote o nome principal a ser usado durante a criação do serviço Metastore do Dataproc:

      <property>
        <name>hive.metastore.kerberos.principal</name>
        <!-- Update this value. -->
        <value>PRINCIPAL_NAME</value>
      </property>
      <property>
        <name>hive.metastore.kerberos.keytab.file</name>
        <!-- Update to this value. -->
        <value>/etc/security/keytab/metastore.service.keytab</value>
      </property>
      
    2. Crie a combinação keytab/principal na VM mestre do cluster do Dataproc:

      sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
      sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
      
    3. Faça upload do keytab para o Gerenciador de secrets da VM mestre do cluster do Dataproc. Isso requer a identidade que executa a VM do Dataproc para ter o papel de administrador do gerenciador de secrets para a criação de secrets. Anote a versão do secret criada para uso durante a criação do serviço Metastore do Dataproc.

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

    4. Determine o endereço IP interno principal da instância mestre do cluster do Dataproc (da IU do Compute Engine ougcloud compute instances list ) e preenchê-lo como o do clusterkdc eadmin_server em/etc/krb5.conf para começar.

      Por exemplo (digamos, o endereço IP interno do mestre é 192.0.2.2):

      [realms]
        US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
          kdc = 192.0.2.2
          admin_server = 192.0.2.2
        }
      
    5. Faça upload do arquivo /etc/krb5.conf da VM mestre do Dataproc para o Cloud Storage. Anote o caminho do Cloud Storage a ser usado durante a criação do serviço do metastore do Dataproc.

      gsutil cp /etc/krb5.conf gs://bucket-name/path/to/krb5.conf
      
  3. Forneça a conta de serviço do metastore do Dataproc (essa conta é gerenciada pelo Google e listada na página de IU de permissões do IAM ao selecionar Incluir concessões de papéis fornecidas pelo Google) com permissão para acessar a guia key:

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

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

  5. Verifique se você configurou as regras de firewall de entrada para o KDC. Essas regras de firewall precisam ser configuradas na rede VPC usada para criar o cluster do Dataproc para permitir a entrada do tráfego TCP/UDP.

  6. Criar um novo serviço metastore do Dataproc ou atualizar um atual com o nome principal acima, a versão do secret do Gerenciador de secrets e a nuvem krb5.conf. URI do objeto de armazenamento. Certifique-se de especificar a mesma rede VPC que você usou durante a criação do cluster do Dataproc.

    A operação de criação ou atualização do serviço Metastore do Dataproc testará se um login bem-sucedido ocorre usando o arquivo principal, keytab e krb5.conf. Se o teste falhar, a operação falhará.

  7. Depois que o serviço Metastore do Dataproc terminar de ser criado, anote o URI e o diretório de ponto de extremidade Thrift. O URI do endpoint do Thrift é semelhante a thrift://10.1.2.3:9083, e o diretório do armazenamento de dados é semelhante a gs://gcs-bucket-service-name-deadbeef/hive-warehouse. Execute SSH na instância mestre do cluster do Dataproc novamente e execute o seguinte:

    1. 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>
      
    2. Reinicie o HiveServer2:

      sudo systemctl restart hive-server2.service
      
    3. Modifique /etc/hadoop/conf/container-executor.cfg para adicionar a seguinte linha em cada nó do Dataproc:

       allowed.system.users=hive
      
    4. Receba 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.
      

A seguir