Invio di registri a CloudWatch registri utilizzando l'endpoint HLC - CloudWatch Registri Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Invio di registri a CloudWatch registri utilizzando l'endpoint HLC

Amazon CloudWatch Logs supporta un endpoint HTTP Log Collector (HLC) che consente di inviare i log direttamente ai CloudWatch log utilizzando un semplice protocollo basato su HTTP. Questa funzionalità semplifica l'inserimento dei log per applicazioni e servizi senza richiedere l'integrazione con SDK. AWS

La funzionalità endpoint HLC consente di:

  • Inviare i log ai Logs utilizzando il protocollo basato su CloudWatch HTTP

  • Effettua l'autenticazione utilizzando credenziali specifiche del servizio IAM (token bearer)

  • Inserisci i log senza richiedere l'integrazione con SDK AWS

  • Utilizza semplici richieste HTTP POST da qualsiasi applicazione o servizio

Nota

La chiave API (token bearer) per l'accesso agli endpoint HLC è attualmente in anteprima e disponibile nelle seguenti AWS regioni:us-east-1,us-west-1, us-west-2 e. us-east-2 Consulta questa documentazione per eventuali aggiornamenti futuri.

Prerequisiti

Prima di poter inviare i log utilizzando l'endpoint HLC, devi:

  • Creare un utente IAM con autorizzazioni Logs CloudWatch

  • Genera credenziali specifiche per il servizio (bearer token)

  • Crea un gruppo di log e un flusso di log

  • Abilita l'autenticazione con token al portatore sul gruppo di log

Opzione 1: configurazione semplificata tramite la AWS console (consigliata)

La console AWS di gestione offre un flusso di lavoro semplificato per generare chiavi API per l'accesso agli endpoint HLC.

Per configurare l'accesso agli endpoint HLC utilizzando la console
  1. Accedi alla console di AWS gestione.

  2. Vai a CloudWatch> Impostazioni > Registri.

  3. Nella sezione Chiavi API, scegli Genera chiave API.

  4. Per Scadenza della chiave API, esegui una delle seguenti operazioni:

    • Seleziona una durata di scadenza della chiave API di 1, 5, 30, 90 o 365 giorni.

    • Scegli Durata personalizzata per specificare una data di scadenza della chiave API personalizzata.

    • Seleziona Non scade mai (scelta non consigliata).

  5. Scegli Genera chiave API.

    La console automaticamente:

    • Crea un nuovo utente IAM con le autorizzazioni appropriate

    • Allega la policy gestita di CloudWatchLogsAPIKeyAccess (include logs:PutLogEvents e logs:CallWithBearerToken autorizzazioni)

    • Genera credenziali specifiche del servizio (chiave API)

  6. Copia e salva in modo sicuro le credenziali visualizzate:

    • ID chiave API (ID credenziale specifico del servizio)

    • Chiave API segreta (token Bearer)

    Importante

    Salva immediatamente l'API Key Secret. Non può essere recuperata più tardi. Se la perdi, dovrai generare una nuova chiave API.

  7. Crea il gruppo di log e il flusso di log in cui verranno archiviati i log:

    # 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. Abilita l'autenticazione con token al portatore sul gruppo di log:

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

    Verifica la configurazione:

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

Autorizzazioni incluse: l'utente IAM creato automaticamente avrà le seguenti autorizzazioni:

  • logs:PutLogEvents— Invia eventi di registro a Logs CloudWatch

  • logs:CallWithBearerToken— Autenticazione utilizzando il token bearer

  • kms:Describe*,kms:GenerateDataKey*, kms:Decrypt — Accedi ai gruppi di log crittografati con KMS (con condizioni limitate al servizio di log)

Opzione 2: configurazione manuale

Se preferisci un maggiore controllo sulla configurazione IAM o devi personalizzare le autorizzazioni, puoi configurare l'endpoint HLC manualmente.

Passaggio 1: creare un utente IAM

Crea un utente IAM che verrà utilizzato per l'inserimento dei log:

  1. Accedi alla console di AWS gestione e accedi a IAM.

  2. Nel riquadro di navigazione a sinistra, seleziona Users (Utenti).

  3. Selezionare Create user (Crea utente).

  4. Inserisci un nome utente (ad esempio,cloudwatch-logs-hlc-user).

  5. Scegli Next (Successivo).

  6. Allega una delle seguenti politiche IAM:

    Opzione A: utilizza la policy gestita (consigliata)

    Allega la policy gestita di CloudWatchLogsAPIKeyaccesso.

    Opzione B: creare una politica personalizzata

    Crea e allega la seguente policy 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. Scegli Avanti, quindi Crea utente.

Nota

