Comment puis-je résoudre les problèmes liés à Amazon S3 Batch Operations ?

Date de la dernière mise à jour : 16/12/2021

J'essaie de créer une tâche Amazon Simple Storage Service (Amazon S3) Batch Operations pour les objets stockés dans mon compartiment. Cependant, Amazon S3 ne cesse de renvoyer une erreur ou ma tâche de traitement par lots n'aboutit pas. Comment puis-je y remédier ?

Brève description

Si une tâche Amazon S3 Batch Operations rencontre un problème qui l'empêche de s'exécuter correctement, la tâche échoue. Par exemple, si S3 ne peut pas lire le manifeste spécifié ou si les objets de votre manifeste n'existent pas dans le compartiment spécifié, la tâche échoue. L'échec de la tâche génère un ou plusieurs codes et motifs d'échec. S3 Batch Operations stocke les codes d'échec et les motifs associés à la tâche afin que vous puissiez les consulter en demandant les détails de la tâche. Vous pouvez également consulter vos codes d'échec et les motifs dans le rapport d'exécution de la tâche.

Pour éviter que les tâches n'exécutent un grand nombre d'opérations infructueuses, Amazon S3 impose également un seuil d'échec à chaque tâche Batch Operations. Amazon S3 surveille le taux d'échec des tâches après l'exécution d'au moins 1 000 tâches. En cas de dépassement du taux d'échec de 50 %, la tâche échoue. Pour résoudre ce problème, examinez les causes des échecs et corrigez-les avant toute nouvelle tentative de soumission de la tâche.

Les raisons classiques pour lesquelles Amazon S3 Batch Operations échoue ou renvoie une erreur sont les suivantes :

  • Format de fichier manifeste (CSV ou JSON)
  • Le fichier manifeste spécifie plusieurs noms de compartiment ou contient plusieurs lignes d'en-tête
  • Autorisations pour lire le fichier manifeste
  • Région de la tâche par lots
  • Compartiment cible pour votre rapport d'inventaire S3
  • Politique d'approbation du rôle AWS Identity Access Management (IAM)
  • Autorisations de rôle IAM pour créer un traitement de tâche par lots
  • Accès du rôle IAM au compartiment source, au rapport d'inventaire S3 et au compartiment de destination
  • Politique de contrôle des services (SCP) d'AWS Organizations

Résolution

Format de fichier manifeste (CSV ou JSON)

