Esta página explica como configurar o Kerberos para o serviço Metastore do Dataproc que usa o protocolo de endpoint Thrift. Se o serviço Metastore do Dataproc usa 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 Serviço Gerenciado para Apache Spark 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 Metastore do Dataproc, consulte Sobre o Kerberos.
Crie e hospede seu próprio KDC do Kerberos ou saiba como usar o KDC local de um cluster do Serviço Gerenciado para Apache Spark.
Crie um bucket do Cloud Storage ou acesse um bucket atual. É necessário armazenar o arquivo
krb5.confnesse bucket.
Considerações sobre a rede
Antes de configurar o Kerberos, considere as seguintes configurações de rede:
Configure uma conexão por IP entre a rede VPC e o KDC. É necessário fazer isso para autenticar o 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 do metastore do Dataproc. Para mais informações, consulte Regras de firewall para seus serviços.
Se você usar VPC Service Controls, então o secret do Secret Manager e o objeto
krb5.confdo Cloud Storage precisarão 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 de VPC você quer usar. É necessário configurar o cluster do Serviço Gerenciado para Apache Spark 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 o 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 da política 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
metastore.services.create
permissão,
que é necessária para
criar um metastore do Dataproc com o Kerberos.
Também é possível receber 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 metastore do Dataproc, 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 Metastore do Dataproc anexado a um cluster do Serviço Gerenciado para Apache Spark.
Criar um cluster do Serviço Gerenciado para Apache Spark e ativar o Kerberos
gcloud
Para configurar um cluster do Serviço Gerenciado para Apache Spark com o Kerberos,
execute o seguinte gcloud dataproc clusters create
comando:
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 Serviço Gerenciado para Apache Spark.
Configurar o cluster do Serviço Gerenciado para Apache Spark para o Kerberos
As instruções a seguir mostram como usar o SSH para se conectar a um cluster principal do Serviço Gerenciado para Apache Spark associado ao serviço Metastore do Dataproc.
Depois, modifique o arquivo hive-site.xml e configure o Kerberos para o serviço.
- No Google Cloud console do, 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 Serviço Gerenciado para Apache Spark (
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.xmlVocê 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_PRINCIPAL_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 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. Ele é usado para autenticar um principal de serviço com um KDC do Kerberos.
Para criar um arquivo keytab
Na sessão SSH do Serviço Gerenciado para Apache Spark, 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 Serviço Gerenciado para Apache Spark, 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 Serviço Gerenciado para Apache Spark.
Determine o endereço IP interno principal da instância principal do cluster do Serviço Gerenciado para Apache Spark.
gcloud compute instances listPor exemplo, a execução desse comando produz uma saída semelhante a esta:
~$ 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.confNo arquivo, substitua o parâmetro
KDCe o parâmetroadmin_serverpelo endereço IP interno do cluster do Serviço Gerenciado para Apache Spark.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.confda VM principal do Serviço Gerenciado para Apache Spark para o bucket do Cloud Storage.gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5Substitua:
PATH_TO_KRB5: o URI do Cloud Storage que contém o arquivokrb5.conf.
Quando o upload terminar, copie o caminho dele. É necessário usá-lo ao criar o serviço Metastore do Dataproc.
Conceder papéis e permissões 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 Metastore do Dataproc com o Kerberos
Crie um novo serviço Metastore do Dataproc configurado com os arquivos do Kerberos.
Crie o serviço na rede VPC como o cluster do Serviço Gerenciado para Apache Spark.
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 Metastore do Dataproc.LOCATION: o local do serviço Metastore do Dataproc.VPC_NETWORK: o nome da sua rede VPC. Use a mesma rede configurada no cluster do Serviço Gerenciado para Apache Spark.KERBEROS_PRINCIPAL: o nome do principal do Kerberos criado anteriormente.KRB5_CONFIG: o local do arquivokrb5.conf. 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 à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 Serviço Gerenciado para Apache Spark ao metastore do Dataproc
Depois que o serviço Metastore do Dataproc for criado, encontre o URI do endpoint do Thrift e o diretório do armazenamento.
Faça login SSH na instância principal do cluster do Serviço Gerenciado para Apache Spark.
Na sessão SSH, abra o arquivo
/etc/hive/conf/hive-site.xml.sudo vim /etc/hive/conf/hive-site.xmlModifique
/etc/hive/conf/hive-site.xmlno cluster do Serviço Gerenciado para Apache Spark.<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 Serviço Gerenciado para Apache Spark antes de enviar jobs
Para executar os jobs do Serviço Gerenciado para Apache Spark,
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.cfgdo Hadoop.sudo vim /etc/hadoop/conf/container-executor.cfgAdicione a seguinte linha em cada nó do Serviço Gerenciado para Apache Spark.
allowed.system.users=hive
Receber um tíquete do Kerberos
Consiga 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. sudo hiveSubstitua:
PRINCIPAL_NAME: o nome do principal.