Le autorizzazioni KMS sono necessarie se prevedi di inviare registri a gruppi di log crittografati con KMS. La condizione limita l'accesso KMS alle sole chiavi utilizzate tramite il servizio Logs. CloudWatch

Fase 2: Generazione di credenziali specifiche per il servizio (chiave API)

Genera la chiave API CloudWatch Logs utilizzando l'API. CreateServiceSpecificCredential Puoi anche usare il comando create-service-specific-credentialCLI. Per l'età delle credenziali, è possibile specificare un valore compreso tra 1 e 36600 giorni. Se non specifici l’età delle credenziali, la chiave API non scadrà.

Per generare una chiave API con una scadenza di 30 giorni:

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

La risposta è un ServiceSpecificCredentialoggetto. Il ServiceCredentialSecret valore è la tua chiave API CloudWatch Logs (token bearer).

Importante

Archivia il valore ServiceCredentialSecret in modo sicuro, poiché non potrai recuperarlo in un secondo momento. Se la perdi, dovrai generare una nuova chiave API.

Fase 3: Creare un gruppo di log e un flusso di log

Crea il gruppo di log e il flusso di log in cui verranno archiviati i log:

# 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

Passaggio 4: abilitare l'autenticazione con token al portatore

Abilita l'autenticazione con token al portatore nel gruppo di log:

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

Verifica la configurazione:

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

Invio di log all'endpoint HLC

Formato dell'endpoint

L'URL dell'endpoint HLC segue questo formato:

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

Parametri richiesti:

  • <region>— AWS Regione (ad esempious-east-1,eu-west-1)

  • logGroup— nome del gruppo di log con codifica URL

  • logStream— nome del flusso di log con codifica URL

Parametri opzionali:

Facoltativamente, è possibile associare gli eventi di registro a un'Serviceentità includendo i seguenti parametri di query. Poiché i log inviati tramite l'endpoint HLC sono telemetria personalizzata, non vengono associati automaticamente a un'entità. Fornendo questi parametri, CloudWatch Logs crea un'entità con KeyAttributes.Type set to Service e la associa ai tuoi eventi di registro. Ciò consente alla funzionalità relativa a Explore di CloudWatch correlare questi log con altri dati di telemetria (metriche, tracce e registri) dello stesso servizio, semplificando la risoluzione dei problemi e il monitoraggio delle applicazioni su diversi tipi di segnale. Per ulteriori informazioni sulle entità e sulla relativa telemetria, vedere Aggiungere informazioni correlate alla telemetria personalizzata.

  • entityName— Il nome dell'entità di servizio da associare agli eventi del registro. Questo valore viene memorizzato come entità KeyAttributes.Name (ad esempio, my-application oapi.myservice.com).

  • entityEnvironment— L'ambiente in cui è ospitato il servizio o a cosa appartiene. Questo valore viene memorizzato come entità KeyAttributes.Environment (ad esempioproduction,ec2:default, oeks:my-cluster/default).

Formato della richiesta

Invia i log utilizzando HTTP POST con le intestazioni e il testo seguenti:

Intestazioni:

  • Authorization: Bearer <your-bearer-token>

  • Content-Type: application/json

Formato del corpo:

Il corpo della richiesta deve essere in formato JSON con una serie di eventi:

{ "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" } ] }

Descrizioni dei campi:

  • time— Timestamp Unix epoch con millisecondi (obbligatorio)

  • event— Il messaggio di registro o i dati dell'evento (obbligatorio)

  • host— Nome host o identificatore di origine (opzionale)

  • source— Identificatore di origine del registro (opzionale)

Se necessario, è possibile includere campi personalizzati aggiuntivi.

Richiesta di esempio

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" } ] }'

Controlla le autorizzazioni per la generazione e l'utilizzo delle chiavi CloudWatch API Logs

La generazione e l'utilizzo delle chiavi API CloudWatch Logs sono controllati da azioni e chiavi di condizione nei servizi CloudWatch Logs e IAM.

Controllo della generazione di chiavi API CloudWatch Logs

L'CreateServiceSpecificCredentialazione iam: controlla la generazione di una chiave specifica del servizio (come una chiave API CloudWatch Logs). È possibile questa azione agli utenti IAM come una risorsa per limitare gli utenti per cui è possibile generare una chiave.

Per imporre condizioni all’autorizzazione per l’azione iam:CreateServiceSpecificCredential, è possibile utilizzare le chiavi di condizione seguenti:

  • iam: ServiceSpecificCredentialAgeDays — Consente di specificare, nella condizione, la scadenza della chiave in giorni. Ad esempio, si può utilizzare questa chiave di condizione per consentire solo la creazione di chiavi API che scadono entro 90 giorni.

  • iam: ServiceSpecificCredentialServiceName — Consente di specificare, nella condizione, il nome di un servizio. Ad esempio, è possibile utilizzare questa chiave di condizione per consentire solo la creazione di chiavi API per CloudWatch Logs e non per altri servizi.

