J'ai configuré la réplication entre mes compartiments, mais la réplication de nouveaux objets ne se fait pas. Comment puis-je résoudre ce problème ?

Date de la dernière mise à jour : 30/03/2022

J'ai configuré la réplication entre régions (CRR) ou la réplication de même Région (SRR) entre mes compartiments Amazon Simple Storage Service (Amazon S3). Cependant, les objets ne sont pas répliqués dans le compartiment de destination. Comment puis-je résoudre ce problème ?

Solution

Pour résoudre le problème des objets qui ne se répliquent pas dans le compartiment de destination, vérifiez les différents types d'autorisations pour votre compartiment. Vérifiez également les paramètres d'accès public et les paramètres de propriété du compartiment.

Conseil : assurez-vous de tester la réplication après chaque modification de configuration en chargeant un objet dans le compartiment source. Une bonne pratique consiste à effectuer une seule modification de configuration à la fois pour identifier tout problème de configuration de la réplication.

Après avoir résolu les problèmes à l'origine de l'échec de la réplication, il se peut que des objets du compartiment source n'aient pas été répliqués. Par défaut, la réplication S3 ne réplique pas les objets existants ou les objets dont l'état de réplication est FAILED (ÉCHEC) ou REPLICA. Répliquez ces objets à l'aide de la réplication par lot S3.

Autorisations Amazon S3 minimales

Confirmez que le rôle AWS Identity and Access Management (IAM) dispose des autorisations correctes. Si les compartiments source et de destination se trouvent dans des comptes différents, confirmez que la politique de compartiment du compte de destination accorde également des autorisations suffisantes au rôle de réplication.

L'exemple suivant montre une politique IAM avec les autorisations minimales requises pour la réplication.    En fonction des options de la règle de réplication, vous devrez peut-être accorder des autorisations supplémentaires.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::SourceBucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::SourceBucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateTags"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket/*"
        }
    ]
}

Remarque : remplacez SourceBucket et DestinationBucket par les noms de vos compartiments S3.

Le rôle IAM doit avoir une politique d'approbation, ce qui permet à Amazon S3 d'assumer le rôle pour répliquer des objets. Par exemple :

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

Si le compartiment de destination se trouve dans un autre compte, la politique de compartiment de destination doit accorder les autorisations suivantes :

{
    "Version": "2012-10-17",
    "Id": "Policy1644945280205",
    "Statement": [
        {
            "Sid": "Stmt1644945277847",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
            },
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateTags"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket/*"
        }
    ]
}

Remarque : remplacez arn:aws:iam::123456789101:role/s3-replication-role par l'ARN de votre rôle de réplication.    

Autorisations supplémentaires pour Amazon S3

Si la règle de réplication est définie sur Change object ownership to the destination bucket owner (Modifier la propriété de l'objet au propriétaire du compartiment de destination), le rôle IAM doit avoir l'autorisation s3:ObjectOwnerOverrideToBucketOwner. Cette autorisation est placée sur la ressource objet S3. Par exemple :

{
    "Effect":"Allow",
         "Action":[
       "s3:ObjectOwnerOverrideToBucketOwner"
    ],
    "Resource":"arn:aws:s3:::DestinationBucket/*"
}

Le compte de destination doit également accorder l'autorisation s3:ObjectOwnerOverrideToBucketOwner via la politique de compartiment :

{
  "Version": "2012-10-17",
  "Id": "Policy1644945280205",
  "Statement": [
    {
      "Sid": "Stmt1644945277847",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
      },
      "Action": [
        "s3:ReplicateObject",
        "s3:ReplicateTags",
        "s3:ObjectOwnerOverrideToBucketOwner"
      ],
      "Resource": "arn:aws:s3:::DestinationBucket/*"
    }
  ]
}

Remarque : si les paramètres de propriété d'objet du compartiment de destination comprennent le paramètre Bucket owner enforced (Propriétaire du compartiment forcé), il n'est pas nécessaire de modifier la propriété de l'objet au propriétaire du compartiment de destination dans la règle de réplication. Cette modification se produira par défaut.

