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.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 secret do Gerenciador de secrets do Google Cloud que contém o conteúdo de um arquivo keytab. Para mais informações sobre como criar um secret do Secret Manager, consulte Como ativar chaves de criptografia gerenciadas pelo cliente (CMEK) para o Secret Manager.
Um arquivo keytab contém pares de principais e chaves criptografadas Kerberos, que podem ser usados para autenticar um principal de serviço com um KDC do Kerberos. É necessário gerar um arquivo keytab com o KDC no cluster do Dataproc e usá-lo para configurar o serviço Metastore do Dataproc.
Esse arquivo keytab precisa conter a entrada do principal do serviço criado para um metastore do Hive. A chave secreta do Secret Manager fornecida precisa ser fixada a uma versão do secret específica. 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 formatogs://{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. Embora o metastore do Dataproc não aplique restrições de região, os recursos colocalizados têm um desempenho melhor. Por exemplo, 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, é preciso solicitar um papel do IAM que contenha a permissão do IAM
metastore.services.create
. Os papéis específicosroles/metastore.admin
eroles/metastore.editor
do metastore do Dataproc incluem permissão de criação.É possível conceder permissão de criação a usuários ou grupos usando os papéis legados
roles/owner
eroles/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.
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.
Configure um cluster do Dataproc com o Kerberos ativado na mesma rede VPC que será pareada com o serviço Metastore do Dataproc.
- 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 comandogcloud
de criação do cluster do Dataproc.
- 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
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 principal:
Modifique
/etc/hive/conf/hive-site.xml
no cluster do Dataproc. Selecione um nome principal (que precisa estar no formatoprimary/instance@REALM
). Procure ohive.metastore.keberos.principal
preexistente em/etc/hive/conf/hive-site.xml
para encontrar oREALM
e substitua o nome primário e segmentos de 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>
Crie a combinação keytab/principal na VM principal 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"
Faça upload do keytab no Gerenciador de secrets da VM principal 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
Determine o endereço IP interno primário da instância principal do cluster do Dataproc (da IU do Compute Engine ou por
gcloud compute instances list
) e preenchê-lo como o domínio do clusterkdc
eadmin_server
em/etc/krb5.conf
.Por exemplo, digamos que o endereço IP interno do principal seja 192.0.2.2:
[realms] US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = { kdc = 192.0.2.2 admin_server = 192.0.2.2 }
Faça upload do arquivo
/etc/krb5.conf
da VM do Dataproc para o Cloud Storage primário. 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
Forneça a conta de serviço do metastore do Dataproc (essa conta é gerenciada pelo Google e listada na página da IU de permissões do IAM, selecionando Incluir concessões de papel fornecidas pelo Google) com permissão para acessar keytab:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
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
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 de tráfego TCP/UDP.
Crie um novo serviço Metastore do Dataproc ou atualize um atual com a versão principal do nome do Secret Manager, o secret Manager e o Cloud Storage krb5.conf. URI do objeto. Certifique-se de especificar a mesma rede VPC que você usou durante a criação do cluster do Dataproc.
A criação do serviço do metastore do Dataproc ou a operação de atualização testará se um login bem-sucedido ocorre usando o arquivo principal, keytab e krb5.conf fornecido. Se o teste falhar, a operação falhará.
Depois que o serviço do metastore do Dataproc for criado, anote o URI do endpoint do Thrift e o diretório do armazenamento. O URI do endpoint do Thrift tem a aparência
thrift://10.1.2.3:9083
, e o diretório do armazenamento de dados é semelhante ags://gcs-bucket-service-name-deadbeef/hive-warehouse
. SSH na instância mestre do cluster do Dataproc novamente e execute o seguinte: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>
Reinicie o HiveServer2:
sudo systemctl restart hive-server2.service
Modifique
/etc/hadoop/conf/container-executor.cfg
para adicionar a seguinte linha a cada nó do Dataproc:allowed.system.users=hive
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.