View a markdown version of this page

Inhaber-Token-Authentifizierung für Metriken einrichten - Amazon CloudWatch

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.

Inhaber-Token-Authentifizierung für Metriken einrichten

Anmerkung

Diese Seite behandelt die Inhaber-Token-Authentifizierung für den CloudWatch Metrics OTLP-Endpunkt. Informationen zur CloudWatch Logs-Inhaber-Token-Authentifizierung finden Sie unter Einrichten der Inhaber-Token-Authentifizierung für Logs im CloudWatch Logs-Benutzerhandbuch.

Bevor Sie Metriken mithilfe der Bearer-Token-Authentifizierung mit dem CloudWatch OTLP-Endpunkt senden können, müssen Sie:

  • Erstellen Sie einen IAM-Benutzer mit Metrikberechtigungen CloudWatch

  • Generieren Sie dienstspezifische Anmeldeinformationen (API-Schlüssel)

Wichtig

Wir empfehlen, die SigV4-Authentifizierung mit kurzfristigen Anmeldeinformationen für alle Workloads zu verwenden, sofern dies möglich ist. SigV4 bietet das stärkste Sicherheitsniveau. Beschränken Sie die Verwendung von API-Schlüsseln (Inhaber-Token) auf Szenarien, in denen eine kurzfristige Authentifizierung mit Anmeldeinformationen nicht möglich ist, z. B. das Senden von Metriken von AWS Nicht-Umgebungen, Drittanbietern oder Plattformen, die das SDK nicht unterstützen. AWS Wenn Sie bereit sind, CloudWatch Metriken in Anwendungen mit höheren Sicherheitsanforderungen zu integrieren, wechseln Sie zu kurzfristigen Anmeldeinformationen. Weitere Informationen finden Sie im IAM-Benutzerhandbuch unter Alternativen zu langfristigen Zugriffsschlüsseln.

Wichtig

Der CloudWatch OTLP-Endpunkt erfordert TLS (HTTPS). Über einfaches HTTP gesendete Bearer-Token-Anfragen werden abgelehnt. Verwenden Sie diese Option immerhttps://monitoring.AWS Region.amazonaws.com/v1/metrics, wenn Sie Ihren Client konfigurieren.

Option 1: Schnellstart mit der AWS Konsole

Die AWS Management Console bietet einen optimierten Arbeitsablauf zum Generieren von API-Schlüsseln für den OTLP-Endpunktzugriff.

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

  2. Navigieren Sie zu CloudWatch > Einstellungen > Global.

  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 läuft ab (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 CloudWatchAPIKeyAccess verwaltete Richtlinie an (einschließlich cloudwatch:PutMetricData und cloudwatch:CallWithBearerToken Berechtigungen)

  • Generiert dienstspezifische Anmeldeinformationen (API-Schlüssel)

Um Ihren API-Schlüssel zu speichern und zu verifizieren
  1. Kopieren Sie die angezeigten Anmeldeinformationen und speichern Sie sie sicher:

    • API-Schlüssel-ID (Service-specificAnmeldeinformations-ID)

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

    Die Konsole bietet auch die Möglichkeit, Ihren API-Schlüssel während der Generierung direkt im AWS Secrets Manager zu speichern. Wenn Sie sich dafür entscheiden, ihn im Secrets Manager zu speichern, wird der Schlüssel beim Zurücksetzen automatisch aktualisiert und beim Löschen des Schlüssels gelöscht.

    Wichtig

    Speichern Sie das API-Schlüsselgeheimnis sofort. Sie können es später nicht abrufen. Wenn Sie ihn verlieren, müssen Sie einen neuen API-Schlüssel generieren.

  2. Senden Sie eine Testmetrik, um Ihr Setup zu überprüfen:

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

Option 2: Manuelle Einrichtung

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

Schritt 1: Erstellen Sie einen IAM-Benutzer

Erstellen Sie einen IAM-Benutzer für die Erfassung von Metriken:

So erstellen Sie einen IAM-Benutzer für die Erfassung von Metriken
  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-metrics-api-key-user).

  5. Wählen Sie Weiter aus.

  6. Hängen Sie eine der folgenden IAM-Richtlinien an:

    Option A: Verwenden Sie die verwaltete Richtlinie (empfohlen)

    Hängen Sie die CloudWatchAPIKeyAccess verwaltete Richtlinie an.

    Option B: Erstellen Sie eine benutzerdefinierte Richtlinie

    Erstellen Sie die folgende IAM-Richtlinie und hängen Sie sie an:

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