Amazon S3 Batch Operations prend en charge les fichiers manifestes CSV et JSON (rapport d'inventaire S3). Lorsque vous créez une nouvelle tâche par lot dans Amazon S3, sélectionnez ou spécifiez le bon format de manifeste pour votre fichier manifeste :

  • Pour le rapport d'inventaire Amazon S3, veillez à utiliser un rapport au format CSV et spécifiez le fichier manifest.json associé au rapport d'inventaire.
  • Pour les fichiers CSV, chaque ligne de votre fichier manifeste doit inclure la clé d'objet manifeste, l'ETag et l'ID de version facultatif. Les clés d'objet doivent être codées en URL. Le manifeste doit soit inclure les ID de version pour tous les objets, soit omettre les ID de version pour tous les objets. Remarque : si les objets de votre manifeste se trouvent dans un compartiment versionné, vous devez spécifier les ID de version des objets. Autrement, la tâche par lots risque d'échouer. Elle peut aussi être appliquée à la dernière version de l'objet (au lieu de l'objet qui existait au moment de la création de la tâche).

Pour en savoir plus sur les fichiers et les formats de manifeste, consultez Spécification d'un manifeste.

Le fichier manifeste spécifie plusieurs noms de compartiment ou contient plusieurs lignes d'en-tête

Grâce à S3 Batch Operations, vous pouvez copier des objets, modifier la date de conservation du verrouillage des objets ou modifier l'état de conservation juridique du verrouillage des objets. Ces trois opérations de tâches par lots exigent que tous les objets énumérés dans le fichier manifeste existent également dans le même compartiment. À défaut, vous recevez l'erreur suivante :

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

Si vous effectuez l'une de ces trois opérations de tâches par lots, assurez-vous que votre fichier manifeste ne spécifie qu'un seul nom de compartiment. De plus, le fichier manifeste ne doit contenir aucune ligne d'en-tête. Par exemple, si votre fichier manifeste ressemble à ce modèle (où il y a plusieurs lignes d'en-tête), Amazon S3 renverra une erreur :

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

Autorisations pour lire le fichier manifeste

Vérifiez que le rôle IAM que vous utilisez pour créer la tâche S3 Batch Operations dispose des autorisations GetObject lui permettant de lire le fichier manifeste. Pour ce faire, vérifiez les métadonnées de l'objet. Recherchez toute incohérence d'accès avec la propriété de l'objet S3 ou toute clé AWS KMS non prise en charge qui est utilisée pour chiffrer le fichier manifeste.

Si vous n'êtes pas autorisé à lire le fichier manifeste, les erreurs suivantes s'affichent lorsque vous essayez de créer une tâche S3 Batch Operations.

AWS CLI :

Reason for failure
Reading the manifest is forbidden: AccessDenied

Console Amazon S3 :

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

Remarque : S3 Batch Operations prend en charge les rapports d'inventaire CSV chiffrés par AWS KMS. S3 Batch Operations ne prend pas en charge les fichiers manifestes CSV chiffrés par AWS KMS. Pour en savoir plus, consultez la section Configuration de l'inventaire ou Spécification d'un manifeste.

Région de la tâche par lots

Les tâches de copie des S3 Batch Operations doivent être créées dans la même région AWS que le compartiment de destination vers lequel vous souhaitez copier vos objets. Par conséquent, assurez-vous de sélectionner la même région que votre compartiment de destination lorsque vous créez votre tâche par lots. Par exemple, si votre compartiment de destination se trouve dans la région us-west-2, sélectionnez us-west-2 comme région pour votre tâche par lots.

Compartiment cible pour votre rapport d'inventaire S3

Confirmez que le compartiment cible pour votre rapport d'inventaire S3 existe. Vérifiez également que la politique de compartiment S3 ne rejette pas l'action s3:PutObject. Si le rapport est livré à un autre compte AWS, veuillez confirmer que le compartiment cible autorise le rôle IAM à exécuter l'action s3:PutObject.

Politique d'approbation du rôle IAM

Remarque : assurez-vous que vous spécifiez un rôle IAM et non un utilisateur IAM.

Contrairement à un utilisateur IAM, un rôle IAM possède une politique d'approbation qui définit les conditions qui doivent être remplies pour que les autres principaux puissent l'assumer. Pour permettre au principal du service S3 Batch Operations d'assumer le rôle IAM, attachez une politique d'approbation au rôle.

L'exemple de politique d'approbation suivant délègue l'accès à Amazon S3, tout en réduisant les risques associés à l'escalade de privilèges :

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

Autorisations IAM pour la création d'une tâche par lots

Avant de créer et d'exécuter des tâches S3 Batch Operations, accordez les autorisations requises. Si votre rôle IAM ne dispose pas des autorisations requises pour exécuter la tâche S3 Batch Operations, celle-ci échoue.

Pour créer une tâche S3 Batch Operations, les autorisations s3:CreateJob sont requises. La même entité qui crée le travail doit également disposer des autorisations iam:PassRole pour transmettre le rôle IAM spécifié pour la tâche par lots. Pour en savoir plus sur la spécification des ressources IAM, consultez la politique IAM JSON, éléments de ressources.

Accès du rôle IAM au compartiment source, au rapport d'inventaire S3 et au compartiment de destination

Vérifiez que le rôle IAM que vous utilisez pour les S3 Batch Operations possède les autorisations requises pour effectuer la tâche par lots. Par exemple, la politique IAM pour l'opération de copie ressemble au modèle suivant :

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

Pour en savoir plus, consultez la section Octroi d'autorisations pour Amazon S3 Batch Operations.

Politique de contrôle des services (SCP) d'AWS Organizations

Si vous utilisez des organisations AWS, veuillez confirmer qu'il n'y a pas de déclarations de rejet qui pourraient rejeter l'accès à Amazon S3. Par exemple, si votre politique de contrôle des services refuse explicitement toutes les actions S3, vous risquez d'obtenir une erreur d'Accès rejeté lorsque vous créez une tâche par lot.

Vous trouverez ci-après un exemple de politique qui rejette explicitement toutes les actions S3 :

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

Si vous avez l'intention d'appliquer une politique restrictive, vous pouvez autoriser le rôle IAM que S3 Batch Operations utilisera pour effectuer l'opération. Par exemple :

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

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?