Ao criar um cluster do Dataproc, você pode ativar o modo seguro do Hadoop por meio do Kerberos para fornecer multilocação por meio de autenticação, isolamento e criptografia do usuário em um cluster do Dataproc.
Autenticação de usuário e outros serviços do Google Cloud Platform. A autenticação por usuário via Kerberos só se aplica ao cluster. As interações com outros serviços do Google Cloud, como o Cloud Storage, continuam sendo autenticadas como a conta de serviço do cluster.
Como ativar o modo de segurança do Hadoop com o Kerberos
Ativar o modo de segurança do Kerberos e do Hadoop para um cluster inclui a distribuição MIT do Kerberos e configura o YARN do Apache Hadoop, o HDFS, o Hive, o Spark e os componentes relacionados para usá-lo na autenticação.
A ativação do Kerberos cria, no cluster, um Centro de distribuição de chaves (KDC, na sigla em inglês) que contém principais de serviço e um principal de raiz, que é a conta com permissões de administrador para o KDC no cluster. Ele também pode conter principais de usuário padrão ou ser conectado, por meio de confiança entre domínios, a outro KDC que contenha os princípios do usuário.
Criar um cluster do Kerberos
É possível usar a Google Cloud CLI, a API Dataproc ou o console do Google Cloud para ativar o Kerberos em clusters que usam a versão de imagem 1.3 do Dataproc e posterior.
Comando gcloud
Para configurar automaticamente um novo cluster do Dataproc Kerberos (versão da imagem 1.3 e posterior), use o comando gcloud dataproc clusters create.
gcloud dataproc clusters create cluster-name \ --image-version=2.0 \ --enable-kerberos
Propriedade de cluster: em vez de usar a sinalização
--enable-kerberos
, como mostrado acima, é possível configurar automaticamente o Kerberos passando a
sinalização
--properties "dataproc:kerberos.beta.automatic-config.enable=true"
para o comando "clusters create"
(consulte
propriedades de serviço do Dataproc).
API REST
Os clusters Kerberos podem ser criados por meio do ClusterConfig.SecurityConfig.KerberosConfig como parte de uma solicitação clusters.create. Defina enableKerberos
como true
.
Console
Para configurar automaticamente o Kerberos em um novo cluster, selecione "Ativar" na seção "Modo seguro de segurança do Kerberos e do Hadoop" no painel "Gerenciar segurança" na página Criar um cluster do Dataproc do console do Google Cloud.
Crie um cluster do Kerberos com sua própria senha raiz principal
Siga as etapas abaixo para configurar um cluster do Kerberos que usa sua senha raiz principal
Configurar a senha principal da raiz do Kerberos
O principal raiz do Kerberos é a conta
com permissões de administrador para o KDC no cluster. Para fornecer a senha do principal raiz
do Kerberos com segurança, os usuários podem criptografá-la com uma
chave do Serviço de gerenciamento de chaves (KMS) e
armazená-la em um bucket do Google Cloud Storage que pode
ser acessado pela conta de serviço
do cluster. A conta de serviço do cluster precisa receber o cloudkms.cryptoKeyDecrypter
Papel do IAM.
Conceda o papel Criptografador/Descriptografador do Cloud KMS CryptoKey à conta de serviço do cluster:
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-number-compute@developer.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyDecrypter
Crie um keyring:
gcloud kms keyrings create my-keyring --location global
Crie uma nova chave no keyring:
gcloud kms keys create my-key \ --location global \ --keyring my-keyring \ --purpose encryption
Criptografe sua senha principal raiz do Kerberos:
echo "my-password" | \ gcloud kms encrypt \ --location=global \ --keyring=my-keyring \ --key=my-key \ --plaintext-file=- \ --ciphertext-file=kerberos-root-principal-password.encrypted
- Faça o upload da senha criptografada para um bucket do Cloud Storage no projeto.
- Exemplo:
gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
- Exemplo:
- Faça o upload da senha criptografada para um bucket do Cloud Storage no projeto.
Criar o cluster
Use o comando gcloud
ou a API Dataproc para ativar o Kerberos em clusters com sua própria senha raiz principal.
Comando gcloud
Para criar um cluster kerberos do Dataproc (imagem de versão 1.3 e posterior), use o comando gcloud dataproc clusters create.
gcloud dataproc clusters create cluster-name \ --region=region \ --image-version=2.0 \ --kerberos-root-principal-password-uri=gs://my-bucket/kerberos-root-principal-password.encrypted \ --kerberos-kms-key=projects/project-id/locations/global/keyRings/my-keyring/cryptoKeys/my-key
Use um arquivo de configuração YAML (ou JSON). Em vez de transmitir sinalizações kerberos-*
para o comando gcloud
, como mostrado acima, você pode colocar as configurações do kerberos em um arquivo de configuração YAML (ou JSON) e, em seguida, referenciar o arquivo de configuração para criar o cluster do kerberos.
- Crie um arquivo de configuração (consulte Certificados SSL, Configurações adicionais do Kerberos e Confiança entre domínios para configurações adicionais que podem ser incluídas no arquivo):
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
- Use o seguinte comando
gcloud
para criar o cluster do kerberos:gcloud dataproc clusters create cluster-name \ --region=region \ --kerberos-config-file=local path to config-file \ --image-version=2.0
Considerações sobre segurança. O Dataproc descarta a forma descriptografada da senha após adicionar o principal de raiz ao KDC. Por motivos de segurança, depois de criar o cluster, é possível excluir o arquivo de senha e a chave usada para descriptografar o secret e remover a conta de serviço do papel kmsKeyDecrypter
. Não faça isso se planeja escalonar o cluster, o que exige o arquivo e a chave de senha, e o papel da conta de serviço.
API REST
Os clusters Kerberos podem ser criados por meio do ClusterConfig.SecurityConfig.KerberosConfig como parte de uma solicitação clusters.create. Defina enableKerberos
como verdadeiro e defina os
campos rootPrincipalPasswordUri
e kmsKeyUri
.
Console
Ao criar um cluster com a versão de imagem 1.3 ou mais recente, selecione "Ativar" na seção "Modo seguro do Kerberos e do Hadoop" do painel "Gerenciar segurança" na página Criar um cluster do Dataproc do console do Google Cloud, depois conclua as opções de segurança (discutidas nas seções a seguir).
Login do SO
É possível executar o gerenciamento do KDC no cluster com o comando kadmin
usando o principal do usuário do Kerberos raiz ou o sudo kadmin.local
.
Ative o login do SO para controlar quem pode executar comandos de superusuário.
Certificados SSL
Como parte da ativação do modo seguro do Hadoop, o Dataproc cria um certificado autoassinado para ativar a criptografia SSL do cluster. Outra opção é fornecer um certificado para a criptografia SSL do cluster adicionando as seguintes configurações ao arquivo de configuração ao criar um cluster do kerberos:
ssl:keystore_password_uri
: local no Cloud Storage do arquivo criptografado pelo KMS que contém a senha do arquivo do keystore.ssl:key_password_uri
: local no Cloud Storage do arquivo criptografado pelo KMS que contém a senha da chave no arquivo do keystore.ssl:keystore_uri
: local no Cloud Storage do arquivo do keystore que contém o certificado curinga e a chave privada usada pelos nós do cluster.ssl:truststore_password_uri
: local no Cloud Storage do arquivo criptografado pelo KMS que contém a senha para o arquivo truststore.ssl:truststore_uri
: local no Cloud Storage do arquivo de armazenamento confiável que contém certificados confiáveis.
Exemplo de arquivo de configuração:
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key ssl: key_password_uri: gs://bucket/key_password.encrypted keystore_password_uri: gs://bucket/keystore_password.encrypted keystore_uri: gs://bucket/keystore.jks truststore_password_uri: gs://bucket/truststore_password.encrypted truststore_uri: gs://bucket/truststore.jks
Configurações adicionais do Kerberos
Para especificar um domínio Kerberos, crie um cluster kerberos com a seguinte propriedade adicionada no arquivo de configuração Kerberos:
realm
: o nome do domínio Kerberos no cluster.
Se essa propriedade não estiver definida, o domínio dos nomes do host (em letras maiúsculas) será o domínio.
Para especificar a chave mestra do banco de dados KDC, crie um cluster do kerberos com a seguinte propriedade adicionada no arquivo de configuração do Kerberos:
kdc_db_key_uri
: local no Cloud Storage do arquivo criptografado pelo KMS que contém a chave mestra do banco de dados KDC.
Se essa propriedade não for definida, o Dataproc gerará a chave mestra.
Para especificar o tempo máximo de vida do tíquete de concessão de tíquete (em horas), crie um cluster do kerberos com a seguinte propriedade adicionada no arquivo de configuração do Kerberos:
tgt_lifetime_hours
: duração máxima do tíquete de concessão de tíquete em horas.
Se ela não estiver definida, o Dataproc definirá o tempo de vida do tíquete de concessão de tíquete para 10 horas.
Confiança entre domínios
Inicialmente, o KDC no cluster contém apenas o principal de administração raiz e os principais de serviços. É possível adicionar principais de usuário manualmente ou estabelecer uma relação de confiança entre domínios com um servidor externo do KDC ou do Active Directory que detenha principais de usuário. Recomenda-se que o Cloud VPN ou o Cloud Interconnect se conecte a um KDC/Active Directory local.
Para criar um cluster do kerberos compatível com a confiança entre domínios, adicione as configurações listadas abaixo ao arquivo de configuração do Kerberos ao criar um cluster do kerberos. Criptografe a senha compartilhada com o KMS e armazene-a em um bucket do Cloud Storage para que a conta de serviço do cluster possa acessá-la.
cross_realm_trust:admin_server
: nome do host/endereço do servidor de administração remota.cross_realm_trust:kdc
: nome do host/endereço do KDC remoto.cross_realm_trust:realm
: nome do domínio remoto confiável.cross_realm_trust:shared_password_uri
: local no Cloud Storage da senha compartilhada criptografada pelo KMS.
Exemplo de arquivo de configuração:
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key cross_realm_trust: admin_server: admin.remote.realm kdc: kdc.remote.realm realm: REMOTE.REALM shared_password_uri: gs://bucket/shared_password.encrypted
Para habilitar a confiança entre domínios em um KDC remoto:
Adicione o seguinte no arquivo
/etc/krb5.conf
no KDC remoto:[realms] DATAPROC.REALM = { kdc = MASTER-NAME-OR-ADDRESS admin_server = MASTER-NAME-OR-ADDRESS }
Crie o usuário de confiança:
kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
Digite a senha do usuário quando solicitado. A senha precisa corresponder ao conteúdo do arquivo de senha compartilhada criptografada
Para habilitar a confiança entre domínios com o Active Directory, execute os seguintes comandos em um PowerShell como administrador:
Crie uma definição do KDC no Active Directory.
ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
Crie uma confiança no Active Directory.
A senha precisa corresponder ao conteúdo do arquivo de senha compartilhada criptografada.netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
dataproc
principal
Quando você envia um job pela API jobs do Dataproc
a um cluster kerberos do Dataproc, ele é executado como o principal dataproc
do kerberos do domínio kerberos do cluster.
A multilocação é compatível com um cluster kerberos do Dataproc se você enviar um job diretamente para o cluster, por exemplo, via SSH. No entanto, se o job lê ou grava em outros serviços do Google Cloud, como o Cloud Storage, ele funciona como a conta de serviço do cluster.
Propriedades de cluster padrão e personalizadas
O modo seguro do Hadoop é configurado com propriedades em arquivos de configuração (em inglês). O Dataproc define valores padrão para elas.
É possível substituir as propriedades padrão ao criar o cluster com a sinalizaçãogcloud dataproc clusters create
--properties
ou chamando a API clusters.create e configurando as SoftwareConfig propriedades (consulte os exemplos de propriedades do cluster).
Modo de alta disponibilidade
No modo de alta disponibilidade (HA, na sigla em inglês), um cluster do Kerberos terá três KDCs: um em cada mestre. O KDC em execução no "primeiro" mestre ($CLUSTER_NAME-m-0
) será o KDC mestre e também servirá como o servidor de administração.
O banco de dados do KDC mestre será sincronizado com os dois KDCs de réplica em intervalos de 5 minutos por meio de um cron job, e os três KDCs servirão para o tráfego de leitura.
Se o KDC mestre estiver inativo, o Kerberos não será nativamente compatível com a replicação em tempo real ou com o failover automático. Para executar um failover manual:
- Em todas as máquinas KDC, em
/etc/krb5.conf
, altereadmin_server
para o novo FQDN (nome de domínio totalmente qualificado) do mestre. Remova o antigo mestre da lista do KDC. - No novo KDC mestre, configure um cron job para propagar o banco de dados.
- No novo KDC mestre, reinicie o processo admin_server (
krb5-admin-server
). - Em todas as máquinas KDC, reinicie o processo (
krb5-kdc
).
Configuração de rede
Para garantir que os nós de trabalho possam se comunicar com o servidor de administração do KDC e Kerberos em execução no mestre, verifique se as regras de firewall da VPC permitem o tráfego TCP e UDP de entrada na porta. Tráfego 88 e entrada TCP na porta 749 no(s) mestre(s). No modo de alta disponibilidade, verifique se as regras de firewall VPC permitem o tráfego TCP de entrada na porta 754 nos mestres para permitir a propagação de alterações feitas no KDC mestre. O Kerberos requer que o DNS reverso seja configurado corretamente. Além disso, para a canonização principal do serviço com base em host, verifique se o DNS reverso está configurado corretamente para a rede do cluster.
Para mais informações
Veja a documentação do Kerberos MIT (em inglês).