Senden von Protokollen an CloudWatch Logs mithilfe des HLC-Endpunkts - CloudWatch Amazon-Protokolle

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Senden von Protokollen an CloudWatch Logs mithilfe des HLC-Endpunkts

Amazon CloudWatch Logs unterstützt einen HTTP Log Collector (HLC) -Endpunkt, mit dem Sie CloudWatch Protokolle mithilfe eines einfachen HTTP-basierten Protokolls direkt an Logs senden können. Diese Funktion vereinfacht die Protokollaufnahme für Anwendungen und Dienste, ohne dass eine SDK-Integration erforderlich ist. AWS

Mit der HLC-Endpunktfunktion können Sie:

  • Protokolle mithilfe eines HTTP-basierten CloudWatch Protokolls an Logs senden

  • Authentifizieren Sie sich mit dienstspezifischen IAM-Anmeldeinformationen (Bearer-Token)

  • Erfassen Sie Protokolle, ohne dass eine SDK-Integration erforderlich ist AWS

  • Verwenden Sie einfache HTTP-POST-Anfragen von einer beliebigen Anwendung oder einem Dienst

Anmerkung

Der API-Schlüssel (Bearer-Token) für den HLC-Endpunktzugriff befindet sich derzeit in der Vorschauversion und ist in den folgenden AWS Regionen verfügbar:us-east-1, us-west-1us-west-2, und. us-east-2 Bitte überprüfen Sie diese Dokumentation auf future Aktualisierungen.

Voraussetzungen

Bevor Sie Protokolle über den HLC-Endpunkt senden können, müssen Sie:

  • Erstellen Sie einen IAM-Benutzer mit Logs-Berechtigungen CloudWatch

  • Generieren Sie dienstspezifische Anmeldeinformationen (Bearer-Token)

  • Erstellen Sie eine Protokollgruppe und einen Protokollstream

  • Aktivieren Sie die Bearer-Token-Authentifizierung für die Protokollgruppe

Option 1: Vereinfachte Einrichtung über die AWS Konsole (empfohlen)

Die AWS Management Console bietet einen optimierten Arbeitsablauf zur Generierung von API-Schlüsseln für den HLC-Endpunktzugriff.

So richten Sie den HLC-Endpunktzugriff mithilfe der Konsole ein
  1. Melden Sie sich bei der AWS Management Console an.

  2. Navigieren Sie zu CloudWatch> Einstellungen > Protokolle.

  3. Wählen Sie im Abschnitt API-Schlüssel die Option API-Schlüssel generieren aus.

  4. Für den Ablauf des API-Schlüssels haben Sie folgende Möglichkeiten:

    • Wählen Sie eine Ablaufdauer für den API-Schlüssel von 1, 5, 30, 90 oder 365 Tagen aus.

    • Wählen Sie Benutzerdefinierte Dauer aus, um ein benutzerdefiniertes Ablaufdatum für den API-Schlüssel festzulegen.

    • Wählen Sie Nie abläuft aus (nicht empfohlen).

  5. Wählen Sie API-Schlüssel generieren aus.

    Die Konsole automatisch:

    • Erstellt einen neuen IAM-Benutzer mit den entsprechenden Berechtigungen

    • Hängt die verwaltete CloudWatchLogsAPIKeyAccess-Richtlinie an (einschließlich logs:PutLogEvents und logs:CallWithBearerToken Berechtigungen)

    • Generiert dienstspezifische Anmeldeinformationen (API-Schlüssel)

  6. Kopieren Sie die angezeigten Anmeldeinformationen und speichern Sie sie sicher:

    • API-Schlüssel-ID (dienstspezifische Anmelde-ID)

    • Geheimer API-Schlüssel (Inhaber-Token)

    Wichtig

    Speichern Sie das API-Schlüsselgeheimnis sofort. Er kann später nicht mehr abgerufen werden. Wenn Sie ihn verlieren, müssen Sie einen neuen API-Schlüssel generieren.

  7. Erstellen Sie die Protokollgruppe und den Protokollstream, in denen Ihre Logs gespeichert werden:

    # 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. Aktivieren Sie die Bearer-Token-Authentifizierung für die Protokollgruppe:

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

    Überprüfen Sie die Konfiguration:

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

Enthaltene Berechtigungen: Der automatisch erstellte IAM-Benutzer verfügt über die folgenden Berechtigungen:

  • logs:PutLogEvents— Sendet Protokollereignisse an CloudWatch Logs

  • logs:CallWithBearerToken— Authentifizieren Sie sich mit dem Bearer-Token

  • kms:Describe*,kms:GenerateDataKey*, kms:Decrypt — Greifen Sie auf KMS-verschlüsselte Protokollgruppen zu (mit einer Bedingung, die auf den Protokolldienst beschränkt ist)

