Provedor de credenciais do Secret Manager

Visão geral

O Secret Manager pode proteger seus dados sensíveis, como chaves de API, senhas e certificados. Use-o para gerenciar, acessar e auditar seus segredos no Google Cloud.

É possível 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 mais recentes versões de 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 de projeto global 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 pelo Dataproc, uma credencial consiste em um nome (ID) e um valor (senha). Um ID e um valor de credencial são mapeados para um ID e um valor de secret do Secret Manager (versão do secret).

Uso

É possível configurar o Hadoop e outros componentes do OSS para trabalhar com o Secret Manager definindo as seguintes propriedades ao criar um cluster do Dataproc ou enviar um job.

  • Caminho do provedor (obrigatório): 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 credencial que é percorrida 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:// e localjceks://. Use o esquema gsm:// para pesquisar credenciais no Secret Manager.
  • Operador de ponto substituto (opcional): o Secret Manager não oferece suporte ao operador de ponto(.) em nomes secretos, mas as chaves de credencial de componentes do OSS podem conter esse operador. Quando essa propriedade é definida como true. Você pode substituir pontos(.) por hífens(-) nos nomes das credenciais. Por exemplo, quando essa propriedade é definida como true, é possível especificar o nome da credencial a.b.c como a-b-c ao transmiti-la ao Secret Manager.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    
  • Versão do secret (opcional): os secrets no Secret Manager podem ter várias versões (valores). Use essa propriedade para acessar uma versão do secret. Por padrão, o Secret Manager acessa a versão LATEST, que é resolvida para o valor mais recente do secret no momento da execução. Uma prática recomendada é definir essa propriedade para acesso estável em ambientes de produção. Para informações sobre como criar um secret, consulte Criar e acessar um secret usando o Secret Manager e Comandos de credenciais do Hadoop.

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

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 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 do Hive

A propriedade Metastore do Hive, javax.jdo.option.ConnectionPassword, contém a senha usada para autenticar o acesso ao banco de dados do metastore. A senha é salva 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 senha no Secret Manager e atualizar o arquivo de configuração hive-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 Hive Metastore.

Criar um cluster com uma 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 comando hadoop credential.

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

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

      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 hifen(-).
  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.

    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 Metastore do 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 propriedades a seguir. Use esse cluster como um metastore externo do Hive 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 comando hadoop credential.

    • Alternativa 1:use o Secret Manager para criar um secret.
      • Nome do segredo: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valor secreto: METASTORE_PASSWORD.
    • Alternativa 2:use o comando hadoop credential para criar uma chave secreta.
      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 hifen(-).
  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 propriedades a seguir. Use esse cluster para executar jobs do Hive que se conectam à metastore externa 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 credencial do Hadoop

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

Os comandos hadoop credential 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 existir. Esse comportamento é consistente com a API CredentialProvider do Hadoop.

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

  • Lista os segredos armazenados em um projeto.

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

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

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

  • Verifique 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.

Para mais informações