Nesta página, explicamos como configurar o Kerberos para seu serviço Metastore do Dataproc que usa o protocolo de endpoint do Thrift. Se o serviço Metastore do Dataproc usar o protocolo de endpoint do gRPC, consulte Configurar o Kerberos para endpoints do gRPC.
Antes de começar
Entenda os princípios básicos do Kerberos.
Nestas instruções, você usará um cluster do Dataproc para criar os seguintes recursos do Kerberos:
- Um arquivo Keytab.
- Um arquivo
krb5.conf
. - Um principal do Kerberos.
Para saber mais sobre como esses recursos do Kerberos funcionam com um serviço do Metastore do Dataproc, 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 atual. 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. Isso precisa ser feito para autenticar o arquivo KDC com o serviço Dataproc Metastore.
Configure todas as regras de firewall necessárias no 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 precisam pertencer a um projeto que reside no mesmo perímetro de serviço que o serviço Metastore do Dataproc.Decida qual rede de peering VPC você quer usar. Configure o cluster do Dataproc e o serviço do Metastore do Dataproc com a mesma rede de peering VPC.
Papéis necessários
Para conseguir a permissão necessária para criar um metastore do Dataproc com o Kerberos, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto, com base no princípio de privilégio mínimo:
-
Conceder controle total dos recursos do metastore do Dataproc (
roles/metastore.editor
) -
Conceda 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 como conceder papéis, consulte Gerenciar acesso.
Esse papel predefinido contém a permissão
metastore.services.create
, que é
necessária para criar um metastore do Dataproc com o Kerberos.
Talvez você também consiga essa permissão com papéis personalizados ou outros papéis predefinidos.
Para saber mais 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 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 o kerberos
As instruções a seguir mostram como usar o 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 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
O resultado será semelhante a este:
<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 valor a seguir/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. É 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 primário 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 ...
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 os parâmetros
KDC
eadmin_server
atuais pelo endereço IP interno do cluster do Dataproc.Por exemplo, 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.gsutil cp /etc/krb5.conf gs://PATH_TO_KRB5
Substitua:
PATH_TO_KRB5
: o URI do Cloud Storage que contém o arquivokrb5.conf
.
Depois que o upload for concluído, copie o caminho dele. É preciso usá-lo ao criar o serviço do Dataproc Metastore.
Conceder papéis e permissões do IAM
Forneça à conta de serviço do Dataproc Metastore permissão para acessar o arquivo keytab. Essa conta é gerenciada pelo Google e aparece na página da UI de permissões do IAM selecionando Incluir concessões de papéis 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 Dataproc Metastore com 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 Metastore do Dataproc com o Kerberos
Crie um novo serviço do Dataproc Metastore configurado com seus arquivos do Kerberos.
Certifique-se de criar 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:
SERVICE
: o nome do serviço do Metastore do Dataproc.LOCATION
: o local do serviço 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 que você criou 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 metastore do Dataproc 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
Após a criação do serviço Metastore do Dataproc, localize o URI do endpoint do Thrift e o diretório do armazenamento.
Conecte-se por SSH à instância principal do seu 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
Configure 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 a cada nó do Dataproc.
allowed.system.users=hive
Comprar um ingresso 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.