Ich kann keinen Amazon-S3-Lagerbestandsbericht erstellen. Woran liegt das?

Letzte Aktualisierung: 19.11.2021

Ich habe den Lagerbestandsbericht Amazon Simple Storage Service (Amazon S3) konfiguriert, aber er wird nicht zugestellt und ich erhalte den Fehler „Zugriff verweigert“. Warum generiert meine Konfiguration des Lagerbestandsberichts die Berichte nicht und wie löse ich das Problem?

Kurzbeschreibung

Wenn Sie die Amazon-S3-Inventarkonfiguration erstellt haben, müssen Sie über die richtigen Bucket-Richtlinien und Berechtigungen verfügen, um den Fehler Access Denied (Zugriff verweigert) zu vermeiden:

Access denied Inventory export for 2021-02-19 failed because S3 doesn’t have access to the destination bucket or KMS key. Ask the owner of the destination bucket or KMS key to grant the necessary access and then try again.

Um einen Amazon-S3-Lagerbestandsbericht zu erstellen, müssen die folgenden Anforderungen erfüllt sein:

  • Ihr Ziel-Bucket muss es dem Quell-Bucket ermöglichen, den Amazon-S3-Lagerbestandsbericht in den Ziel-Bucket hochzuladen.
  • Ihr Ziel-Bucket muss sich in derselben AWS-Region wie der Quell-Bucket befinden (in dem Sie das Amazon S3-Inventar eingerichtet haben).
  • Ihre Ziel-Bucket-Richtlinie muss Zugriff auf den AWS-KMS-Schlüssel gewähren, der zum Verschlüsseln der Lagerbestandsberichtsdatei verwendet wurde.

Hinweis: Es kann bis zu 48 Stunden dauern, bis der erste Lagerbestandsbericht geliefert wird.

Auflösung

Dem Quell-Bucket erlauben, den Amazon-S3-Inventarbericht in den Ziel-Bucket hochzuladen

Um den Inventarbericht zu generieren und in den Ziel-Bucket hochzuladen, muss Ihre Bucket-Richtlinie das Hochladen des Quell-Buckets in den Ziel-Bucket ermöglichen.

Beispiel:

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId",
  "Statement": [
    {
      "Sid":"InventoryAndAnalyticsExamplePolicy",
      "Effect":"Allow",
      "Principal": {"Service": "s3.amazonaws.com"},
      "Action":"s3:PutObject",
      "Resource":["arn:aws:s3:::destinationbucket/*"],
      "Condition": {
          "ArnLike": {
              "aws:SourceArn": "arn:aws:s3:::sourcebucket"
           },
         "StringEquals": {
             "aws:SourceAccount": "123456789012",
             "s3:x-amz-acl": "bucket-owner-full-control"
          }
       }
    }
  ]
}

Überprüfen Sie daher Ihre Ziel-Bucket-Richtlinie auf Zugriffsverweigerungen. Der Bucket kann keine Zugriffsverweigerungen enthalten, die verhindern, dass Amazon S3 (s3.amazonaws.com) ein PutObject im Ziel-Bucket ausführt. Eine explizite Zugriffsverweigerung hat Vorrang vor allen Erlauben-Anweisungen. Schließen Sie den Amazon-S3-Dienst (s3.amazonaws.com) von jeder Zugriffsverweigerung aus, die sich auf eine PutObject-Aktion auswirken könnte.

Hier ist ein Beispiel für eine Bucket-Richtlinie, die den Zugriff auf Amazon S3 (s3.amazonaws.com) verweigert und nur den Zugriff auf einen bestimmten IP-Bereich erlaubt:

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::destinationbucket",
               "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
  "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      }
    }
  ]
}

Aktualisieren Sie Ihre Richtlinie wie folgt, um die vorherige Bucket-Richtlinie zu korrigieren:

{
"Version": "2012-10-17",  "Id": "S3PolicyId",
 "Statement": [
    {
      "Sid": "IPAllow",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::destinationbucket",
        "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "54.240.143.0/24"
        },
        "ArnNotLike": {
          "aws:SourceArn": "arn:aws:s3:::sourcebucket"
        }
      },
      "Principal": "*"
    },
    {
      "Sid": "InventoryAndAnalyticsExamplePolicy",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::sourcebucket"
        },
        "StringEquals": {
          "aws:SourceAccount": "123456789012",
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      },
      "Principal": {
        "AWS": [
          "s3.amazonaws.com"
        ]
      }
    }
  ]
}

Bestätigen Sie, dass sich Ihr Ziel-Bucket in derselben AWS-Region wie der Quell-Bucket befindet

Führen Sie die folgenden Schritte aus, um zu überprüfen, ob sich Ihr Ziel-Bucket in derselben AWS-Region wie Ihr Quell-Bucket befindet:

1.    Melden Sie sich bei der AWS-Managementkonsole an.

2.    Öffnen Sie die Amazon-S3-Konsole.

3.    Überprüfen Sie die Spalte AWS-Region in Ihrer Bucket-Liste, um sicherzustellen, dass sich Ihr Ziel-Bucket in derselben AWS-Region wie der Quell-Bucket befindet. (Im Quell-Bucket richten Sie das Amazon-S3-Inventar ein.)

4.    (Optional) Wenn sich Ihr Quell- und Ziel-Bucket in verschiedenen Regionen befindet, erstellen oder wählen Sie einen neuen Bucket aus. Dies liegt daran, dass sich der Quell-Bucket und der Ziel-Bucket in derselben AWS-Region befinden müssen.

Hinweis: Amazon S3 erstellt Buckets in bestimmten Regionen. Nachdem ein Bucket in einer bestimmten Region erstellt wurde, verbleiben alle Objekte, die zum Bucket gehören, in dieser Region (es sei denn, sie werden explizit übertragen). Weitere Informationen zur Verwendung von Amazon-S3-Buckets und AWS-Regionen finden Sie unter Buckets overview (Bucket-Übersicht).

Gewähren des Zugriffs auf den AWS-KMS-Schlüssel, der zum Verschlüsseln der Lagerbestandsberichtsdatei verwendet wurde

Wenn Sie Ihren Amazon-S3-Bucket mit einem AWS-KMS-Schlüssel verschlüsselt haben, stellen Sie sicher, dass Sie Amazon S3 Zugriff auf Ihren KMS-Schlüssel gewähren.

Führen Sie die folgenden Schritte aus, um Berechtigungen für die Verschlüsselung mit Ihrem AWS-KMS-Schlüssel zu erteilen:

1.    Melden Sie sich bei der AWS-Managementkonsole an.

Hinweis: Stellen Sie sicher, dass Sie sich mit dem AWS-Konto anmelden, das den AWS-KMS-Schlüssel besitzt.

2.    Öffnen Sie die AWS-KMS-Konsole.

3.    Wählen Sie im linken Navigationsbereich Customer managed keys (Vom Kunden verwaltete Schlüssel) aus.

4.    Wählen Sie unter Customer managed keys (Von Kunden verwaltete Schlüssel) den AWS-KMS-Schlüssel aus, den Sie zum Verschlüsseln der Lagerbestandsberichtsdatei verwenden möchten.

5.    Wählen Sie unter Key policy (Schlüsselrichtlinie) die Option Switch to policy view (Zur Richtlinienansicht wechseln).

6 Um die Schlüsselrichtlinie zu aktualisieren, wählen Sie Edit (Bearbeiten).

7.    Fügen Sie unter Edit key policy (Schlüsselrichtlinie bearbeiten) die folgende Schlüsselrichtlinie zur vorhandenen Schlüsselrichtlinie hinzu.

{
    "Sid": "Allow Amazon S3 use of the KMS key",
    "Effect": "Allow",
    "Principal": {
        "Service": "s3.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition":{
      "StringEquals":{
         "aws:SourceAccount":"source-account-id"
     },
      "ArnLike":{
        "aws:SourceARN": "arn:aws:s3:::source-bucket-name"
     }
   }
}

8.    Wählen Sie Save changes (Änderungen speichern).

Überprüfung der Serverzugriffsprotokolle und des CloudTrail-Verlaufs

Überprüfen Sie Ihre Serverzugriffsprotokolle, um festzustellen, ob während der Zeit, in der Ihr Lagerbestandsbericht nicht mehr zugestellt wurde, Änderungen an Ihren Bucket-Richtlinien vorgenommen wurden. Das Amazon-S3-Serverzugriffsprotokollformat sieht folgendermaßen aus:

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.PUT.BUCKETPOLICY - "GET /awsexamplebucket1?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1

Suchen Sie nach einem der folgenden Einträge, die darauf hinweisen, dass Änderungen an Ihrer Bucket-Richtlinie vorgenommen wurden:

REST.PUT.BUCKETPOLICY

Sie können auch in Ihrem AWS-CloudTrail-Ereignisverlauf nach der Aktion PutBucketPolicy suchen, um zu überprüfen, ob kürzlich Änderungen vorgenommen wurden. Beachten Sie, dass der CloudTrail-Ereignisverlauf nur ein Fenster von 90 Tagen bietet. Wenn die Aktion PutBucketPolicy vor mehr als 90 Tagen ausgeführt wurde, müssen Sie die CloudTrail-Protokolle direkt in Amazon S3 abfragen. Informationen zu den Amazon-S3-API-Aufrufen, die von CloudTrail erfasst werden, finden Sie unter Amazon-S3-Informationen in CloudTrail auf der GitHub-Website von AWS Docs.