Si le marqueur de suppression de réplication est activé dans la règle de réplication, alors le rôle IAM doit disposer des autorisations s3:ReplicateDelete. Si le compartiment de destination se trouve dans un autre compte, le propriétaire du compartiment de destination doit également accorder cette autorisation via la politique de compartiment. Par exemple :

{
    "Effect":"Allow",
         "Action":[
       "s3:ReplicateDelete"
    ],
    "Resource":"arn:aws:s3:::DestinationBucket/*"

}

Remarque : remplacez DestinationBucket par le nom de votre compartiment S3.

La même autorisation doit également être accordée via la politique de compartiment sur le compartiment de destination :

{
  "Version": "2012-10-17",
  "Id": "Policy1644945280205",
  "Statement": [
    {
      "Sid": "Stmt1644945277847",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
      },
      "Action": [
        "s3:ReplicateObject",
        "s3:ReplicateTags",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:ReplicateDelete"
      ],
      "Resource": "arn:aws:s3:::DestinationBucket/*"
    }
  ]
}

Autorisations AWS KMS

Si les objets source d'un compartiment sont chiffrés avec une clé AWS Key Management Service (AWS KMS), la règle de réplication doit être configurée pour inclure les objets chiffrés par KMS.

Pour inclure des objets chiffrés avec AWS KMS :

1.    Ouvrez la console Amazon S3.

2.    Choisissez le compartiment S3 qui contient les objets sources.

3.    Dans l'onglet Management (Gestion), sélectionnez une règle de réplication.

5.    Sélectionnez Edit (Modifier).

6.    Sous Encryption (Chiffrement), sélectionnez Replicate objects encrypted with AWS KMS (Répliquer les objets chiffrés avec AWS KMS).

7.    Sous AWS KMS key for encrypting destination objects (Clé AWS KMS pour le chiffrement des objets de destination), sélectionnez une clé AWS KMS. L'option par défaut consiste à utiliser la clé AWS KMS (aws/S3).

Important : si le compartiment de destination se trouve dans un autre compte AWS, spécifiez une clé gérée par le client KMS qui appartient au compte de destination. N'utilisez pas la clé par défaut aws/S3. Cela permet de chiffrer les objets avec la clé gérée par AWS qui appartient au compte source et qui ne peut pas être partagée avec un autre compte. Par conséquent, le compte de destination ne peut pas accéder aux objets du compartiment de destination.

Pour utiliser une clé AWS KMS qui appartient au compte de destination pour chiffrer les objets de destination, le compte de destination doit accorder le rôle de réplication dans la politique de clé KMS :

{
    "Sid": "AllowS3ReplicationSourceRoleToUseTheKey",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
    },
    "Action": ["kms:GenerateDataKey", "kms:Encrypt"],
    "Resource": "*"
}

Remarque : si vous utilisez un astérisque (*) pour Resource (Ressource) dans la politique de clé AWS KMS, la politique accorde l'autorisation pour la clé KMS uniquement au rôle de réplication. La politique n'autorise pas le rôle de réplication à élever ses autorisations.

En outre, le compte source doit ajouter les autorisations minimales suivantes à la politique IAM du rôle de réplication :

{
    "Effect": "Allow",
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": [
        "SourceKmsKeyArn"
    ]
},
{
    "Effect": "Allow",
    "Action": [
        "kms:GenerateDataKey",
        "kms:Encrypt"
    ],
    "Resource": [
        "DestinationKmsKeyArn"
    ]
}

Par défaut, la politique de clé KMS accorde à l'utilisateur racine des autorisations complètes sur la clé. Ces autorisations peuvent être déléguées à d'autres utilisateurs du même compte. À moins que la politique de clé KMS source ne contienne des instructions de rejet, l'utilisation d'une politique IAM pour accorder au rôle de réplication des autorisations sur la clé KMS source est suffisante.

Instructions de rejet explicite et d'autorisation conditionnelle

