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:
-
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.
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.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable secretmanager.googleapis.com
- 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.
- 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.
- 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.
- Crie um segredo no Secret Manager para cada segredo de texto simples nos seus ficheiros de configuração.
- Substitua cada segredo de texto simples nos ficheiros de configuração por uma referência ao segredo correspondente no Secret Manager.
- plaintext-secret: substitua pelo seu segredo de texto simples.
- SECRET_NAME: substitua por um nome significativo para o seu segredo.
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:
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 simplesplaintext-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:
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 fornecedorgooglesecretmanager
, visite o
repositório opentelemetry-collector-contrib
.