Anmerkung

Die KMS-Berechtigungen sind erforderlich, wenn Sie planen, Metriken an Datensätze zu senden, die vom Kunden verwaltete KMS-Schlüssel (CMK) verwenden. Die Bedingungen beschränken den KMS-Zugriff nur auf Schlüssel, die über den CloudWatch Service für Datensatzressourcen verwendet werden.

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

Generieren Sie den CloudWatch Metrics-API-Schlüssel mithilfe der CreateServiceSpecificCredential API. Sie können auch den Befehl create-service-specific-credential AWS CLI verwenden. Für das Alter der Anmeldeinformationen können Sie einen Wert zwischen 1—36600 Tagen angeben. Wenn Sie kein Alter 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-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com \ --credential-age-days 30

Die Antwort ist ein ServiceSpecificCredential Objekt. Der ServiceCredentialSecret Wert ist Ihr CloudWatch Metrics-API-Schlüssel (Bearer-Token).

Wichtig

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

Schritt 3: Metriken senden

Mit Ihrem Bearer-Token können Sie sofort Metriken an den OTLP-Endpunkt senden:

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

Der Endpunkt akzeptiert sowohl Inhaltstypen als auch application/json application/x-protobuf Inhaltstypen.

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

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

Die iam:CreateServiceSpecificCredential Aktion steuert die Generierung eines dienstspezifischen Schlüssels (z. B. eines CloudWatch Metrics-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:

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

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

Anmerkung

Bearer-Token für CloudWatch Metrics können nur zusammen mit dem Endpunkt für die Erfassung von OTLP-Metriken () verwendet werden. https://monitoring.AWS Region.amazonaws.com/v1/metrics Sie können nicht verwendet werden, um andere CloudWatch APIs oder Endpunkte aufzurufen, einschließlich der Abfrage-APIs (,DescribeAlarms)GetMetricData, ListMetrics des PromQL-Abfrageendpunkts, des OTLP-Traces-Endpunkts oder des OTLP-Logs-Endpunkts.

Beispielrichtlinien

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCWMetricsAPIKeys", "Effect": "Deny", "Action": [ "iam:CreateServiceSpecificCredential", "cloudwatch: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 Service-specific Anmeldeinformationen für IAM-Benutzer im IAM-Benutzerhandbuch.

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

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

Erlauben Sie die Erstellung von CloudWatch Metrikschlüsseln nur, wenn diese 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": "cloudwatch.amazonaws.com" }, "NumericLessThanEquals": { "iam:ServiceSpecificCredentialAgeDays": "90" } } } ] }

Verwendung von Inhaber-Token mit dem Collector OpenTelemetry

Wenn Sie Inhaber-Token verwenden, benötigen Sie die sigv4auth Erweiterung nicht. Verwenden Sie die Erweiterung bearertokenauth, um Ihren API-Schlüssel sicher aus einer Datei oder Umgebungsvariablen bereitzustellen:

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]

Alternativ können Sie statt einer Datei auf eine Umgebungsvariable verweisen:

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

Codieren Sie API-Schlüssel niemals direkt in Collector-Konfigurationsdateien fest. Konfigurationsdateien werden häufig der Versionskontrolle unterzogen oder in Bereitstellungsmanifesten gespeichert. Verwenden Sie diese Option, filename um aus einem bereitgestellten Geheimnis ${env:VAR} zu lesen oder aus einer Umgebungsvariablen zu lesen, die von Ihrem Secrets Manager eingefügt wurde.

Anmerkung

Bei der Bearer-Token-Authentifizierung benötigen Sie weder die sigv4auth Erweiterung noch die AWS Anmeldeinformationsdateien, IAM-Rollen oder die IRSA-Konfiguration. Dadurch ist die Collector-Konfiguration auf jede Umgebung übertragbar — ob AWS lokal oder bei anderen Cloud-Anbietern.

Rotierende API-Schlüssel

