Use o fornecedor de credenciais do Secret Manager

O Secret Manager pode salvaguardar os seus dados confidenciais, como chaves da API, palavras-passe e certificados. Pode usá-lo para gerir, aceder e auditar os seus segredos em Google Cloud.

Pode configurar um cluster ou uma tarefa do Dataproc para usar um segredo do Secret Manager através do fornecedor de credenciais do Secret Manager.

Disponibilidade

Esta funcionalidade está disponível para utilização com clusters do Dataproc criados com as versões de imagem 2.0.97+, 2.1.41+, 2.2.6+ ou posteriores versões de imagem do Dataproc.

Terminologia

A tabela seguinte descreve os termos usados neste documento.

Vigência Descrição
Secret Um secret do Secret Manager é um objeto de projeto global que contém uma coleção de metadados e versões do secret. Pode armazenar, gerir e aceder a segredos como blobs binários ou strings de texto.
Credential No Hadoop e noutras aplicações alojadas no Dataproc, uma credencial consiste num nome de credencial (ID) e num valor de credencial (palavra-passe). Um ID da credencial e um valor são mapeados para um ID do secret e um valor secreto (versão do secret) do Secret Manager.

Utilização

Pode configurar o Hadoop e outros componentes de software livre (OSS) para funcionarem com o Secret Manager definindo as seguintes propriedades quando cria um cluster do Dataproc ou envia uma tarefa.

  • Caminho do fornecedor : a propriedade do caminho do fornecedor, hadoop.security.credential.provider.path, é uma lista separada por vírgulas de um ou mais URIs do fornecedor de credenciais que é percorrida para resolver uma credencial.

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • O scheme no caminho do fornecedor indica o tipo de fornecedor de credenciais. Os esquemas do Hadoop incluem jceks://, user:// e localjceks://. Use o esquema gsm:// para pesquisar credenciais no Secret Manager.
  • Substituir operador de ponto : o serviço Secret Manager não permite pontos (.) em nomes de segredos. No entanto, alguns componentes de software de código aberto (OSS) usam pontos nas respetivas chaves de credenciais. Para corrigir esta limitação, ative esta propriedade para substituir pontos (.) por travessões (-) nos nomes das credenciais. Isto garante que as credenciais de OSS com pontos nos respetivos nomes podem ser armazenadas e obtidas corretamente a partir do Secret Manager.

    Por exemplo, se uma chave de credenciais de OSS for a.b.c, tem de a modificar para a-b-c quando a armazenar no Secret Manager.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

    Esta é uma propriedade opcional. Por predefinição, o valor é false. Para chaves de credenciais que não tenham um operador de ponto (.) no respetivo nome de credencial, esta propriedade pode ser ignorada em segurança.

  • Versão do Secret : os Secrets no Secret Manager podem ter várias versões (valores). Use esta propriedade para aceder a uma versão específica do Secret para acesso estável em ambientes de produção.

    --properties=hadoop.security.credstore.google-secret-manager.secret-version=1
    

    Esta é uma propriedade opcional. Por predefinição, o Secret Manager acede à versão LATEST, que é resolvida para o valor mais recente do Secret no tempo de execução. Se o seu exemplo de utilização for aceder sempre à versão LATEST de um segredo, pode ignorar esta propriedade com segurança.

Crie um cluster do Dataproc com o fornecedor de credenciais do Secret Manager

  1. Execute o seguinte comando localmente ou no Cloud Shell para criar um cluster do Dataproc com as propriedades necessárias.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Notas:

Envie um Dataproc com o fornecedor de credenciais do Secret Manager

  1. Execute o seguinte comando localmente ou no Cloud Shell para enviar uma tarefa do Dataproc com as propriedades necessárias.

    gcloud dataproc jobs submit CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed... \
        -- job-args
    

Notas:

Use o Secret Manager com o Hive Metastore

A propriedade do Hive Metastore, javax.jdo.option.ConnectionPassword, contém a palavra-passe usada para autenticar o acesso à base de dados do metastore. A palavra-passe é guardada no formato de texto em hive-site.xml, o que representa um risco de segurança. Uma prática recomendada de produção é armazenar a palavra-passe no Secret Manager e, em seguida, atualizar o ficheiro de configuração hive-site.xml para permitir que o serviço de metastore do Hive leia a palavra-passe do Secret Manager.

