View a markdown version of this page

Configurar autenticação do token do portador para Metrics - Amazon CloudWatch

Configurar autenticação do token do portador para Metrics

nota

Esta página aborda a autenticação do token do portador para o endpoint OTLP do CloudWatch Metrics. Para a autenticação do token do portador do CloudWatch Logs, consulte Como configurar a autenticação do token do portador para Logs no Guia do usuário do CloudWatch Logs.

Antes de enviar métricas usando a autenticação de token do portador com o endpoint OTLP do CloudWatch, você precisa:

  • Criar um usuário do IAM com as permissões do CloudWatch Metrics

  • Gerar credenciais específicas do serviço (chave de API)

Importante

Recomendamos usar a autenticação SigV4 com credenciais de curto prazo para todas as workloads, sempre que possível. O SigV4 fornece a postura de segurança mais forte. Restrinja o uso de chaves de API (tokens de portador) a cenários em que a autenticação de curto prazo baseada em credenciais não seja viável, como enviar métricas fora de ambientes da AWS, fornecedores terceirizados ou plataformas que não oferecem suporte ao SDK da AWS. Quando estiver pronto para incorporar o CloudWatch Metrics em aplicações com maiores requisitos de segurança, você deve mudar para credenciais de curto prazo. Para ter mais informações, consulte Alternativas para chaves de acesso de longo prazo no Guia do usuário do IAM.

Importante

O endpoint OTLP do CloudWatch requer TLS (HTTPS). As solicitações de token do portador enviadas por HTTP simples são rejeitadas. Sempre utilize https://monitoring.AWS Region.amazonaws.com/v1/metrics quando for configurar o seu cliente.

Opção 1: início rápido usando o console da AWS

O AWS Management Console disponibiliza um fluxo de trabalho simplificado para gerar chaves de API para acesso ao endpoint OTLP.

Para configurar o acesso ao endpoint OTLP usando o console
  1. Faça login no Console de Gerenciamento AWS.

  2. Navegue até CloudWatch > Configurações > Global.

  3. Na seção Chaves de API, escolha Gerar chave de API.

  4. Em Validade da chave de API, faça uma das seguintes opções:

    • Selecione a duração da validade da chave de API de 1, 5, 30, 90 ou 365 dias.

    • Escolha Duração personalizada para especificar uma data de validade personalizada para a chave de API.

    • Selecione Nunca expira (não recomendado).

  5. Escolha Gerar chave de API.

O console automaticamente:

  • Cria um novo usuário do IAM com as permissões apropriadas

  • Anexa a política gerenciada do CloudWatchAPIKeyAccess (inclui permissões cloudwatch:PutMetricData e cloudwatch:CallWithBearerToken)

  • Gera credenciais específicas do serviço (chave da API)

Para salvar e verificar sua chave de API
  1. Copie e salve com segurança as credenciais exibidas:

    • ID da chave de API (ID de credencial específica do serviço)

    • Segredo da chave da API (token do portador)

    O console também oferece a opção de armazenar sua chave de API diretamente no AWS Secrets Manager durante a geração. Se você optar por armazenar no Secrets Manager, a chave será atualizada automaticamente na redefinição e excluída na exclusão da chave.

    Importante

    Salve o segredo da chave de API imediatamente. Não é possível recuperá-lo posteriormente. Se perdê-lo, será necessário gerar uma nova chave de API.

  2. Envie uma métrica de teste para verificar sua configuração:

    curl -X POST "https://monitoring.us-east-1.amazonaws.com/v1/metrics" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{"resourceMetrics":[]}'

Opção 2: configuração manual

Se você preferir ter mais controle sobre a configuração do IAM ou precisar personalizar as permissões, você pode configurar o acesso ao endpoint OTLP manualmente.

Etapa 1: criar um usuário do IAM

Crie um usuário do IAM para ingestão de métricas:

