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:
-
Conceder controle total dos recursos do metastore do Dataproc (
roles/metastore.editor
) -
Conceder acesso total a todos os recursos do metastore do Dataproc, incluindo a administração de políticas do IAM (
roles/metastore.admin
)
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.
- No console do Google Cloud, acesse a página Instâncias de VM.
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ó.
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 formatoprimary/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
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"
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.
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
.Abra o arquivo
krb5.conf
.sudo vim /etc/krb5.conf
No arquivo, substitua o parâmetro
KDC
e o parâmetroadmin_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 }
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 arquivokrb5.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
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
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 arquivokrb5.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á.
Vincular o cluster do Dataproc ao Dataproc Metastore
Depois que o serviço Metastore do Dataproc for criado, encontre o URI do endpoint do Thrift e o diretório do armazém.
Conecte-se por SSH à instância principal do cluster do Dataproc.
Na sessão SSH, abra o arquivo
/etc/hive/conf/hive-site.xml
.sudo vim /etc/hive/conf/hive-site.xml
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
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
.
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
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.