Enviando registros para CloudWatch Logs usando o endpoint HLC - CloudWatch Registros da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Enviando registros para CloudWatch Logs usando o endpoint HLC

O Amazon CloudWatch Logs oferece suporte a um endpoint HTTP Log Collector (HLC) que permite enviar registros diretamente para o Logs usando um CloudWatch protocolo simples baseado em HTTP. Esse recurso simplifica a ingestão de registros para aplicativos e serviços sem exigir a integração do AWS SDK.

O recurso de endpoint do HLC permite que você:

  • Enviar registros para o CloudWatch Logs usando o protocolo baseado em HTTP

  • Autenticar usando credenciais específicas do serviço IAM (tokens do portador)

  • Ingira registros sem exigir a integração do AWS SDK

  • Use solicitações HTTP POST simples de qualquer aplicativo ou serviço

nota

A chave de API (token portador) para acesso ao endpoint HLC está atualmente em versão prévia e disponível nas seguintes AWS regiões:us-east-1,us-west-1, e. us-west-2 us-east-2 Consulte esta documentação para obter atualizações futuras.

Pré-requisitos

Antes de enviar registros usando o endpoint do HLC, você precisa:

  • Crie um usuário do IAM com permissões CloudWatch de registros

  • Gere credenciais específicas do serviço (token do portador)

  • Crie um grupo de registros e um fluxo de registros

  • Ativar a autenticação do token do portador no grupo de registros

Opção 1: configuração simplificada usando o AWS console (recomendado)

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

Para configurar o acesso ao endpoint HLC usando o console
  1. Faça login no AWS Management Console.

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

  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 uma duração de expiração 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 CloudWatchLogsAPIKeyAccess (inclusões logs:PutLogEvents e logs:CallWithBearerToken permissões)

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

  6. 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)

    Importante

    Salve o segredo da chave de API imediatamente. Ela não poderá ser recuperada posteriormente. Se você a perder, precisará gerar uma nova chave de API.

  7. Crie o grupo de registros e o fluxo de registros em que seus registros serão armazenados:

    # Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1
  8. Ative a autenticação do token do portador no grupo de registros:

    aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

    Verifique a configuração:

    aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

Permissões incluídas: o usuário do IAM criado automaticamente terá as seguintes permissões:

  • logs:PutLogEvents— Enviar eventos de registro para CloudWatch Logs

  • logs:CallWithBearerToken— Autenticar usando o token do portador

  • kms:Describe*,kms:GenerateDataKey*, kms:Decrypt — Acesse grupos de registros criptografados pelo KMS (com condição restrita ao serviço de registros)

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 endpoint do HLC manualmente.

Etapa 1: criar um usuário do IAM

Crie um usuário do IAM que será usado para ingestão de registros:

  1. Faça login no AWS Management Console e navegue até 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-logs-hlc-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 CloudWatchLogsAPIKeyAccess.

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

    Crie e anexe a seguinte política do IAM:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "LogsAPIs", "Effect": "Allow", "Action": [ "logs:CallWithBearerToken", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "KMSAPIs", "Effect": "Allow", "Action": [ "kms:Describe*", "kms:GenerateDataKey*", "kms:Decrypt" ], "Condition": { "StringEquals": { "kms:ViaService": [ "logs.*.amazonaws.com" ] } }, "Resource": "arn:aws:kms:*:*:key/*" } ] }
  7. Escolha Avançar e, em seguida, Criar usuário.

nota

As permissões do KMS são necessárias se você planeja enviar registros para grupos de registros criptografados pelo KMS. A condição restringe o acesso ao KMS somente às chaves usadas por meio do serviço de CloudWatch registros.

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

Gere a chave da API CloudWatch Logs usando a CreateServiceSpecificCredentialAPI. Você também pode usar o comando create-service-specific-credentialCLI. Para a idade da credencial, você pode especificar um valor entre 1 e 36600 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 uma expiração de 30 dias:

aws iam create-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-name logs.amazonaws.com \ --credential-age-days 30

A resposta é um ServiceSpecificCredentialobjeto. O ServiceCredentialSecret valor é sua chave da API CloudWatch Logs (token do portador).

Importante

Armazene o valor ServiceCredentialSecret em segurança, pois não será possível recuperá-lo mais tarde. Se você a perder, precisará gerar uma nova chave de API.