Si vos objets ne sont toujours pas répliqués une fois que vous avez validé les autorisations, vérifiez s'il existe des instructions de rejet explicites :

  • Les instructions de rejet dans la politique de compartiment de destination ou les politiques de clé KMS qui limitent l'accès à des plages d'adresses CIDR, des points de terminaison d'un VPC ou des points d'accès S3 spécifiques peuvent causer l'échec de la réplication.
  • Les instructions de rejet ou les limites d'autorisations attachées au rôle IAM peuvent causer l'échec de la réplication.
  • Les instructions de rejet dans les politiques de contrôle des services AWS Organizations liées aux comptes source ou de destination peuvent causer l'échec de la réplication.

Conseil : avant de supprimer toute instruction de rejet explicite, confirmez la raison de l'utilisation du rejet et déterminez si l'instruction a un impact sur la sécurité des données.

Si les clés KMS source ou destination accordent des autorisations en fonction du contexte de chiffrement, confirmez que les clés de compartiment S3 sont activées pour les compartiments. Si les clés de compartiment sont activées pour les compartiments, le contexte de chiffrement doit être celui de la ressource au niveau du compartiment :

"kms:EncryptionContext:aws:s3:arn": [
     "arn:aws:s3:::SOURCE_BUCKET_NAME"
     ]
"kms:EncryptionContext:aws:s3:arn": [
     "arn:aws:s3:::DESTINATION_BUCKET_NAME"
     ]

Remarque : remplacez SOURCE_BUCKET_NAME et DESTINATION_BUCKET_NAME par les noms de vos compartiments source et destination.    

Si les clés de compartiment ne sont pas activées pour les compartiments source ou destination, le contexte de chiffrement doit être la ressource de niveau objet :

"kms:EncryptionContext:aws:s3:arn": [
     "arn:aws:s3:::SOURCE_BUCKET_NAME/*"
     ]
"kms:EncryptionContext:aws:s3:arn": [
     "arn:aws:s3:::DESTINATION_BUCKET_NAME/*"
     ]

Remarque : remplacez SOURCE_BUCKET_NAME et DESTINATION_BUCKET_NAME par les noms de vos compartiments source et destination.

Les ACL d'objet et le blocage de l'accès public

Vérifiez si les compartiments source et de destination utilisent des ACL. Si l'objet comporte une ACL qui autorise l'accès public mais que le compartiment de destination utilise le blocage de l'accès public, la réplication échoue.

Propriété de l'objet source

Si les objets du compartiment source ont été chargés par un autre compte AWS, le compte source n'a peut-être pas l'autorisation d'accéder à ces objets. Vérifiez le compartiment source pour voir si les ACL sont désactivées. Si les ACL sont désactivées dans le compartiment source, le compte source est le propriétaire de tous les objets du compartiment. Si les ACL ne sont pas désactivées dans le compartiment source, vérifiez si Object Ownership (Propriété de l'objet) est défini sur Object owner preferred (Propriétaire de l'objet préféré) ou Bucket owner preferred (Propriétaire du compartiment préféré). Si le compartiment est défini sur Bucket owner preferred (Propriétaire du compartiment préféré), les objets du compartiment source ont besoin d'une ACL bucket-owner-full-control pour que le propriétaire du compartiment devienne le propriétaire de l'objet.

Le compte source peut devenir propriétaire de tous les objets de son compartiment en désactivant les ACL. La plupart des cas d'utilisation ne nécessitent pas l'utilisation des ACL pour gérer l'accès. Une bonne pratique consiste à utiliser IAM et des politiques de compartiment pour gérer l'accès aux ressources S3. Pour désactiver les ACL sur votre compartiment S3, consultez Contrôle de la propriété des objets et désactivation des ACL pour votre compartiment. Assurez-vous d'évaluer l'utilisation actuelle des ACL sur votre compartiment et vos objets. Votre compartiment actuel et vos politiques IAM doivent accorder des autorisations suffisantes pour que vous puissiez désactiver les ACL sans affecter l'accès à Amazon S3.


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?