Para criar um usuário do IAM para ingestão de métricas
  1. Faça login no Console de Gerenciamento da AWS e navegue para o IAM.

  2. No painel de navegação à esquerda, escolha Usuários.

  3. Selecione Criar usuário.

  4. Insira um nome de usuário (por exemplo, cloudwatch-metrics-api-key-user).

  5. Escolha Próximo.

  6. Anexe uma das seguintes políticas do IAM:

    Opção A: usar a política gerenciada (recomendada)

    Anexe a política gerenciada do CloudWatchAPIKeyAccess.

    Opção B: criar uma política personalizada

    Crie e anexe a seguinte política do IAM:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchMetricsAPIs", "Effect": "Allow", "Action": [ "cloudwatch:CallWithBearerToken", "cloudwatch:PutMetricData" ], "Resource": "*" }, { "Sid": "KMSDecryptForCMKDatasets", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Condition": { "StringLike": { "kms:ViaService": "cloudwatch.*.amazonaws.com", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:*:*:dataset/*" } }, "Resource": "arn:aws:kms:*:*:key/*" } ] }
  7. Escolha Próximo e, em seguida, Criar usuário.

nota

As permissões do KMS são necessárias se você planeja enviar métricas para conjuntos de dados que usam chaves KMS gerenciadas pelo cliente (CMK). As condições restringem o acesso ao KMS somente às chaves usadas por meio do serviço CloudWatch para recursos do conjunto de dados.

Etapa 2: gerar credenciais específicas do serviço (chave de API)

Gere a chave da API CloudWatch Metrics usando a API CreateServiceSpecificCredential. Também é possível utilizar o comando da AWS CLI create-service-specific-credential. Para o prazo de validade da credencial, você pode especificar um valor entre 1 e 36.600 dias. Se você não especificar o prazo de validade de uma credencial, a chave da API não expirará.

Para gerar uma chave de API com validade de 30 dias:

aws iam create-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com \ --credential-age-days 30

A resposta é um objeto ServiceSpecificCredential. O valor ServiceCredentialSecret é sua chave de API do CloudWatch Metrics (token do portador).

Importante

Armazene o valor ServiceCredentialSecret com segurança. Não é possível recuperá-lo posteriormente. Se perdê-lo, será necessário gerar uma nova chave de API.

Etapa 3: enviar métricas

Você pode enviar métricas imediatamente para o endpoint OTLP usando seu token do portador:

curl -X POST "https://monitoring.us-east-1.amazonaws.com/v1/metrics" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{"resourceMetrics":[]}'

O endpoint aceita ambos os tipos de conteúdo application/json e application/x-protobuf.

Controlar as permissões para gerar e usar as chaves de API do CloudWatch Metrics

Controlar a geração de chaves de API do CloudWatch Metrics

A ação iam:CreateServiceSpecificCredential controla a geração de uma chave específica do serviço (como uma chave de API do CloudWatch Metrics). Você pode definir o escopo dessa ação para usuários do IAM como um recurso para limitar os usuários para os quais uma chave pode ser gerada.

É possível usar as seguintes chaves de condição para impor condições à permissão para a ação iam:CreateServiceSpecificCredential:

Como controlar o uso de chaves de API do CloudWatch Metrics

A ação cloudwatch:CallWithBearerToken controla o uso de uma chave de API do CloudWatch Metrics. Para evitar que uma identidade use as chaves de API do CloudWatch Metrics, anexe uma política que negue a ação cloudwatch:CallWithBearerToken ao usuário do IAM associado à chave.

nota

Os tokens de portador do CloudWatch Metrics só podem ser usados com o endpoint de ingestão de métricas OTLP (https://monitoring.AWS Region.amazonaws.com/v1/metrics). Eles não podem ser utilizados para chamar nenhuma outra API ou endpoint do CloudWatch. Isso inclui as APIs de consulta (GetMetricData, ListMetrics, DescribeAlarms), o endpoint de consulta ProMQL, o endpoint de rastreamentos do OTLP e o endpoint de logs do OTLP.

Exemplo de política

Evite que uma identidade gere e use as chaves de API do CloudWatch Metrics:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCWMetricsAPIKeys", "Effect": "Deny", "Action": [ "iam:CreateServiceSpecificCredential", "cloudwatch:CallWithBearerToken" ], "Resource": "*" } ] }
Atenção

Essa política impede a criação de credenciais para todos os serviços da AWS que permitam a criação de credenciais específicas do serviço. Para mais informações, consulte Credenciais específicas do serviço para usuários do IAM no Guia do usuário do IAM.

Evite que uma identidade use as chaves de API do CloudWatch Metrics:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "cloudwatch:CallWithBearerToken", "Resource": "*" } ] }

Permita a criação de chaves do CloudWatch Metrics somente se elas expirarem dentro de 90 dias:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceSpecificCredential", "Resource": "arn:aws:iam::123456789012:user/username", "Condition": { "StringEquals": { "iam:ServiceSpecificCredentialServiceName": "cloudwatch.amazonaws.com" }, "NumericLessThanEquals": { "iam:ServiceSpecificCredentialAgeDays": "90" } } } ] }

Como usar tokens de portador com o OpenTelemetry Collector

Ao usar tokens de portador, você não precisa da extensão sigv4auth. Use a extensão bearertokenauth para fornecer com segurança sua chave de API a partir de um arquivo ou variável de ambiente:

extensions: bearertokenauth: filename: "/etc/otel/cw-api-key" exporters: otlphttp: tls: insecure: false endpoint: https://monitoring.us-east-1.amazonaws.com/v1/metrics auth: authenticator: bearertokenauth receivers: otlp: protocols: http: endpoint: 0.0.0.0:4318 processors: batch: send_batch_size: 200 timeout: 10s service: extensions: [bearertokenauth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]

Como alternativa, você pode referenciar uma variável de ambiente em vez de um arquivo:

extensions: bearertokenauth: token: "${env:CW_API_KEY}"
Importante

Nunca codifique chaves de API diretamente nos arquivos de configuração do coletor. Os arquivos de configuração geralmente são comprometidos com o controle de versão ou armazenados em manifestos de implantação. Utilize filename para ler a partir de um segredo montado ou ${env:VAR} para ler a partir de uma variável de ambiente injetada pelo seu gerenciador de segredos.

nota

Com a autenticação do token do portador, você não precisa da extensão sigv4auth, dos arquivos de credenciais da AWS, dos perfis do IAM ou da configuração do IRSA. Isso torna a configuração do coletor portátil em qualquer ambiente: na AWS, on-premises ou outros provedores de nuvem.

Rotação de chaves de API

Rotacionar as chaves de API regularmente reduz o risco de acesso não autorizado. Recomendamos estabelecer um cronograma de rotação que se alinhe às políticas de segurança da sua organização.

Processo de rotação

Para rotacionar uma chave de API sem interromper a entrega da métrica, siga este procedimento:

Para rotacionar uma chave de API
  1. Crie uma nova credencial (secundária) para o usuário do IAM:

    aws iam create-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com \ --credential-age-days 90
    nota

    O IAM permite no máximo 2 credenciais específicas do serviço por usuário do IAM por serviço. Exclua ou desative as credenciais antigas antes de criar novas, caso tenha atingido esse limite.

  2. (Opcional) Armazene a nova credencial no AWS Secrets Manager para recuperação segura e rotação automatizada.

  3. Atualize a configuração ou a aplicação do OpenTelemetry Collector para usar a nova chave de API.

  4. Defina a credencial original como inativa:

    aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  5. Verifique se a entrega da métrica não foi afetada. Envie uma solicitação de teste usando a nova chave e confirme que você recebeu uma resposta HTTP 200. Você também pode monitorar as métricas existentes do CloudWatch da sua aplicação para confirmar que os dados continuam chegando.

  6. Depois de confirmar a entrega bem-sucedida com a nova chave, exclua a credencial anterior:

    aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234

Monitoramento da validade das chaves

Para verificar a data de criação e o status de suas chaves de API existentes, use o comando list-service-specific-credentials:

aws iam list-service-specific-credentials \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com

A resposta inclui a CreateDate e o Status de cada credencial. Use essas informações para identificar chaves que estão prestes a expirar ou que estão ativas há mais tempo do que sua política de rotação permite.

Como responder a uma chave de API comprometida

Se você suspeitar que uma chave de API foi comprometida, execute as seguintes etapas imediatamente:

Para responder a uma chave de API comprometida
  1. Desative a chave imediatamente para evitar mais uso não autorizado:

    aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  2. Analise os logs do CloudTrail para determinar o escopo do acesso não autorizado. Consulte Como registrar em log o uso da chave de API com o CloudTrail sobre como habilitar a auditoria do uso da chave de API.

  3. Crie uma chave de substituição seguindo o processo de rotação descrito em Processo de rotação.

  4. Exclua a chave comprometida depois que a substituição estiver em vigor:

    aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234
  5. Anexe uma política de negação se precisar bloquear imediatamente todo o acesso ao token de portador do usuário do IAM durante a investigação:

    { "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "cloudwatch:CallWithBearerToken", "Resource": "*" } }
nota

Para realizar essas ações por meio da API, você deve se autenticar com credenciais da AWS e não com uma chave de API do CloudWatch Metrics. Os tokens de portador só podem ser utilizados para ingestão de métricas, e não podem ser utilizados para operações de gerenciamento do IAM.

Também é possível utilizar as seguintes operações de API do IAM para gerenciar as chaves comprometidas:

Práticas recomendadas de segurança para chaves de API

Siga estas práticas recomendadas para proteger as chaves de API do CloudWatch Metrics:

  • Nunca incorpore chaves de API no código-fonte. Não codifique chaves de API no código da aplicação, nos arquivos de configuração do coletor ou nos sistemas de controle de versão. Use a extensão bearertokenauth com filename ou ${env:VAR} para injetar segredos no runtime.

  • Use um gerenciador de segredos. Armazene as chaves de API no AWS Secrets Manager ou em uma solução equivalente de gerenciamento de segredos. Isso permite controle de acesso centralizado, registro de auditoria em log e rotação automatizada.

  • Defina uma validade para todas as chaves. Sempre especifique um valor --credential-age-days ao criar chaves de API. Para garantir uma vida útil máxima da chave em sua organização, utilize a chave de condição iam:ServiceSpecificCredentialAgeDays do IAM.

  • Aplique as permissões de privilégio mínimo. Use a política gerenciada do CloudWatchAPIKeyAccess como ponto de partida e restrinja ainda mais conforme necessário.

  • Habilite o registro em log do CloudTrail. Audite o uso da chave da API ativando eventos de dados do CloudTrail para AWS::CloudWatch::Metric. Consulte Como registrar em log o uso da chave de API com o CloudTrail.

  • Monitore com o IAM Access Analyzer. Use o IAM Access Analyzer para identificar credenciais não utilizadas e políticas excessivamente permissivas associadas aos usuários da chave de API do IAM.

  • Rotacione as chaves regularmente. Estabeleça um cronograma de rotação e siga o processo descrito em Rotação de chaves de API.

Como registrar em log o uso da chave de API com o CloudTrail

Você pode usar o AWS CloudTrail para registrar em log os eventos de dados para ingestão de OTLP do CloudWatch Metrics. O CloudWatch emite eventos de dados AWS::CloudWatch::Metric para chamadas para o endpoint OTLP, permitindo que você audite a atividade de ingestão de métricas, incluindo o uso da chave de API.

nota

O bucket do S3 definido por você para a trilha deve ter uma política de bucket que permita ao CloudTrail gravar arquivos de log nele. Para mais informações, consulte Política de bucket do Amazon S3 para CloudTrail no Guia do usuário do AWS CloudTrail.

Para habilitar o registro em log do CloudTrail para o uso da chave da API CloudWatch Metrics
  1. Criar uma trilha:

    aws cloudtrail create-trail \ --name cloudwatch-metrics-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. Configure seletores de eventos avançados para capturar eventos de dados de gravação (ingestão) do CloudWatch Metrics:

    aws cloudtrail put-event-selectors \ --region us-east-1 \ --trail-name cloudwatch-metrics-api-key-audit \ --advanced-event-selectors '[{ "Name": "CloudWatch Metrics write data events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::CloudWatch::Metric"] }, { "Field": "readOnly", "Equals": ["false"] } ] }]'
  3. Inicie o registro de trilhas em log:

    aws cloudtrail start-logging \ --name cloudwatch-metrics-api-key-audit \ --region us-east-1

O filtro readOnly: false limita o registro em log às operações de gravação (PutMetricData), que inclui todas as chamadas de ingestão de OTLP. Para identificar o uso do token de portador entre esses eventos, consulte seus logs de trilhas (via Athena ou CloudTrail Lake) e filtre pelo nome de usuário do IAM associado à sua chave de API (por exemplo, cloudwatch-metrics-api-key-user). Os eventos da ingestão de OTLP incluem AdditionalEventData.protocol definido para OTLP na carga útil do evento, que você pode usar em consultas post-hoc para diferenciá-los das chamadas clássicas do SDK PutMetricData.