Wie kann ich Probleme mit Amazon-S3-Batchvorgängen beheben?

Letzte Aktualisierung: 16.12.2021

Ich versuche, einen Amazon-Simple-Storage-Service-Batchvorgangsauftrag für Objekte zu erstellen, die in meinem Bucket gespeichert sind. Amazon S3 gibt jedoch immer wieder einen Fehler zurück oder mein Batchauftrag schlägt immer wieder fehl. Wie kann ich dies beheben?

Kurzbeschreibung

Wenn ein Amazon-S3-Batchvorgangsauftrag auf ein Problem stößt, das ihn daran hindert, erfolgreich ausgeführt zu werden, schlägt der Auftrag fehl. Wenn S3 beispielsweise das angegebene Manifest nicht lesen kann oder Objekte in Ihrem Manifest nicht im angegebenen Bucket vorhanden sind, schlägt der Auftrag fehl. Ein fehlgeschlagener Auftrag generiert einen oder mehrere Fehlercodes und Gründe. S3-Batch-Operations speichert die Fehlercodes und Gründe mit dem Job, sodass Sie sie anzeigen können, indem Sie die Details des Jobs anfordern. Sie können Ihre Fehlercodes und Gründe auch im Abschlussbericht für den Auftrag überprüfen.

Um zu verhindern, dass Aufträge eine große Anzahl von erfolglosen Vorgängen ausführen, legt Amazon S3 auch für jeden Batch-Operations-Auftrag einen Schwellenwert für den Aufgabenausfall fest. Amazon S3 überwacht die Aufgabenausfallrate, nachdem mindestens 1.000 Aufgaben ausgeführt wurden. Wenn ein Auftrag die Ausfallrate von 50 % übersteigt, schlägt der Auftrag fehl. Um diesen Fehler zu beheben, überprüfen Sie die Fehlerursachen und korrigieren Sie sie, bevor Sie den Auftrag erneut einreichen.

Im Folgenden finden Sie einige häufige Gründe, warum Amazon S3 Batch Operations fehlschlägt oder einen Fehler zurückgibt:

  • Manifestdateiformat (CSV oder JSON)
  • Manifestdatei gibt mehrere Bucket-Namen an oder enthält mehrere Kopfzeilen
  • Berechtigungen zum Lesen der Manifestdatei
  • Bereich für Batch-Auftrag
  • Ziel-Bucket für Ihren S3-Inventarbericht
  • Vertrauensrichtlinie der AWS Identity Access Management (IAM)-Rolle
  • IAM-Rollenberechtigungen zum Erstellen eines Batch-Auftrags
  • IAM-Rollenzugriff auf Quell-Bucket, S3-Inventarbericht und Ziel-Bucket
  • Service-Kontrollrichtlinien für AWS Organizations (SCP)

Auflösung

Manifestdateiformat (CSV oder JSON)

Amazon S3 Batch Operations unterstützt CSV- und JSON-Manifestdateien (S3-Inventarbericht). Wenn Sie einen neuen Batch-Auftrag in Amazon S3 erstellen, wählen oder geben Sie das richtige Manifestformat für Ihre Manifestdatei an:

  • Verwenden Sie für den Amazon S3-Inventarbericht unbedingt einen CSV-formatierten Bericht und geben Sie die manifest.json-Datei an, die mit dem Inventarbericht verknüpft ist.
  • Bei CSV-Dateien muss jede Zeile in Ihrer Manifestdatei den Manifestobjektschlüssel, ETag und die optionale Versions-ID enthalten. Objektschlüssel müssen URL-codiert sein. Das Manifest muss entweder Versions-IDs für alle Objekte enthalten oder Versions-IDs für alle Objekte weglassen. Hinweis: Wenn sich die Objekte in Ihrem Manifest in einem versionierten Bucket befinden, müssen Sie die Versions-IDs für die Objekte angeben. Andernfalls schlägt der Batch-Auftrag möglicherweise fehl. Oder der Batch-Auftrag könnte auf die neueste Version des Objekts angewendet werden (anstelle des Objekts, das bei der Erstellung des Jobs existierte).

Weitere Informationen zu Manifestdateien und -formaten finden Sie unter Manifest angeben.

Manifestdatei gibt mehrere Bucket-Namen an oder enthält mehrere Kopfzeilen

Mit S3 Batch Operations können Sie Objekte kopieren, das Aufbewahrungsdatum der Objektsperre von Objekten ändern oder den Status der rechtlichen Aufbewahrung der Objektsperre ändern. Diese drei Batch-Auftragsvorgänge erfordern, dass alle in der Manifestdatei aufgelisteten Objekte auch im selben Bucket vorhanden sind. Andernfalls wird die folgende Fehlermeldung angezeigt:

Reasons for failure:
Cannot have more than 1 bucket per Job. <Job ID>

Wenn Sie einen dieser drei Batch-Auftragsvorgänge ausführen, stellen Sie sicher, dass Ihre Manifestdatei nur einen Bucket-Namen angibt. Darüber hinaus darf die Manifestdatei keine Kopfzeilen enthalten. Wenn Ihre Manifestdatei beispielsweise so aussieht (wo es mehrere Kopfzeilen gibt), gibt Amazon S3 einen Fehler zurück:

bucket,key
my-batch-bucket,object001.txt
my-batch-bucket,object002.txt
my-batch-bucket,object003.txt
my-batch-bucket,object004.txt

Berechtigungen zum Lesen der Manifestdatei

