Faça a gestão de segredos na configuração do coletor OpenTelemetry criado pela Google

A configuração de alguns componentes, como recetores ou exportadores, pode exigir que faculte segredos, como palavras-passe. Pode incluir estes segredos como texto simples nos ficheiros de configuração do coletor. No entanto, estes segredos são incluídos nos registos do sistema escritos pelo coletor e transmitidos para o Cloud Logging, expondo os segredos além do nó ou da máquina virtual (VM) onde o coletor está a ser executado.

A partir da versão 0.126.0 do coletor criado pela Google, pode usar um fornecedor OpenTelemetry integrado com o Secret Manager para eliminar segredos de texto simples nos seus ficheiros de configuração.

Um fornecedor é um componente de configuração do OpenTelemetry, análogo aos componentes do recetor e do processador. Cada fornecedor tem um tipo e cada tipo de fornecedor mapeia um identificador específico na configuração para um valor.

O fornecedor googlesecretmanager mapeia os identificadores do Secret Manager para os segredos, como palavras-passe, tokens e chaves da API, que armazenou no Secret Manager. A utilização do fornecedor googlesecretmanager oferece as seguintes vantagens:

  • Segurança melhorada: os seus ficheiros de configuração não contêm informações confidenciais, como palavras-passe. Os segredos reais são armazenados no Secret Manager, um serviço concebido especificamente para armazenar, aceder e gerir dados confidenciais de forma segura.
  • Risco de exposição reduzido: o Secret Manager obtém segredos durante a inicialização do coletor OpenTelemetry criado pela Google, o que impede que segredos de texto simples sejam registados acidentalmente nos registos.

Antes de começar

Para usar o fornecedor googlesecretmanager, tem de ativar a API Secret Manager e permitir o acesso à API, conforme descrito nos passos seguintes:

  1. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

    gcloud init

    Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  2. Defina o projeto predefinido para a CLI gcloud:

    gcloud config set project PROJECT_ID
    

    Antes de executar o comando anterior, substitua a variável PROJECT_ID pelo identificador do seu Google Cloud projeto.

  3. Enable the Secret Manager API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable secretmanager.googleapis.com
  4. Atualize os âmbitos de acesso OAuth da sua instância para incluir o âmbito necessário para o Secret Manager, https://www.googleapis.com/auth/cloud-platform:
    gcloud compute instances set-service-account "INSTANCE_ID" \
      --service-account "SERVICE_ACCT_EMAIL" \
      --scopes "https://www.googleapis.com/auth/cloud-platform"
    

    Antes de executar o comando anterior, substitua as seguintes variáveis:

    • INSTANCE_ID: o identificador da sua VM.
    • SERVICE_ACCT_EMAIL: a morada da conta de serviço associada à VM.

    Para mais informações, consulte o artigo Aceda à API Secret Manager.

  5. Conceda ao utilizador que gere as configurações do coletor OpenTelemetry criado pela Google as autorizações necessárias para criar e gerir segredos. A função de gestão de identidade e de acesso roles/secretManager.secretAdmin inclui as autorizações necessárias:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role=roles/secretManager.secretAdmin
    

    Antes de executar o comando anterior, substitua as seguintes variáveis:

    • PROJECT_ID: o identificador do seu projeto Google Cloud .
    • USER_EMAIL: o endereço do utilizador ao qual está a ser concedida a função.
  6. Conceda à conta de serviço associada à VM as autorizações de que necessita para aceder aos segredos. A função de gestão de identidade e de acesso roles/secretManager.secretAccessor inclui as autorizações necessárias:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCT_EMAIL" \
      --role=roles/secretManager.secretAccessor
    

    Antes de executar o comando anterior, substitua as seguintes variáveis:

    • PROJECT_ID: o identificador do seu projeto Google Cloud .
    • SERVICE_ACCT_EMAIL: a morada da conta de serviço associada à VM.
  7. Substitua segredos de texto simples por segredos geridos

    Para eliminar a utilização de segredos de texto simples nos seus ficheiros de configuração através da utilização do Secret Manager e do fornecedor googlesecretmanager, faça o seguinte:

    1. Crie um segredo no Secret Manager para cada segredo de texto simples nos seus ficheiros de configuração.
    2. Substitua cada segredo de texto simples nos ficheiros de configuração por uma referência ao segredo correspondente no Secret Manager.

    Por exemplo, se estiver a usar um exportador http, o ficheiro de configuração pode incluir uma entrada semelhante à seguinte:

    exporters:
      logging:
        loglevel: debug
      http:
        endpoint: "https://example.com/api/metrics"
        headers:
          X-API-Key: plaintext-secret
    

    Neste exemplo, quer colocar a string no Secret Manager e, em seguida, substituir o segredo de texto simples por uma referência ao segredo gerido.plaintext-secret

    Crie Secrets do Secret Manager para Secrets de texto simples

    Para criar um segredo do Secret Manager que contenha o segredo de texto simples plaintext-secret, execute o seguinte comando:
    echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
        --replication-policy="automatic" \
        --data-file=-
    

    Antes de executar o comando anterior, substitua as seguintes variáveis:

    • plaintext-secret: substitua pelo seu segredo de texto simples.
    • SECRET_NAME: substitua por um nome significativo para o seu segredo.

    O nome de recurso totalmente qualificado do seu novo segredo tem o seguinte formato, com um VERSION de 1:

    projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

    Para mais informações sobre o armazenamento, o controlo de versões e o acesso a segredos no Secret Manager, consulte o artigo Crie um segredo.

    Substitua segredos de texto simples

    Para atualizar os ficheiros de configuração, substitua cada segredo de texto simples por uma referência ao fornecedor googlesecretmanager e ao nome do recurso do segredo gerido, conforme mostrado no exemplo seguinte:

    exporters:
      logging:
        loglevel: debug
      http:
        endpoint: "https://example.com/api/metrics"
        headers:
          X-API-Key: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}
    

    Saiba mais

    Para mais informações sobre a utilização do fornecedor googlesecretmanager, visite o repositório opentelemetry-collector-contrib.