Option 2: Manuelle Einrichtung

Wenn Sie mehr Kontrolle über die IAM-Konfiguration bevorzugen oder Berechtigungen anpassen müssen, können Sie den HLC-Endpunkt manuell einrichten.

Schritt 1: Erstellen Sie einen IAM-Benutzer

Erstellen Sie einen IAM-Benutzer, der für die Protokollaufnahme verwendet wird:

  1. Melden Sie sich bei der AWS Management Console an und navigieren Sie zu IAM.

  2. Wählen Sie im linken Navigationsbereich Benutzer aus.

  3. Wählen Sie Create user (Benutzer erstellen) aus.

  4. Geben Sie einen Benutzernamen ein (z. B.cloudwatch-logs-hlc-user).

  5. Wählen Sie Weiter aus.

  6. Fügen Sie eine der folgenden IAM-Richtlinien hinzu:

    Option A: Verwenden Sie die verwaltete Richtlinie (empfohlen)

    Hängen Sie die verwaltete CloudWatchLogsAPIKeyAccess-Richtlinie an.

    Option B: Erstellen Sie eine benutzerdefinierte Richtlinie

    Erstellen Sie die folgende IAM-Richtlinie und fügen Sie sie an:

    { "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. Wählen Sie Weiter und dann Benutzer erstellen.

Anmerkung

Die KMS-Berechtigungen sind erforderlich, wenn Sie Protokolle an KMS-verschlüsselte Protokollgruppen senden möchten. Die Bedingung beschränkt den KMS-Zugriff nur auf Schlüssel, die über CloudWatch den Logs-Dienst verwendet werden.

Schritt 2: Generieren Sie dienstspezifische Anmeldeinformationen (API-Schlüssel)

Generieren Sie den CloudWatch Logs-API-Schlüssel mithilfe der CreateServiceSpecificCredentialAPI. Sie können auch den create-service-specific-credentialCLI-Befehl verwenden. Für das Alter der Anmeldeinformationen können Sie einen Wert zwischen 1—36600 Tagen angeben. Wenn Sie keine Gültigkeitsdauer für die Anmeldeinformationen angeben, läuft der API-Schlüssel nicht ab.

Um einen API-Schlüssel mit einem Ablauf von 30 Tagen zu generieren:

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

Die Antwort ist ein ServiceSpecificCredentialObjekt. Der ServiceCredentialSecret Wert ist Ihr CloudWatch Logs-API-Schlüssel (Bearer-Token).

Wichtig

Speichern Sie den Wert „ServiceCredentialSecret“ sicher, da Sie ihn später nicht mehr abrufen können. Wenn Sie ihn verlieren, müssen Sie einen neuen API-Schlüssel generieren.

Schritt 3: Erstellen Sie eine Protokollgruppe und einen Protokollstream

Erstellen Sie die Protokollgruppe und den Protokollstream, in denen Ihre Protokolle gespeichert werden:

# 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

Schritt 4: Aktivieren Sie die Bearer-Token-Authentifizierung

Aktivieren Sie die Bearer-Token-Authentifizierung für die Protokollgruppe:

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

Überprüfen Sie die Konfiguration:

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

Protokolle an den HLC-Endpunkt senden

Endpunkt-Format

Die URL des HLC-Endpunkts folgt diesem Format:

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

Erforderliche Parameter:

  • <region>— AWS Region (zum Beispielus-east-1,eu-west-1)

  • logGroup— URL-codierter Name der Protokollgruppe

  • logStream— URL-codierter Name des Log-Streams

Optionale Parameter:

Sie können Ihre Protokollereignisse optional einer Service Entität zuordnen, indem Sie die folgenden Abfrageparameter angeben. Da es sich bei den über den HLC-Endpunkt gesendeten Protokollen um benutzerdefinierte Telemetrie handelt, werden sie nicht automatisch einer Entität zugeordnet. Durch die Angabe dieser Parameter erstellt CloudWatch Logs eine Entität mit der KeyAttributes.Type Einstellung auf Service und ordnet sie Ihren Protokollereignissen zu. Auf diese Weise kann die zugehörige CloudWatch Explore-Funktion diese Protokolle mit anderen Telemetriedaten (Metriken, Traces und Logs) desselben Dienstes korrelieren, was die Fehlerbehebung und Überwachung Ihrer Anwendungen bei verschiedenen Signaltypen erleichtert. Weitere Informationen zu Entitäten und verwandter Telemetrie finden Sie unter Hinzufügen verwandter Informationen zur benutzerdefinierten Telemetrie.

  • entityName— Der Name der Dienstentität, die den Protokollereignissen zugeordnet werden soll. Dieser Wert wird als Entität gespeichert KeyAttributes.Name (z. B. my-application oderapi.myservice.com).

  • entityEnvironment— Die Umgebung, in der der Dienst gehostet wird oder zu der er gehört. Dieser Wert wird als Entität gespeichert KeyAttributes.Environment (z. B.production,ec2:default, odereks:my-cluster/default).

Anforderungsformat

Senden Sie Protokolle mithilfe von HTTP POST mit den folgenden Headern und dem folgenden Hauptteil:

Kopfzeilen:

  • Authorization: Bearer <your-bearer-token>

  • Content-Type: application/json

Körperformat:

Der Hauptteil der Anfrage sollte im JSON-Format mit einer Reihe von Ereignissen vorliegen:

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

Feldbeschreibungen:

  • time— Zeitstempel der Unix-Epoche mit Millisekunden (erforderlich)

  • event— Die Protokollnachricht oder die Ereignisdaten (erforderlich)

  • host— Hostname oder Kennung der Quelle (optional)

  • source— Kennung der Protokollquelle (optional)

Zusätzliche benutzerdefinierte Felder können nach Bedarf hinzugefügt werden.

Beispielanforderung

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

Steuern Sie die Berechtigungen für die Generierung und Verwendung von CloudWatch Logs-API-Schlüsseln

Die Generierung und Verwendung von CloudWatch Logs-API-Schlüsseln wird durch Aktionen und Bedingungsschlüssel sowohl in den CloudWatch Logs- als auch in den IAM-Diensten gesteuert.

Steuerung der Generierung von CloudWatch Logs-API-Schlüsseln

Die CreateServiceSpecificCredential Aktion iam: steuert die Generierung eines dienstspezifischen Schlüssels (z. B. eines CloudWatch Logs-API-Schlüssels). Sie können diese Aktion auf IAM-Benutzer als Ressource beschränken, um die Anzahl der Benutzer einzuschränken, für die ein Schlüssel generiert werden kann.

Mit den folgenden Bedingungsschlüsseln können Sie Bedingungen mit der Berechtigung für die Aktion iam:CreateServiceSpecificCredential verknüpfen:

  • iam: ServiceSpecificCredentialAgeDays — Ermöglicht es Ihnen, in der Bedingung die Ablaufzeit des Schlüssels in Tagen anzugeben. Sie können diesen Bedingungsschlüssel zum Beispiel verwenden, um nur das Erstellen von API-Schlüsseln zu erlauben, die innerhalb von 90 Tagen ablaufen.

  • iam: ServiceSpecificCredentialServiceName — Ermöglicht es Ihnen, in der Bedingung den Namen eines Dienstes anzugeben. Sie können diesen Bedingungsschlüssel beispielsweise verwenden, um nur die Erstellung von API-Schlüsseln für CloudWatch Logs und nicht für andere Dienste zuzulassen.

Steuerung der Verwendung von CloudWatch Logs-API-Schlüsseln

Die logs:CallWithBearerToken Aktion steuert die Verwendung eines CloudWatch Logs-API-Schlüssels. Um zu verhindern, dass eine Identität CloudWatch Logs-API-Schlüssel verwendet, fügen Sie eine Richtlinie hinzu, die dem IAM-Benutzer, der dem Schlüssel zugeordnet ist, die logs:CallWithBearerToken Aktion verweigert.

Beispielrichtlinien

Verhindern Sie, dass eine Identität CloudWatch Logs-API-Schlüssel generiert und verwendet

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

Diese Richtlinie verhindert die Erstellung von Anmeldeinformationen für alle AWS Dienste, die die Erstellung dienstspezifischer Anmeldeinformationen unterstützen. Weitere Informationen finden Sie unter Servicespezifische Anmeldeinformationen für IAM-Benutzer.

Verhindern Sie, dass eine Identität CloudWatch Logs-API-Schlüssel verwendet

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

Erlauben Sie die Erstellung von CloudWatch Logs-Schlüsseln nur, wenn sie innerhalb von 90 Tagen ablaufen

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

Behandeln Sie kompromittierte CloudWatch Logs-API-Schlüssel

Wenn Ihr API-Schlüssel kompromittiert wurde, sollten Sie Berechtigungen für dessen Verwendung widerrufen. Sie können die folgenden IAM-API-Operationen verwenden, um kompromittierte Schlüssel zu verwalten:

Anmerkung

Um diese Aktionen über die API auszuführen, müssen Sie sich mit AWS Anmeldeinformationen und nicht mit einem CloudWatch Logs-API-Schlüssel authentifizieren.

Ändern Sie den Status eines CloudWatch Logs-API-Schlüssels

Verwenden Sie den update-service-specific-credentialfolgenden Befehl, um einen Schlüssel zu deaktivieren:

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

Um den Schlüssel wieder zu aktivieren, ändern Sie den Status aufActive.

Setzen Sie einen CloudWatch Logs-API-Schlüssel zurück

Wenn der Wert Ihres Schlüssels kompromittiert wurde oder Sie ihn nicht mehr haben, setzen Sie ihn mit dem reset-service-specific-credentialfolgenden Befehl zurück. Der Schlüssel darf noch nicht abgelaufen sein. Wenn er bereits abgelaufen ist, löschen Sie den Schlüssel und erstellen Sie einen neuen.

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

Löschen Sie einen CloudWatch Logs-API-Schlüssel

Wenn Sie einen Schlüssel nicht mehr benötigen oder er abgelaufen ist, löschen Sie ihn mit dem delete-service-specific-credentialfolgenden Befehl:

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

Hängen Sie IAM-Richtlinien an, um die Berechtigungen für die Verwendung eines CloudWatch Logs-API-Schlüssels zu entfernen

Um zu verhindern, dass eine Identität Aufrufe mit einem CloudWatch Logs-API-Schlüssel tätigt, fügen Sie dem IAM-Benutzer, der dem Schlüssel zugeordnet ist, die folgende Richtlinie an:

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

Protokollierung der API-Schlüsselnutzung mit CloudTrail

Sie können AWS CloudTrail es verwenden, um Datenereignisse für die Verwendung von CloudWatch Logs API-Schlüsseln zu protokollieren. CloudWatch Logs sendet AWS::Logs::LogGroupAuthorization Datenereignisse für CallWithBearerToken Aufrufe aus, sodass Sie überprüfen können, wann und wie API-Schlüssel zum Senden von Protokollen verwendet werden.

So aktivieren Sie die CloudTrail Protokollierung für die Verwendung von CloudWatch Logs-API-Schlüsseln:

Anmerkung

Der S3-Bucket, den Sie für den Trail angeben, muss über eine Bucket-Richtlinie verfügen, die CloudTrail das Schreiben von Protokolldateien in ihn ermöglicht. Weitere Informationen finden Sie unter Amazon S3 S3-Bucket-Richtlinie für CloudTrail.

  1. Erstellen Sie einen Trail:

    aws cloudtrail create-trail \ --name cloudwatch-logs-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. Konfigurieren Sie erweiterte Event-Selektoren, um Logs zu CloudWatch protokollieren, Gruppenautorisierungsereignisse zu protokollieren:

    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. Starten Sie die Trailprotokollierung:

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

Best Practices

Ereignisse stapeln

Für mehr Leistung und Effizienz:

  • Wenn möglich, mehrere Ereignisse in einer einzigen Anfrage bündeln

  • Empfohlene Batchgröße: 10—100 Ereignisse pro Anfrage

  • Maximale Anforderungsgröße: 1 MB

Fehlerbehandlung

Implementieren Sie die richtige Fehlerbehandlung in Ihrer Anwendung. Allgemeine HTTP-Statuscodes:

  • 200 OK— Protokolle wurden erfolgreich aufgenommen

  • 400 Bad Request— Ungültiges Anforderungsformat oder ungültige Parameter

  • 401 Unauthorized— Ungültiges oder abgelaufenes Trägertoken

  • 403 Forbidden— Unzureichende Berechtigungen

  • 404 Not Found— Protokollgruppe oder Stream existiert nicht

  • 429 Too Many Requests— Ratenlimit überschritten

  • 500 Internal Server Error— Servicefehler (erneuter Versuch mit exponentiellem Backoff)

Einschränkungen

  • Maximale Ereignisgröße: 256 KB pro Ereignis

  • Maximale Anforderungsgröße: 1 MB

  • Maximale Anzahl von Ereignissen pro Anfrage: 10.000

  • Die Namen der Protokollgruppen müssen den Benennungskonventionen für CloudWatch Protokolle entsprechen

  • Die Bearer-Token-Authentifizierung muss für die Protokollgruppe aktiviert sein