Provedor de credenciais do Secret Manager

Visão geral

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

A API GoogleHadoopSecretManagerCredentialProvider, que se integra ao Secret Manager, é uma implementação da API CredentialProvider do Hadoop, uma solução para proteger credenciais sensíveis contra acesso público.

É possível usar a API do provedor de credenciais do Hadoop das seguintes maneiras:

Terminologia

A tabela a seguir descreve os termos usados neste documento.

Termo Descrição
Secret Um secret é um objeto global do projeto que contém uma coleção de metadados e versões de secret. Com o Secret Manager, é 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 de credencial (senha). Um ID de credencial e um valor são mapeados para um ID e um valor de secret (versão do Secret) no Secret Manager.

Comandos de credenciais do Hadoop

É possível usar o comando hadoop credential para criar, listar e gerenciar secrets. Os comandos hadoop credential usam este formato geral: hadoop credential SUBCOMMAND OPTIONS.

Nos exemplos a seguir, a sinalização -provider é adicionada para especificar o tipo e o local de 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 Hadoop CredentialProvider.

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

  • Listar secrets 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
    

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

Configurar componentes OSS

É possível configurar o Hadoop e outros componentes compatíveis com OSS para trabalhar com o Secret Manager definindo as seguintes propriedades do componente:

  • 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 do provedor de credenciais que é transferido para resolver uma credencial.

    --properties=hadoop.security.credential.provider.path=gsm://projects/project-id
    
    • Uma scheme é usada para indicar o tipo de provedor de credenciais. Os esquemas do Hadoop incluem jceks://, user:// e localjceks://. Use o esquema gsm://, como mostrado no exemplo anterior, para pesquisar a credencial no Secret Manager.
  • Operador de ponto substituto (opcional): o Secret Manager não oferece suporte ao operador de ponto(.) em nomes de secrets, mas as chaves de credencial do componente OSS podem conter esse operador. Quando essa propriedade é definida como true. Você pode substituir ponto(.)s por hífen(-)s 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 para o Secret Manager. Essa propriedade só é necessária para especificar uma credencial usando comandos de credenciais do Hadoop ou quando um componente OSS tenta resolver credenciais. Ela não afeta os comandos de credenciais do Hadoop, como criar, listar ou excluir.

    --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 com o valor mais recente do secret no ambiente de execução. Uma prática recomendada é definir essa propriedade para acesso estável em ambientes de produção.

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

Exemplos de metastore do Hive

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

As seções a seguir fornecem instruções sobre como usar o Secret Manager em diferentes cenários do Metastore do Hive.

Cluster Hive com metastore local

  1. Execute o comando a seguir localmente ou no Cloud Shell para criar um cluster do Dataproc com as propriedades de cluster obrigatórias.

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

  2. Criar um secret. É possível criar um secret usando o Secret Manager ou o comando hadoop credential.

    • Alternativa 1: use o Secret Manager para criar um

      • 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 é compatível com o operador ponto(.), substitua todos os pontos(.) na senha por hífen(-)s.
  3. Verifique se o secret existe.

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

  4. Remova javax.jdo.option.ConnectionPassword do arquivo hive-site.xml. O comando a seguir abre o arquivo para edição em vim.

    sudo vim /etc/hive/conf/hive-site.xml
    

  5. Reinicie o metastore Hive.

    sudo systemctl restart hive-metastore
    

Cluster Hive com metastore externo

  1. Execute o comando a seguir localmente ou no Cloud Shell para criar um cluster do Dataproc com as propriedades de cluster a seguir.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore"
    

  2. Criar um secret. É possível criar um secret usando o Secret Manager ou o comando hadoop credential.

    • 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 é compatível com o operador ponto(.), substitua ponto(.)s na senha por hífen(-)s.
  3. Verifique se o secret existe.

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

  4. 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 e se conectar ao metastore externo.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed...
        --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"
    

Para mais informações