Etapa 3: criar um grupo de registros e um fluxo de registros

Crie o grupo de registros e o fluxo de registros em que seus registros serão armazenados:

# Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1

Etapa 4: ativar a autenticação do token do portador

Ative a autenticação do token do portador no grupo de registros:

aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

Verifique a configuração:

aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

Enviando registros para o endpoint do HLC

Formato do endpoint

O URL do endpoint do HLC segue este formato:

https://logs.<region>.amazonaws.com/services/collector/event?logGroup=<name>&logStream=<name>[&entityName=<name>&entityEnvironment=<environment>]

Parâmetros necessários:

  • <region>— AWS Região (por exemplo,us-east-1,eu-west-1)

  • logGroup— Nome do grupo de registros codificado por URL

  • logStream— Nome do fluxo de log codificado por URL

Parâmetros opcionais:

Opcionalmente, você pode associar seus eventos de log a uma Service entidade incluindo os seguintes parâmetros de consulta. Como os registros enviados pelo endpoint do HLC são telemetria personalizada, eles não são associados automaticamente a uma entidade. Ao fornecer esses parâmetros, o CloudWatch Logs cria uma entidade com KeyAttributes.Type set to Service e a associa aos seus eventos de registro. Isso permite que o recurso relacionado ao Explore correlacione esses registros com outras telemetrias (métricas, rastreamentos e registros) do mesmo serviço, facilitando a solução de problemas e o monitoramento de seus aplicativos em diferentes tipos de sinal. CloudWatch Para obter mais informações sobre entidades e telemetria relacionada, consulte Adicionar informações relacionadas à telemetria personalizada.

  • entityName— O nome da entidade de serviço a ser associada aos eventos de log. Esse valor é armazenado como a entidade KeyAttributes.Name (por exemplo, my-application ouapi.myservice.com).

  • entityEnvironment— O ambiente em que o serviço está hospedado ou ao qual ele pertence. Esse valor é armazenado como a entidade KeyAttributes.Environment (por exemploproduction,ec2:default, oueks:my-cluster/default).

Formato de solicitação

Envie registros usando HTTP POST com os seguintes cabeçalhos e corpo:

Cabeçalhos:

  • Authorization: Bearer <your-bearer-token>

  • Content-Type: application/json

Formato do corpo:

O corpo da solicitação deve estar no formato JSON com uma matriz de eventos:

{ "event": [ { "time": 1730141374.001, "event": "Application started successfully", "host": "web-server-1", "source": "application.log", "severity": "info" }, { "time": 1730141374.457, "event": "User login successful", "host": "web-server-1", "source": "auth.log", "user": "john.doe" } ] }

Descrições de campo:

  • time— Timestamp da época do Unix com milissegundos (obrigatório)

  • event— A mensagem de registro ou os dados do evento (obrigatório)

  • host— Nome do host ou identificador de origem (opcional)

  • source— Identificador da fonte de log (opcional)

Campos personalizados adicionais podem ser incluídos conforme necessário.

Exemplo de solicitação

curl -X POST \ 'https://logs.<region>.amazonaws.com/services/collector/event?logGroup=/aws/hlc-logs/my-application&logStream=application-stream-001' \ -H "Authorization: Bearer <your-bearer-token>" \ -H "Content-Type: application/json" \ -d '{ "event": [ { "time": 1730141374.001, "event": "Application started", "host": "web-server-1", "severity": "info" } ] }'

Controle as permissões para gerar e usar CloudWatch as chaves da API Logs

A geração e o uso das chaves da API CloudWatch Logs são controlados por ações e chaves de condição nos serviços do CloudWatch Logs e do IAM.

Controle da geração de chaves da API CloudWatch Logs

A CreateServiceSpecificCredential ação iam: controla a geração de uma chave específica do serviço (como uma chave da API CloudWatch Logs). 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:

  • iam: ServiceSpecificCredentialAgeDays — Permite especificar, na condição, o tempo de expiração da chave em dias. Por exemplo, é possível usar essa chave de condição para permitir somente a criação de chaves de API que expirem em noventa dias.

  • iam: ServiceSpecificCredentialServiceName — Permite especificar, na condição, o nome de um serviço. Por exemplo, você pode usar essa chave de condição para permitir somente a criação de chaves de API para CloudWatch Logs e não para outros serviços.

