Configuração de segurança do Dataproc

Quando cria um cluster do Dataproc, pode ativar o modo seguro do Hadoop através do Kerberos para fornecer multi-tenancy através da autenticação, isolamento e encriptação do utilizador num cluster do Dataproc.

Autenticação de utilizadores e outros serviços da Google Cloud Platform. A autenticação por utilizador através do Kerberos aplica-se apenas no cluster. As interações com outros serviços Google Cloud , como o Cloud Storage, continuam a ser autenticadas como a conta de serviço do cluster.

Ative o modo seguro do Hadoop através do Kerberos

A ativação do Kerberos e do modo seguro do Hadoop para um cluster inclui a distribuição MIT do Kerberos e configura o Apache Hadoop YARN, HDFS, Hive, Spark e os componentes relacionados para o usar na autenticação.

A ativação do Kerberos cria um centro de distribuição de chaves (KDC) no cluster que contém principais de serviço e um principal raiz. O principal raiz é a conta com autorizações de administrador para o KDC no cluster. Também pode conter principais utilizadores padrão ou estar ligado através de confiança entre domínios a outro KDC que contenha os principais utilizadores.

Crie um cluster Kerberos

Pode usar a Google Cloud CLI, a API Dataproc ou a Google Cloud consola para ativar o Kerberos em clusters que usam a versão 1.3 da imagem do Dataproc e posterior.

comando gcloud

Para configurar automaticamente um novo cluster 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 do cluster: em vez de usar a flag --enable-kerberos , conforme mostrado no exemplo anterior, pode configurar automaticamente o Kerberos transmitindo a flag --properties "dataproc:kerberos.beta.automatic-config.enable=true" ao comando de criação de clusters (consulte as propriedades do serviço Dataproc).

API REST

É possível criar clusters Kerberos através de ClusterConfig.SecurityConfig.KerberosConfig como parte de um pedido clusters.create. Tem de definir enableKerberos como true.

Consola

Pode configurar automaticamente o Kerberos num novo cluster selecionando "Ativar" na secção Kerberos e modo seguro do Hadoop do painel Gerir segurança na página Criar um cluster do Google Cloud console.

Crie um cluster Kerberos com a sua própria palavra-passe principal de raiz

Configure a palavra-passe do principal raiz do Kerberos e, em seguida, crie um cluster.

Configure a palavra-passe principal de raiz do Kerberos

O principal raiz do Kerberos é a conta com autorizações de administrador para o KDC no cluster. Para fornecer em segurança a palavra-passe do principal raiz do Kerberos, os utilizadores podem encriptá-la com uma chave do Key Management Service (KMS) e, em seguida, armazená-la num contentor do Google Cloud Storage ao qual a conta de serviço do cluster pode aceder. A conta de serviço do cluster tem de receber a cloudkms.cryptoKeyDecrypter função do IAM.

  1. Conceda a função de encriptar/desencriptar do CryptoKey do Cloud KMS à 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
    

  2. Crie um conjunto de chaves:

    gcloud kms keyrings create my-keyring --location global
    

  3. Crie uma chave no conjunto de chaves:

    gcloud kms keys create my-key \
        --location global \
        --keyring my-keyring \
        --purpose encryption
    

  4. Encripte a palavra-passe principal de 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
    

    1. Carregue a palavra-passe encriptada para um contentor do Cloud Storage no seu projeto.
      1. Exemplo:
        gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
        

Crie o cluster

Pode usar o comando gcloud ou a API Dataproc para ativar o Kerberos em clusters com a sua própria palavra-passe principal de raiz.

comando gcloud

Para criar um 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 \
    --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 ficheiro de configuração YAML (ou JSON). Em vez de transmitir kerberos-*flags para o comando gcloud, conforme mostrado acima, pode colocar as definições do Kerberos num ficheiro de configuração YAML (ou JSON) e, em seguida, referenciar o ficheiro de configuração para criar o cluster do Kerberos.

  1. Crie um ficheiro de configuração (consulte Certificados SSL, Definições adicionais do Kerberos e Relação de confiança entre domínios para ver definições de configuração adicionais que podem ser incluídas no ficheiro):
    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
  2. Use o seguinte comando gcloud para criar o cluster Kerberos:
    gcloud dataproc clusters create cluster-name \
        --region=region \
        --kerberos-config-file=local path to config-file \
        --image-version=2.0
    

