Nesta página, explicamos como configurar o Kerberos para seu serviço do metastore do Dataproc que usa o protocolo de endpoint Thrift. Se o serviço do metastore do Dataproc 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 da metastore do Dataproc, consulte Sobre o Kerberos.
Crie e hospede sua própria KDC do Kerberos ou saiba como usar a KDC local de um cluster do Dataproc.
Crie ou acesse um bucket do Cloud Storage. 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 sua rede VPC e o KDC. Isso é necessário para autenticar o arquivo KDC com o serviço Metastore do Dataproc.
Configure as regras de firewall necessárias no seu 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ê estiver usando o VPC Service Controls, 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 do metastore do Dataproc.Decida qual rede de peering 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 um 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 um 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 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 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 o Kerberos
As instruções a seguir mostram como usar SSH para se conectar a um cluster principal do Dataproc associado ao serviço metastore do Dataproc.
Depois, modifique o arquivo hive-site.xml
e configure o Kerberos para seu serviço.
- No console 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 do navegador é aberta no diretório inicial 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 seguinte 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 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. 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 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"
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, executar este 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 ...
Neste 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 os parâmetros
KDC
eadmin_server
pelo endereço IP interno do cluster do Dataproc.Por exemplo, usar o 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 o serviço Metastore do Dataproc.
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 usuário de permissões do IAM. Para isso, selecione 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 Kerberos
Crie um serviço do Dataproc Metastore configurado com seus arquivos do Kerberos.
Crie o serviço na mesma rede VPC do 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 seu serviço metastore do Dataproc.LOCATION
: o local do seu serviço metastore do Dataproc.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 você criou anteriormente.KRB5_CONFIG
: o local do arquivokrb5.config
. Use o URI do objeto do Cloud Storage que aponta para seu 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
com suas 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 vai falhar.
Vincular o cluster do Dataproc ao metastore do Dataproc
Depois que o serviço Metastore do Dataproc for criado, encontre o URI do endpoint Thrift e o diretório do armazenamento.
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 seus 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 seguinte linha a 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 principal.