Direkt zum Inhalt

Wie behebe ich eine fehlgeschlagene Exportaufgabe in CloudWatch Logs?

Lesedauer: 6 Minute
0

Meine Exportaufgabe schlägt fehl, wenn ich versuche, Protokolldaten aus Amazon CloudWatch Logs in einen Amazon Simple Storage Service (Amazon S3)-Bucket zu exportieren, obwohl der Amazon-S3-Bucket existiert.

Kurzbeschreibung

Du kannst eine Exportaufgabe für einen S3-Bucket innerhalb desselben AWS-Kontos oder eines anderen Kontos konfigurieren.

Um Protokolldaten aus CloudWatch Logs in einen Bucket zu exportieren, benötigt der Ziel-Bucket die richtigen Berechtigungen und muss sich in derselben AWS-Region wie die Protokollgruppe befinden.

Wenn die Bucket-Richtlinie, die AWS Identity and Access Management (IAM)-Berechtigungen oder die Verschlüsselungseinstellungen nicht richtig konfiguriert sind, schlägt die Exportaufgabe fehl und du erhältst möglicherweise eine der folgenden Fehlermeldungen:

  • „Could not create export task. GetBucketAcl call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation.“
  • „Could not create export task. PutObject call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation.“
  • „Unable to create export task. Resource limit exceeded.“
  • „PutObject call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation. This may be a result of a KMS key or bucket encryption misconfiguration.“
  • „GetBucketAcl call on the given bucket failed. Please check if the specified Amazon S3 Bucket is in the same AWS region as CloudWatch Logs.“

Lösung

Die erforderliche Berechtigungsrichtlinie für die Exportaufgabe hinzufügen

Um eine Exportaufgabe auszuführen, benötigt der/die IAM-Benutzer:in, die IAM-Gruppe oder -Rolle, die die Exportaufgaben-API aufruft, die s3:PutObject-Berechtigungsrichtlinie. Wenn der Ziel-Bucket mit SSE-KMS verschlüsselt ist, beziehe auch die AWS Key Management Service (AWS KMS)-Richtlinie mit ein.

Füge deinen IAM-Benutzern, -Gruppen oder -Rollen die folgende Berechtigungsrichtlinie hinzu:

{
  "Version": "2012-10-17",
  "Statement": [
      {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": arn:aws:s3:::MY-EXPORTED-LOGS/*
    },
    {
      "Effect": "Allow",
      "Action": [
      "kms:GenerateDataKey",
      "kms:Decrypt"
       ],
    "Resource": ARN_OF_KMS_KEY
    }
  ]
}

Hinweis: Ersetze MY-EXPORTED-LOGS durch den Namen deines Ziel-Buckets und ersetze ARN_OF_KMS_KEY durch den Amazon-Ressourcennamen (ARN) deines AWS-KMS-Schlüssels.

Füge die verwaltete AmazonS3ReadOnlyAccess-Richtlinie an die IAM-Rolle an, die die Exportaufgabe aufruft. Füge auch eine Richtlinie mit den folgenden CloudWatch-Logs-Berechtigungen an:

  • logs:CreateExportTask
  • logs:CancelExportTask
  • logs:DescribeExportTasks
  • logs:DescribeLogStreams
  • logs:DescribeLogGroups

Berechtigungen für den Ziel-Bucket erteilen

Standardmäßig sind alle Buckets und Objekte privat. Nur der/die Ressourceneigentümer:in oder das Konto, das den Bucket erstellt hat, kann auf den Bucket und die Objekte im Bucket zugreifen. Bei Bedarf kann der/die Ressourceneigentümer:in eine Zugriffsrichtlinie schreiben, um anderen Ressourcen und Benutzern Zugriffsberechtigungen zu erteilen.

Wenn du eine Richtlinie festlegst, beziehe eine zufällig generierte Zeichenfolge als Präfix für den Bucket mit ein. Dadurch können nur die vorgesehenen Protokollstreams in den Bucket exportiert werden.

Gehe wie folgt vor, um Berechtigungen für den Ziel-Bucket zu erteilen:

  1. Öffne die S3-Konsole.
  2. Wähle den Bucket aus, in den du die Protokolle exportieren möchtest.
  3. Wähle Permissions (Berechtigungen) und dann Bucket policy (Bucket-Richtlinie) aus.
  4. Gib im Bucket Policy Editor (Bucket-Richtlinieneditor) die folgende Richtlinie ein:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": "s3:GetBucketAcl",
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::exammple-s3-bucket",
          "Principal": {
            "Service": "logs.example-region.amazonaws.com"
          },
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": [
                "AccountId1",
                "AccountId2",
                ...
              ]
            },
            "ArnLike": {
              "aws:SourceArn": [
                "arn:aws:logs:Region:AccountId1:log-group:",
                "arn:aws:logs:Region:AccountId2:log-group:",
                ...
              ]
            }
          }
        },
        {
          "Action": "s3:PutObject",
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::example-s3-bucket/",
          "Principal": {
            "Service": "logs.example-region.amazonaws.com"
          },
          "Condition": {
            "StringEquals": {
              "s3:x-amz-acl": "bucket-owner-full-control",
              "aws:SourceAccount": [
                "AccountId1",
                "AccountId2",
                ...
              ]
            },
            "ArnLike": {
              "aws:SourceArn": [
                "arn:aws:logs:Region:AccountId1:log-group:",
                "arn:aws:logs:Region:AccountId2:log-group:",
                ...
              ]
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name"
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::example-s3-bucket/",
          "Condition": {
            "StringEquals": {
              "s3:x-amz-acl": "bucket-owner-full-control"
            }
          }
        }
      ]
    }
    Hinweis: Ersetze example-s3-bucket durch den Namen deines Buckets. Ersetze auch example-region durch den erforderlichen Region-Endpunkt für den Prinzipal-Parameter. Die vorherige Richtlinie wird als Zugriffsrichtlinie für den Bucket festgelegt. Diese Richtlinie ermöglicht es CloudWatch Logs, Protokolldaten in den Bucket zu exportieren, und der Bucket-Eigentümer hat volle Berechtigungen für alle exportierten Objekte.
  5. Wähle Save (Speichern) aus.