Stellen Sie sicher, dass die IAM-Rolle, die Sie zum Erstellen des S3-Batchoperations-Jobs verwenden, über GetObject-Berechtigungen verfügt, damit sie die Manifestdatei lesen kann. Sie können dies tun, indem Sie die Metadaten des Objekts überprüfen. Suchen Sie nach Unstimmigkeiten beim Zugriff mit S3 Object Ownership oder nicht unterstützten AWS-KMS-Schlüsseln, die zum Verschlüsseln der Manifestdatei verwendet werden.

Wenn Sie nicht über die Berechtigung zum Lesen der Manifestdatei verfügen, werden die folgenden Fehler angezeigt, wenn Sie versuchen, einen S3-Batch-Operations-Auftrag zu erstellen.

AWS CLI:

Reason for failure
Reading the manifest is forbidden: AccessDenied

Amazon-S3-Konsole:

Warning: Unable to get the manifest object's ETag. Specify a different object to continue

Hinweis: S3 Batch Operations unterstützt CSV-Inventarberichte, die mit AWS KMS verschlüsselt sind. S3 Batch Operations unterstützt keine CSV-Manifestdateien, die mit AWS KMS verschlüsselt sind. Weitere Informationen finden Sie unter Konfigurieren des Inventars oder Festlegen eines Manifests.

Bereich für Batch-Auftrag

S3-Batch-Operations-Kopieraufträge müssen in derselben AWS-Region wie der Ziel-Bucket erstellt werden, in den Sie Ihre Objekte kopieren möchten. Stellen Sie daher sicher, dass Sie bei der Erstellung Ihres Stapelverarbeitungsauftrags dieselbe Region wie Ihr Ziel-Bucket auswählen. Wenn sich Ihr Ziel-Bucket beispielsweise in der Region us-west-2 befindet, wählen Sie us-west-2 als Region für Ihren Stapelverarbeitungsauftrag aus.

Ziel-Bucket für Ihren S3-Inventarbericht

Stellen Sie sicher, dass der Ziel-Bucket für Ihren S3-Inventarbericht Stellen Sie außerdem sicher, dass die S3-Bucket-Richtlinie die Aktion S3:PutObject nicht verweigert. Wenn der Bericht an ein anderes AWS-Konto zugestellt wird, überprüfen Sie, ob der Ziel-Bucket es der IAM-Rolle ermöglicht, die Aktion s3:PutObject auszuführen.

Vertrauensrichtlinie der IAM-Rolle

Hinweis: Stellen Sie sicher, dass Sie eine IAM-Rolle und keinen IAM-Benutzer angeben.

Im Gegensatz zu einem IAM-Benutzer verfügt eine IAM-Rolle über eine Vertrauensrichtlinie, die definiert, welche Bedingungen erfüllt sein müssen, damit andere Hauptbenutzer sie übernehmen können. Damit der S3-Batch-Operations-Dienstprinzipal die IAM-Rolle übernehmen kann, fügen Sie der Rolle eine Vertrauensrichtlinie hinzu.

Das folgende Beispiel einer Vertrauensrichtlinie delegiert den Zugriff auf Amazon S3 und reduziert gleichzeitig alle Risiken im Zusammenhang mit der Berechtigungseskalation:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"batchoperations.s3.amazonaws.com"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}

IAM-Berechtigungen zum Erstellen eines Batchauftrags

Erteilen Sie vor dem Erstellen und Ausführen von S3-Batch Operations-Aufträgen die erforderlichen Berechtigungen. Wenn Ihrer IAM-Rolle die erforderlichen Berechtigungen zum Ausführen des S3-Stapelverarbeitungsauftrags fehlen, schlägt der Batchauftrag fehl.

Um einen S3-Auftrag für Batchoperationen zu erstellen, sind s3:CreateJob-Berechtigungen erforderlich. Dieselbe Entität, die den Job erstellt, muss auch über iam:PassRole-Berechtigungen verfügen, um die IAM-Rolle zu übergeben, die für den Batchauftrag angegeben ist. Weitere Informationen zum Angeben von IAM-Ressourcen finden Sie unter IAM-JSON-Richtlinie, Resource-Elemente.

IAM-Rollenzugriff auf Quell-Bucket, S3-Inventarbericht und Ziel-Bucket

Stellen Sie sicher, dass die IAM-Rolle, die Sie für S3-Stapelvorgänge verwenden, über die erforderlichen Berechtigungen zum Ausführen des Batchauftrags verfügt. Die IAM-Richtlinie für den Kopiervorgang sieht beispielsweise so aus:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::{{SourceBucket}}",
                "arn:aws:s3:::{{SourceBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::{{ManifestBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::{{ReportBucket}}/*"
            ]
        }
    ]
}

Weitere Informationen finden Sie unter Erteilen von Berechtigungen für Amazon S3 Batch Operations.

Service-Kontrollrichtlinien für AWS Organizations (SCP)

Wenn Sie AWS Organizations verwenden, vergewissern Sie sich, dass es keine Deny-Anweisungen gibt, die den Zugriff auf Amazon S3 verweigern könnten. Wenn Ihre Servicekontrollrichtlinie beispielsweise explizit alle S3-Aktionen verweigert, wird möglicherweise beim Erstellen eines Batchauftrags ein Fehler Zugriff verweigert angezeigt.

Hier ist eine Beispielrichtlinie, die explizit alle S3-Aktionen verweigert:

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

Wenn Sie beabsichtigen, eine restriktive Richtlinie anzuwenden, können Sie die IAM-Rolle zulassen, die die S3 Batch Operations zur Ausführung des Vorgangs verwenden. Beispiel:

{
    "Version": "2012-10-17",
    "Statement": [
        {   
            "Principal":"*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
            "StringNotLike": {
                "aws:userId": [
                    "AROAEXAMPLEID:*",
                    "AIDAEXAMPLEID",
                    "111111111111"
                ]
            }
        }
        }
    ]
}

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?