Das regelmäßige Rotieren Ihrer API-Schlüssel reduziert das Risiko eines unbefugten Zugriffs. Sie sollten empfehlen, einen Rotationsplan zu erstellen, der den Sicherheitsrichtlinien Ihres Unternehmens entspricht.

Rotationsprozess

Gehen Sie wie folgt vor, um einen API-Schlüssel zu rotieren, ohne die Bereitstellung der Metriken zu unterbrechen:

Um einen API-Schlüssel zu rotieren
  1. Erstellen Sie neue (sekundäre) Anmeldeinformationen für den IAM-Benutzer:

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

    IAM erlaubt maximal 2 dienstspezifische Anmeldeinformationen pro IAM-Benutzer und Dienst. Löschen oder deaktivieren Sie alte Anmeldeinformationen, bevor Sie neue erstellen, wenn Sie dieses Limit erreicht haben.

  2. (Optional) Speichern Sie die neuen Anmeldeinformationen in AWS Secrets Manager für einen sicheren Abruf und eine automatische Rotation.

  3. Aktualisieren Sie Ihre OpenTelemetry Collector-Konfiguration oder -Anwendung, um den neuen API-Schlüssel zu verwenden.

  4. Setzen Sie die ursprünglichen Anmeldeinformationen auf inaktiv:

    aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  5. Stellen Sie sicher, dass die Bereitstellung der Metriken nicht beeinträchtigt wird. Senden Sie eine Testanfrage mit dem neuen Schlüssel und bestätigen Sie, dass Sie eine HTTP 200-Antwort erhalten. Sie können auch die vorhandenen CloudWatch Metriken Ihrer Anwendung überwachen, um sicherzustellen, dass weiterhin Daten eintreffen.

  6. Nachdem Sie die erfolgreiche Übertragung mit dem neuen Schlüssel bestätigt haben, löschen Sie die vorherigen Anmeldeinformationen:

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

Den Ablauf des Schlüssels überwachen

Verwenden Sie den Befehl https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/list-service-specific-credentials.html list-service-specific-credentials, um das Erstellungsdatum und den Status Ihrer vorhandenen API-Schlüssel zu überprüfen:

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

Die Antwort beinhaltet CreateDate und für jeden Berechtigungsnachweis. Status Verwenden Sie diese Informationen, um Schlüssel zu identifizieren, die bald ablaufen oder länger aktiv sind, als es Ihre Rotationsrichtlinie zulässt.

Reaktion auf einen kompromittierten API-Schlüssel

Wenn Sie den Verdacht haben, dass ein API-Schlüssel kompromittiert wurde, gehen Sie sofort wie folgt vor:

Um auf einen kompromittierten API-Schlüssel zu antworten
  1. Deaktivieren Sie den Schlüssel sofort, um eine weitere unbefugte Verwendung zu verhindern:

    aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  2. Überprüfen Sie die CloudTrail Protokolle, um den Umfang des unbefugten Zugriffs zu ermitteln. Unter Protokollierung der Verwendung des API-Schlüssels mit CloudTrail erfahren Sie, wie Sie die Überwachung der Verwendung von API-Schlüsseln aktivieren.

  3. Erstellen Sie einen Ersatzschlüssel gemäß dem unter beschriebenen RotationsprozessRotationsprozess.

  4. Löschen Sie den kompromittierten Schlüssel, nachdem der Ersatzschlüssel installiert wurde:

    aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234
  5. Fügen Sie eine Ablehnungsrichtlinie hinzu, wenn Sie während der Untersuchung sofort den gesamten Inhaber-Token-Zugriff für den IAM-Benutzer blockieren müssen:

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

Um diese Aktionen über die API ausführen zu können, müssen Sie sich mit AWS Anmeldeinformationen und nicht mit einem CloudWatch Metrics-API-Schlüssel authentifizieren. Bearer-Token können nur für die Erfassung von Metriken verwendet werden, nicht für IAM-Verwaltungsvorgänge.

Sie können auch die folgenden IAM-API-Operationen verwenden, um kompromittierte Schlüssel zu verwalten:

  • ResetServiceSpecificCredential— Setzen Sie den Schlüssel zurück, um ein neues Passwort zu generieren, ohne die Anmeldeinformationen zu löschen. Der Schlüssel darf nicht abgelaufen sein.