Controllo dell'utilizzo delle chiavi API CloudWatch Logs

L'logs:CallWithBearerTokenazione controlla l'uso di una chiave API CloudWatch Logs. Per impedire a un'identità di utilizzare le chiavi API CloudWatch Logs, allega una policy che neghi l'logs:CallWithBearerTokenazione all'utente IAM associato alla chiave.

Policy di esempio

Impedisci a un'identità di generare e utilizzare le chiavi API CloudWatch Logs

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

Questa politica impedirà la creazione di credenziali per tutti i AWS servizi che supportano la creazione di credenziali specifiche del servizio. Per ulteriori informazioni, consulta Credenziali specifiche del servizio per gli utenti IAM.

Impedisci a un'identità di utilizzare le chiavi API Logs CloudWatch

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

Consenti la creazione di chiavi CloudWatch Logs solo se scadono entro 90 giorni

{ "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" } } } ] }

Gestisci le chiavi API Logs compromesse CloudWatch

Se la chiave API è compromessa, è necessario revocare le autorizzazioni per utilizzarla. Puoi utilizzare le seguenti operazioni dell'API IAM per gestire le chiavi compromesse:

Nota

Per eseguire queste azioni tramite l'API, è necessario autenticarsi con AWS credenziali e non con una chiave API CloudWatch Logs.

Modifica lo stato di una CloudWatch chiave API Logs

Per disattivare una chiave, usa il update-service-specific-credentialcomando:

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

Per riattivare la chiave, modifica lo stato in. Active

Reimposta una chiave CloudWatch API Logs

Se il valore della tua chiave è stato compromesso o non la possiedi più, ripristinala utilizzando il reset-service-specific-credentialcomando. La chiave non deve essere ancora scaduta. Se è già scaduta, elimina la chiave e creane una nuova.

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

Elimina una chiave CloudWatch API Logs

Se non hai più bisogno di una chiave o è scaduta, eliminala usando il delete-service-specific-credentialcomando:

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

Allega le politiche IAM per rimuovere le autorizzazioni per l'utilizzo di una chiave API CloudWatch Logs

Per impedire a un'identità di effettuare chiamate con una chiave API CloudWatch Logs, collega la seguente policy all'utente IAM associato alla chiave:

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

Registrazione dell'utilizzo delle chiavi API con CloudTrail

È possibile utilizzare AWS CloudTrail per registrare gli eventi relativi ai dati per l'utilizzo della chiave API CloudWatch Logs. CloudWatch Logs emette eventi di AWS::Logs::LogGroupAuthorization dati per CallWithBearerToken le chiamate, consentendoti di verificare quando e come le chiavi API vengono utilizzate per inviare i log.

Per abilitare la CloudTrail registrazione per l'utilizzo delle chiavi API CloudWatch Logs:

Nota

Il bucket S3 che specifichi per il percorso deve avere una policy sui bucket che CloudTrail consenta di scrivere file di registro al suo interno. Per ulteriori informazioni, consulta la policy sui bucket di Amazon S3 per. CloudTrail

  1. Crea un percorso:

    aws cloudtrail create-trail \ --name cloudwatch-logs-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. Configura i selettori di eventi avanzati per acquisire gli eventi di autorizzazione dei gruppi di CloudWatch log log:

    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. Inizia la registrazione dei percorsi:

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

Best practice

Eventi di raggruppamento

Per prestazioni ed efficienza migliori:

  • Batch di più eventi in un'unica richiesta, quando possibile

  • Dimensione del batch consigliata: 10—100 eventi per richiesta

  • Dimensione massima della richiesta: 1 MB

Gestione degli errori

Implementa una corretta gestione degli errori nell'applicazione. Codici di stato HTTP comuni:

  • 200 OK— Registri inseriti con successo

  • 400 Bad Request— Formato o parametri di richiesta non validi

  • 401 Unauthorized— Token al portatore non valido o scaduto

  • 403 Forbidden— Autorizzazioni insufficienti

  • 404 Not Found— Il gruppo o lo stream di log non esiste

  • 429 Too Many Requests— Limite di velocità superato

  • 500 Internal Server Error— Errore di servizio (nuovo tentativo con backoff esponenziale)

Limitazioni

  • Dimensione massima dell'evento: 256 KB per evento

  • Dimensione massima della richiesta: 1 MB

  • Numero massimo di eventi per richiesta: 10.000

  • I nomi dei gruppi di log devono seguire le convenzioni di denominazione CloudWatch dei log

  • L'autenticazione con token Bearer deve essere abilitata nel gruppo di log