Os exemplos seguintes mostram como usar o Secret Manager em diferentes cenários do Hive Metastore.

Crie um cluster com um metastore local

  1. Execute o seguinte comando localmente ou no Cloud Shell para criar um cluster do Dataproc.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

Notas:

  1. Crie um segredo através do Secret Manager ou do comando hadoop credential.

    • Alternativa 1: use o Secret Manager para criar um segredo.

      • Nome do segredo: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valor do Secret: METASTORE_PASSWORD.
    • Alternativa 2: use o comando hadoop credential para criar um segredo.

      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      

      • METASTORE_PASSWORD: uma vez que o Secret Manager não suporta o operador de ponto(.), substitua todos os pontos(.) na palavra-passe por hífens(-).
  2. Verifique se o segredo existe.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
    

  3. Use um editor de texto para remover a propriedade javax.jdo.option.ConnectionPassword do ficheiro hive-site.xml e, em seguida, adicione as propriedades hadoop.security.credential.provider.path e hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator ao ficheiro.

    Exemplos de propriedades:

    hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

  4. Reinicie o Hive Metastore.

    sudo systemctl restart hive-metastore
    

Crie um cluster com um Hive Metastore externo

  1. Execute o seguinte comando localmente ou no Cloud Shell para criar um cluster do Dataproc com as seguintes propriedades do cluster. Use este cluster como um metastore do Hive externo para tarefas do Hive executadas a partir de outros clusters do Dataproc para cargas de trabalho do Spark Hive.

    gcloud dataproc clusters create METASTORE_CLUSTER_NAME \
        --region=REGION \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore" \
        ...other flags as needed...
    
  2. Crie um segredo através do Secret Manager ou do comando hadoop credential.

    • Alternativa 1: use o Secret Manager para criar um segredo.
      • Nome do segredo: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valor do Secret: METASTORE_PASSWORD.
    • Alternativa 2: use o comando hadoop credential para criar um segredo.
      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      
      • METASTORE_PASSWORD: uma vez que o Secret Manager não suporta o operador de ponto(.), substitua os pontos(.) na palavra-passe por hífens(-).
  3. Verifique se o segredo existe.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
      

Crie um cluster para executar tarefas do Hive que se ligam a um metastore externo

  1. Execute o seguinte comando localmente ou no Cloud Shell para criar um cluster do Dataproc com as seguintes propriedades do cluster. Use este cluster para executar tarefas do Hive que se ligam ao metastore externo noutro cluster do Dataproc.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hive:javax.jdo.option.ConnectionURL=jdbc:mysql://METASTORE_CLUSTER_NAME-m/metastore,hive:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hive:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Comandos de credenciais do Hadoop

Pode usar o SSH para se ligar ao nó principal do Dataproc para usar o comando hadoop credential para criar, listar e gerir segredos.

Os comandos hadoop credential usam o seguinte formato: hadoop credential SUBCOMMAND OPTIONS. Nos exemplos seguintes, a flag -provider é adicionada para especificar o tipo de fornecedor e a localização (a loja do fornecedor). O esquema gsm:// especifica o Secret Manager.

  • Crie um Secret com o ID do Secret especificado. O comando não cria o segredo se o ID do segredo especificado existir. Este comportamento é consistente com a API Hadoop CredentialProvider.

    hadoop credential create SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • Apresenta os segredos armazenados num projeto.

    hadoop credential list -provider gsm://projects/PROJECT_ID
    

  • Verifique se existe um segredo num projeto com um valor especificado.

    hadoop credential check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • Verifique se existe uma versão secreta específica num ficheiro de configuração.

    hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    
  • CONFIG_FILE: o ficheiro XML que define hadoop.security.credstore.google-secret-manager.secret-version.

  • Eliminar todas as versões de um segredo num projeto.

    hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
    

Consulte o guia de comandos do Hadoop para mais informações.

O que se segue?