Eine Aufgabe in einen mit SSE-KMS verschlüsselten Bucket exportieren

Den AWS-KMS-Schlüssel erstellen und konfigurieren

Gehe wie folgt vor:

  1. Öffne die AWS-KMS-Konsole. Um die Region zu ändern, verwende den Selektor Region in der Navigationsleiste.
  2. Wähle im Navigationsbereich Customer managed keys (Kundenverwaltete Schlüssel) aus und wähle dann Create Key (Schlüssel erstellen) aus.
    Wähle für Key type (Schlüsseltyp) die Option Symmetric (Symmetrisch) aus.
    Wähle für Key usage (Schlüsselnutzung) die Option Encrypt and decrypt (Verschlüsseln und Entschlüsseln) aus.
  3. Wähle Next (Weiter) aus.
  4. Gib unter Add labels (Beschriftungen hinzufügen) einen Alias für den Schlüssel ein. Füge optional eine Beschreibung oder Tags hinzu und wähle dann Next (Weiter).
  5. Wähle unter Key administrators (Schlüsseladministratoren) aus, wer diesen Schlüssel verwalten darf, und klicke dann zweimal auf Next (Weiter), um zur Überprüfungsseite zu springen.
  6. Überprüfe die Einstellungen und wähle dann Finish (Beenden).
  7. Gehe zur Seite Customer managed keys (Kundenverwaltete Schlüssel) und wähle dann den Namen des Schlüssels aus, den du zuvor erstellt hast.
  8. Wähle die Registerkarte Key policy (Schlüsselrichtlinie) und dann Switch to policy view (Zur Richtlinienansicht) aus.
  9. Wähle im Abschnitt Key policy (Schlüsselrichtlinie) die Option Edit (Bearbeiten) aus und füge dann die folgende Anweisung zur Anweisungsliste für Schlüsselrichtlinien hinzu:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Allow CWL Service Principal usage",
          "Effect": "Allow",
          "Principal": {
            "Service": "logs.EXAMPLE-REGION.amazonaws.com"
          },
          "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
          ],
          "Resource": ""
        },
        {
          "Sid": "Enable IAM User Permissions",
          "Effect": "Allow",
          "Principal": {
            "AWS": EXAMPLE-ACCOUNT-ARN
          },
          "Action": [
            "kms:GetKeyPolicy",
            "kms:PutKeyPolicy",
            "kms:DescribeKey",
            "kms:CreateAlias",
            "kms:ScheduleKeyDeletion",
            "kms:Decrypt"
          ],
          "Resource": "*"
        },
        {
          "Sid": "Enable IAM Role Permissions",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name"
          },
          "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
          ],
          "Resource": ARN_OF_KMS_KEY
        }
      ]
    }
    Hinweis: Ersetze EXAMPLE-REGION durch die Region deiner Protokolle und EXAMPLE-ACCOUNT-ARN durch den Konto-ARN, dem der AWS-KMS-Schlüssel gehört. Ersetze create_export_task_caller_account durch die Konto-ID des Aufrufers und role_name durch den Namen der IAM-Rolle. Ersetze auch ARN_OF_KMS_KEY durch den ARN deines AWS-KMS-Schlüssels.
  10. Wähle Save changes (Änderungen speichern).

Die Bucket-Verschlüsselung konfigurieren

Gehe wie folgt vor:

  1. Öffne dieAmazon-S3-Konsole.
  2. Wähle den Bucket aus, in den du Protokolle exportieren möchtest.
  3. Wähle die Registerkarte Properties (Eigenschaften). Wähle dann unter Default Encryption (Standardverschlüsselung) die Option Edit (Bearbeiten) aus.
  4. Wähle unter Server-side Encryption (Serverseitige Verschlüsselung) die Option Enable (Aktivieren) aus.
  5. Wähle unter Encryption type (Verschlüsselungstyp) die Option AWS Key Management Service key (SSE-KMS) (AWS Key Management Service-Schlüssel (SSE-KMS)) aus.
  6. Wähle Choose from your AWS KMS keys (Aus Ihren AWS-KMS-Schlüsseln wählen) aus und suche den Schlüssel, den du erstellt hast.
  7. Wähle für Bucket key (Bucket-Schlüssel) die Option Enable (Aktivieren) aus.
  8. Wähle Save changes (Änderungen speichern).
    Hinweis: CloudWatch Logs ermöglicht jeweils eine Exportaufgabe pro Konto und Region. Wenn du die Fehlermeldung „Unable to create export task. Resource limit exceeded“ erhältst, warte, bis deine aktuelle Exportaufgabe abgeschlossen ist, bevor du eine neue startest.

Ähnliche Informationen

Export log data to Amazon S3 using the console (Protokolldaten über die Konsole nach Amazon S3 exportieren)

AWS OFFICIALAktualisiert vor 6 Monaten