Bewährte Sicherheitsmethoden für API-Schlüssel

Folgen Sie diesen bewährten Methoden, um Ihre CloudWatch Metrics-API-Schlüssel zu schützen:

  • Betten Sie niemals API-Schlüssel in den Quellcode ein. Codieren Sie API-Schlüssel nicht fest in Anwendungscode, Collector-Konfigurationsdateien oder Versionskontrollsystemen. Verwenden Sie die bearertokenauth Erweiterung mit filename oder${env:VAR}, um Geheimnisse zur Laufzeit einzufügen.

  • Verwenden Sie einen Geheimnismanager. Speichern Sie API-Schlüssel in AWS Secrets Manager oder einer gleichwertigen Lösung zur Verwaltung von Geheimnissen. Dies ermöglicht eine zentrale Zugriffskontrolle, Auditprotokollierung und automatische Rotation.

  • Legen Sie für alle Schlüssel ein Ablaufdatum fest. Geben Sie beim Erstellen von API-Schlüsseln immer einen --credential-age-days Wert an. Verwenden Sie den iam:ServiceSpecificCredentialAgeDays IAM-Bedingungsschlüssel, um in Ihrer gesamten Organisation eine maximale Schlüssellebensdauer durchzusetzen.

  • Wenden Sie Berechtigungen mit geringsten Rechten an. Verwenden Sie die verwaltete CloudWatchAPIKeyAccess Richtlinie als Ausgangspunkt und schränken Sie sie bei Bedarf weiter ein.

  • Aktivieren Sie die CloudTrail Protokollierung. Überwachen Sie die Verwendung von API-Schlüsseln, indem Sie CloudTrail Datenereignisse für aktivierenAWS::CloudWatch::Dataset. Siehe Protokollierung der Verwendung des API-Schlüssels mit CloudTrail.

  • Überwachen Sie mit IAM Access Analyzer. Verwenden Sie IAM Access Analyzer, um ungenutzte Anmeldeinformationen und übermäßig freizügige Richtlinien zu identifizieren, die Ihren API-Schlüssel-IAM-Benutzern zugeordnet sind.

  • Wechseln Sie die Schlüssel regelmäßig. Erstellen Sie einen Rotationsplan und folgen Sie dem unter beschriebenen VerfahrenRotierende API-Schlüssel.

Protokollierung der Verwendung des API-Schlüssels mit CloudTrail

Sie können es verwenden AWS CloudTrail , um Datenereignisse für die OTLP-Erfassung von CloudWatch Metriken zu protokollieren. CloudWatch sendet AWS::CloudWatch::Dataset Datenereignisse für Aufrufe an den OTLP-Endpunkt aus, sodass Sie die Aktivitäten zur Erfassung von Metriken einschließlich der Verwendung von API-Schlüsseln überwachen können.

Anmerkung

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

Um die CloudTrail Protokollierung für die Verwendung von CloudWatch Metrics-API-Schlüsseln zu aktivieren
  1. Erstellen Sie einen Trail:

    aws cloudtrail create-trail \ --name cloudwatch-metrics-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. Konfigurieren Sie erweiterte Event-Selektoren zum Erfassen von CloudWatch Metrik-Schreib- (Ingestions-) Datenereignissen:

    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::Dataset"] }, { "Field": "readOnly", "Equals": ["false"] } ] }]'
  3. Starten Sie das Trail-Logging:

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

Der readOnly: false Filter beschränkt die Protokollierung auf write operations (PutMetricData), was alle OTLP-Ingestion-Aufrufe einschließt. Um die Verwendung von Bearer-Token unter diesen Ereignissen zu ermitteln, fragen Sie Ihre Trail-Logs ab (über Athena oder CloudTrail Lake) und filtern Sie nach dem IAM-Benutzernamen, der Ihrem API-Schlüssel zugeordnet ist (z. B.). cloudwatch-metrics-api-key-user Ereignisse, die sich aus der OTLP-Erfassung ergeben, sind in der Nutzlast des Ereignisses enthaltenAdditionalEventData.protocol. Sie können diese OTLP in Post-hoc-Abfragen verwenden, um sie von klassischen SDK-Aufrufen zu unterscheiden. PutMetricData