Controle do uso das chaves da API CloudWatch Logs

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

Exemplo de política

Impedir que uma identidade gere e use CloudWatch as chaves da API Logs

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

Essa política impedirá a criação de credenciais para todos os AWS serviços que oferecem suporte à criação de credenciais específicas do serviço. Para ter mais informações, consulte Credenciais específicas do serviço para usuários do IAM.

Impedir que uma identidade use CloudWatch as chaves da API Logs

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

Permita a criação de chaves de CloudWatch registros somente se elas expirarem em 90 dias

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

Lidar com chaves comprometidas da API CloudWatch Logs

Se sua chave de API for comprometida, você deverá revogar as permissões para usá-la. Você pode usar as seguintes operações de API do IAM para gerenciar chaves comprometidas:

nota

Para realizar essas ações por meio da API, você deve se autenticar com AWS credenciais e não com uma chave da API CloudWatch Logs.

Alterar o status de uma chave da API CloudWatch Logs

Para desativar uma chave, use o update-service-specific-credentialcomando:

aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive

Para reativar a chave, altere o status paraActive.

Redefinir uma chave da API CloudWatch Logs

Se o valor da sua chave foi comprometido ou você não a tem mais, redefina-a usando o reset-service-specific-credentialcomando. A chave ainda não deve ter expirado. Se ela já tiver expirado, exclua a chave e crie outra.

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

Excluir uma chave da API CloudWatch Logs

Se você não precisar mais de uma chave ou se ela tiver expirado, exclua-a usando o delete-service-specific-credentialcomando:

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

Anexe políticas do IAM para remover as permissões de uso de uma chave da API CloudWatch Logs

Para evitar que uma identidade faça chamadas com uma chave da API CloudWatch Logs, anexe a política a seguir ao usuário do IAM associado à chave:

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

Registrando o uso da chave de API com CloudTrail

Você pode usar AWS CloudTrail para registrar eventos de dados para o uso da chave da API CloudWatch Logs. CloudWatch O Logs emite eventos de AWS::Logs::LogGroupAuthorization dados para CallWithBearerToken chamadas, permitindo que você audite quando e como as chaves de API são usadas para enviar registros.

Para ativar o CloudTrail registro para o uso da chave da API CloudWatch Logs:

nota

O bucket do S3 que você especifica para a trilha deve ter uma política de bucket que permita CloudTrail gravar arquivos de log nele. Para obter mais informações, consulte a política de bucket do Amazon S3 para. CloudTrail

  1. Crie uma trilha:

    aws cloudtrail create-trail \ --name cloudwatch-logs-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. Configure seletores de eventos avançados para capturar eventos de autorização de grupos de CloudWatch registros de registros:

    aws cloudtrail put-event-selectors \ --region us-east-1 \ --trail-name cloudwatch-logs-api-key-audit \ --advanced-event-selectors '[{ "Name": "CloudWatch Logs API key authorization events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Logs::LogGroupAuthorization"] } ] }]'
  3. Inicie o registro de trilhas:

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

Práticas recomendadas

eventos em lotes

Para melhor desempenho e eficiência:

  • Agrupe vários eventos em uma única solicitação, quando possível

  • Tamanho de lote recomendado: 10 a 100 eventos por solicitação

  • Tamanho máximo da solicitação: 1 MB

Tratamento de erros

Implemente o tratamento adequado de erros em seu aplicativo. Códigos de status HTTP comuns:

  • 200 OK— Registros ingeridos com sucesso

  • 400 Bad Request— Formato ou parâmetros de solicitação inválidos

  • 401 Unauthorized— Token de portador inválido ou expirado

  • 403 Forbidden— Permissões insuficientes

  • 404 Not Found— O grupo de log ou stream não existe

  • 429 Too Many Requests— Limite de taxa excedido

  • 500 Internal Server Error— Erro de serviço (tente novamente com recuo exponencial)

Limitações

  • Tamanho máximo do evento: 256 KB por evento

  • Tamanho máximo da solicitação: 1 MB

  • Máximo de eventos por solicitação: 10.000

  • Os nomes dos grupos de registros devem seguir as convenções de nomenclatura de CloudWatch registros

  • A autenticação do token do portador deve estar habilitada no grupo de registros