Considerações de segurança. O Dataproc rejeita a forma descifrada da palavra-passe depois de adicionar o principal raiz ao KDC. Por motivos de segurança, depois de criar o cluster, pode decidir eliminar o ficheiro de palavra-passe e a chave usada para desencriptar o segredo, e remover a conta de serviço da função kmsKeyDecrypter. Não o faça se planear aumentar a escala do cluster, o que requer o ficheiro de palavra-passe e a chave, bem como a função de conta de serviço.

API REST

É possível criar clusters Kerberos através de ClusterConfig.SecurityConfig.KerberosConfig como parte de um pedido clusters.create. Defina enableKerberos como verdadeiro e defina os campos rootPrincipalPasswordUri e kmsKeyUri.

Consola

Quando criar um cluster com a versão 1.3 ou superior da imagem, selecione "Ativar" na secção Kerberos e modo seguro do Hadoop do painel Gerir segurança na página Criar um cluster da Google Cloud consola, e, em seguida, conclua as opções de segurança (abordadas nas secções seguintes).

Início de sessão do SO

A gestão do KDC no cluster pode ser realizada com o comando kadmin usando o principal do utilizador root do Kerberos ou usando sudo kadmin.local. Ative o início de sessão no SO para controlar quem pode executar comandos de superutilizador.

Certificados SSL

Como parte da ativação do modo seguro do Hadoop, o Dataproc cria um certificado autoassinado para ativar a encriptação SSL do cluster. Em alternativa, pode fornecer um certificado para a encriptação SSL do cluster adicionando as seguintes definições ao ficheiro de configuração quando criar um cluster Kerberos:

  • ssl:keystore_password_uri: localização no Cloud Storage do ficheiro encriptado com o KMS que contém a palavra-passe do ficheiro do keystore.
  • ssl:key_password_uri: localização no Cloud Storage do ficheiro encriptado com o KMS que contém a palavra-passe para a chave no ficheiro do keystore.
  • ssl:keystore_uri: localização no Cloud Storage do ficheiro de keystore que contém o certificado wildcard e a chave privada usados pelos nós do cluster.
  • ssl:truststore_password_uri: localização no Cloud Storage do ficheiro encriptado com o KMS que contém a palavra-passe do ficheiro truststore.
  • ssl:truststore_uri: Localização no Cloud Storage do ficheiro de repositório de confiança que contém certificados fidedignos.

Exemplo de ficheiro 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

Definições adicionais do Kerberos

Para especificar um domínio Kerberos, crie um cluster Kerberos com a seguinte propriedade adicionada no ficheiro de configuração do Kerberos:

  • realm: O nome do domínio Kerberos no cluster.

Se esta propriedade não estiver definida, o domínio dos nomes de anfitrião (em maiúsculas) é o domínio de autenticação.

Para especificar a chave principal da base de dados KDC, crie um cluster Kerberos com a seguinte propriedade adicionada no ficheiro de configuração do Kerberos:

  • kdc_db_key_uri: localização no Cloud Storage do ficheiro encriptado com o KMS que contém a chave principal da base de dados do KDC.

Se esta propriedade não estiver definida, o Dataproc gera a chave principal.

Para especificar a duração total máxima do pedido do pedido (em horas), crie um cluster Kerberos com a seguinte propriedade adicionada no ficheiro de configuração do Kerberos:

  • tgt_lifetime_hours: tempo de vida máximo do pedido para obter pedidos em horas.

Se esta propriedade não estiver definida, o Dataproc define a duração do ticket de concessão de tickets como 10 horas.

Confiança entre domínios

Inicialmente, o KDC no cluster contém apenas o principal do administrador raiz e os principais de serviço. Pode adicionar os principais de utilizador manualmente ou estabelecer uma relação de confiança entre domínios com um KDC externo ou um servidor do Active Directory que contenha os principais de utilizador. Recomendamos o Cloud VPN ou o Cloud Interconnect para se ligar a um KDC/Active Directory nas instalações.

