Usar o provedor de credenciais do Secret Manager

O Secret Manager pode proteger seus dados sensíveis, como chaves de API, senhas e certificados. É possível usá-lo para gerenciar, acessar e auditar seus secrets em Google Cloud.

Você pode configurar um cluster ou job do Dataproc para usar um secret do Secret Manager usando o provedor de credenciais do Secret Manager.

Disponibilidade

Esse recurso está disponível para uso com clusters do Dataproc criados com as versões de imagem 2.0.97+, 2.1.41+, 2.2.6+ ou versões principais mais recentes da imagem do Dataproc.

Terminologia

A tabela a seguir descreve os termos usados neste documento.

Termo Descrição
Secret Um secret do Secret Manager é um objeto global do projeto que contém uma coleção de metadados e versões de secrets. É possível armazenar, gerenciar e acessar secrets como blobs binários ou strings de texto.
Credential No Hadoop e em outros aplicativos hospedados no Dataproc, uma credencial consiste em um nome (ID) e um valor (senha). Um ID e um valor de credencial são mapeados para um Secret Manager ID e um valor de secret do Secret Manager (versão do secret).

Uso

É possível configurar o Hadoop e outros componentes de código aberto para trabalhar com o Secret Manager definindo as propriedades a seguir ao criar um cluster do Dataproc ou enviar um job.

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

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • O scheme no caminho do provedor indica o tipo de provedor de credenciais. Os esquemas do Hadoop incluem jceks://, user://,localjceks://. Use o esquema gsm:// para pesquisar credenciais no Secret Manager.
  • Operador de ponto substituto : o serviço do Secret Manager não permite pontos (.) em nomes de secrets. No entanto, alguns componentes de software de código aberto (OSS) usam pontos nas chaves de credenciais. Para corrigir essa limitação, ative essa propriedade para substituir pontos (.) por hifens (-) em nomes de credenciais. Isso garante que as credenciais de OSS com pontos nos nomes possam ser armazenadas e recuperadas corretamente do Secret Manager.

    Por exemplo, se uma chave de credencial de OSS for a.b.c, modifique-a para a-b-c ao armazená-la no Secret Manager.

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

    Essa é uma propriedade opcional. Por padrão, o valor é false. Para chaves de credenciais que não têm um operador de ponto (.) no nome, essa propriedade pode ser ignorada com segurança.

  • Versão do secret : os secrets no Secret Manager podem ter várias versões (valores). Use essa propriedade para acessar 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
    

    Essa é uma propriedade opcional. Por padrão, o Secret Manager acessa a versão LATEST, que é resolvida para o valor mais recente do secret no ambiente de execução. Se o caso de uso for sempre acessar a versão LATEST de um secret, essa propriedade poderá ser ignorada com segurança.

Criar um cluster do Dataproc com o provedor de credenciais do Secret Manager

  1. Execute o comando a seguir 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...
    

Observações:

Enviar um job do Dataproc com o provedor de credenciais do Secret Manager

  1. Execute o comando a seguir localmente ou no Cloud Shell para enviar um job 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
    

Observações:

Usar o Secret Manager com o Metastore Hive

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

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

Criar um cluster com um metastore local

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

Observações:

  1. Crie um secret usando o Secret Manager ou o hadoop credential comando.

    • Alternativa 1: Use o Secret Manager para criar um secret.

      • Nome do secret: /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 secret.

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

      • METASTORE_PASSWORD: como o Secret Manager não oferece suporte ao operador de ponto(.), substitua todos os pontos(.) na senha por hifens(-).
  2. Verifique se o secret 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 arquivo hive-site.xml e adicione as propriedades hadoop.security.credential.provider.path e hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator ao arquivo.

    Exemplo 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 Metastore Hive.

    sudo systemctl restart hive-metastore
    

Criar um cluster com um Metastore Hive externo

  1. Execute o comando a seguir localmente ou no Cloud Shell para criar um cluster do Dataproc com as seguintes propriedades de cluster. Use esse cluster como um metastore Hive externo para jobs do Hive executados em 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 secret usando o Secret Manager ou o hadoop credential comando.

    • Alternativa 1: Use o Secret Manager para criar um secret.
      • Nome do secret: /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 secret.
      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      
      • METASTORE_PASSWORD: como o Secret Manager não oferece suporte ao operador de ponto(.), substitua os pontos(.) na senha por hifens(-).
  3. Verifique se o secret existe.

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

Criar um cluster para executar jobs do Hive que se conectam a um metastore externo

  1. Execute o comando a seguir localmente ou no Cloud Shell para criar um cluster do Dataproc com as seguintes propriedades de cluster. Use esse cluster para executar jobs do Hive que se conectam ao metastore externo em outro 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

É possível usar SSH para se conectar ao nó mestre do Dataproc e usar o comando hadoop credential para criar, listar e gerenciar secrets.

hadoop credential comandos usam o seguinte formato: hadoop credential SUBCOMMAND OPTIONS. Nos exemplos a seguir, a flag -provider é adicionada para especificar o tipo e o local do provedor (o armazenamento do provedor). O esquema gsm:// especifica o Secret Manager.

  • Crie um secret com o ID especificado. O comando não cria o secret se o ID especificado já existir. Esse comportamento é consistente com a API CredentialProvider do Hadoop.

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

  • Liste os secrets armazenados em um projeto.

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

  • Verifique se um secret existe em um projeto com um valor especificado.

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

  • Verifique se há uma versão específica do secret em um arquivo de configuração.

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

  • Exclua todas as versões de um secret em um projeto.

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

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

A seguir