Para criar um cluster Kerberos que suporte a confiança entre domínios, adicione as seguintes definições ao ficheiro de configuração do Kerberos quando criar um cluster Kerberos. Encriptar a palavra-passe partilhada com o KMS e armazená-la num contentor do Cloud Storage ao qual a conta de serviço do cluster pode aceder.

  • cross_realm_trust:admin_server: nome de anfitrião ou endereço do servidor de administração remoto
  • cross_realm_trust:kdc: nome do anfitrião ou endereço do KDC remoto
  • cross_realm_trust:realm: nome do domínio remoto a ser fidedigno
  • cross_realm_trust:shared_password_uri: localização no Cloud Storage da palavra-passe partilhada encriptada com o KMS

Exemplo de ficheiro 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 ativar a confiança entre domínios num KDC remoto, siga estes passos:

  1. Adicione o seguinte ao ficheiro /etc/krb5.conf no KDC remoto:

    [realms]
    DATAPROC.REALM = {
      kdc = MASTER-NAME-OR-ADDRESS
      admin_server = MASTER-NAME-OR-ADDRESS
    }

  2. Crie o utilizador de confiança:

    kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
    

  3. Quando lhe for pedido, introduza a palavra-passe do utilizador. A palavra-passe deve corresponder ao conteúdo do ficheiro de palavra-passe partilhada encriptado

Para ativar a confiança entre domínios com o Active Directory, execute os seguintes comandos num PowerShell como administrador:

  1. Crie uma definição de KDC no Active Directory.

    ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
    

  2. Crie confiança no Active Directory.

    netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
    
    A palavra-passe deve corresponder ao conteúdo do ficheiro de palavra-passe partilhada encriptado.

dataproc principal

Quando envia uma tarefa através da API jobs do Dataproc para um cluster Kerberos do Dataproc, esta é executada como o principal do Kerberos do domínio do Kerberos do cluster.dataproc

A multi-posse é suportada num cluster Kerberos do Dataproc se enviar uma tarefa diretamente, para o cluster, por exemplo, através de SSH. No entanto, se a tarefa ler ou escrever noutros Google Cloud serviços, como o Cloud Storage, a tarefa atua como a conta de serviço do cluster.

Propriedades de cluster predefinidas e personalizadas

O modo seguro do Hadoop está configurado com propriedades nos ficheiros de configuração. O Dataproc define valores predefinidos para estas propriedades.

Pode substituir as propriedades predefinidas quando cria o cluster com a flag gcloud dataproc clusters create --properties ou chamando a API clusters.create e definindo as propriedades SoftwareConfig (consulte os exemplos de propriedades de clusters).

Modo de alta disponibilidade

No modo de alta disponibilidade (HA), um cluster Kerberos tem 3 KDCs: um em cada mestre. O KDC em execução no mestre "primeiro" ($CLUSTER_NAME-m-0) vai ser o KDC mestre e também vai funcionar como o servidor de administração. A base de dados do KDC principal é sincronizada com os dois KDCs de réplica a intervalos de 5 minutos através de uma tarefa cron, e os 3 KDCs servem tráfego de leitura.

O Kerberos não suporta nativamente a replicação em tempo real nem a comutação por falha automática se o KDC principal estiver inativo. Para fazer uma comutação por falha manual:

  1. Em todas as máquinas KDC, em /etc/krb5.conf, altere admin_server para o FQDN (nome do domínio totalmente qualificado) do novo mestre. Remova o mestre antigo da lista de KDCs.
  2. No novo KDC principal, configure uma tarefa cron para propagar a base de dados.
  3. No novo KDC principal, reinicie o processo admin_server (krb5-admin-server).
  4. Em todas as máquinas KDC, reinicie o processo KDC (krb5-kdc).

Configuração da rede

Para se certificar de que os nós de trabalho podem comunicar com o KDC e o servidor de administração do Kerberos em execução no mestre, verifique se as regras de firewall da VPC permitem o tráfego de entrada TCP e UDP na porta 88 e o tráfego TCP de entrada na porta 749 no mestre. No modo de alta disponibilidade, certifique-se de que as regras de firewall de VPC permitem a entrada de tráfego TCP na porta 754 nos mestres para permitir a propagação das alterações feitas ao KDC principal. O Kerberos requer que o DNS inverso esteja configurado corretamente. Além disso, para a canonicalização do principal de serviço baseada no anfitrião, certifique-se de que o DNS inverso está configurado corretamente para a rede do cluster.

O que se segue?