Pourquoi mes objets Amazon S3 ne se répliquent-ils pas lorsque je configure la réplication entre mes compartiments ?

Lecture de 9 minute(s)
0

J'ai configuré la réplication entre régions (CRR) ou la réplication dans la 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.

Résolution

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

Conseil :

  • Chargez un objet dans le compartiment source pour tester la réplication après chaque modification de configuration. Il est recommandé d'apporter une seule modification de configuration à la fois afin d'identifier tout problème de configuration de la réplication.
  • Activez la notification de type d'événement s3:Replication:OperationFailedReplication pour les échecs de réplication. Le code d'erreur peut vous aider à déterminer la cause de l'échec.

Une fois les problèmes à l'origine de l'échec de la réplication résolus, il se peut que certains 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 le statut de réplication est ÉCHEC ou RÉPLICA. Pour vérifier les statuts de réplication des objets, consultez la section Comment puis-je afficher les objets dont la réplication d'un compartiment Amazon S3 dans un autre a échoué ? Utilisez la réplication par lots S3 pour répliquer les objets.

Accorder des autorisations Amazon S3 minimales

Vérifiez que le rôle AWS Identity Access Management (IAM) que vous avez utilisé dans la règle de réplication dispose des autorisations appropriées. Si les compartiments source et de destination se trouvent sur des comptes AWS différents, vérifiez que la stratégie de compartiment du compte de destination accorde également des autorisations suffisantes au rôle de réplication.

La stratégie IAM fournie ci-dessous à titre d’exemple est dotée des autorisations minimales requises pour la réplication :

{
    "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.

En fonction des options de règles de réplication, il se peut que vous deviez accorder des autorisations supplémentaires.

Le rôle IAM doit être doté d'une stratégie d'approbation qui permet à Amazon S3 d'endosser le rôle de réplication des objets :

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

Accorder des autorisations Amazon S3 supplémentaires

Si vous définissez la règle de réplication sur Modifier la propriété de l'objet au propriétaire du compartiment de destination, le rôle IAM doit disposer des autorisations s3:ObjectOwnerOverrideToBucketOwner. Placez l'autorisation sur la ressource d’objet S3 :

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

Le compte de destination doit également accorder l'autorisation s3:ObjectOwnerOverrideToBucketOwner dans la stratégie de compartiment :

{
    "Sid": "1",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
    },
    "Action": [
        "s3:ObjectOwnerOverrideToBucketOwner"
    ],
    "Resource": "arn:aws:s3:::DestinationBucket/*"
}

Remarque : Si la propriété d’objets du compartiment de destination est Propriétaire du compartiment appliqué, 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. La modification intervient par défaut.

Si vous avez activé la réplication de marqueur de suppression sur la règle de réplication, le rôle IAM doit disposer des autorisations s3:ReplicateDelete :

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

Si le compartiment de destination se trouve dans un autre compte, le propriétaire du compartiment de destination doit également accorder cette autorisation par le biais de la stratégie de compartiment :

{
    "Version": "2012-10-17",
    "Id": "PolicyForDestinationBucket",
    "Statement": [
        {
            "Sid": "Stmt1644945277847",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
            },
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateTags",
                "s3:ObjectOwnerOverrideToBucketOwner",
                "s3:ReplicateDelete"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket/*"
        }
    ]
}

Remarque : Remplacez arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role par l'ARN de votre rôle de réplication. Remplacez DestinationBucket par le nom de votre compartiment S3.

Accorder des autorisations AWS KMS

Si les objets sources d'un compartiment sont chiffrés à l'aide d'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.

Procédez comme suit :

  1. Ouvrez la console Amazon S3.
  2. Choisissez le compartiment S3 qui contient les objets sources.
  3. Dans l'onglet Gestion, sélectionnez une règle de réplication.
  4. Sélectionnez Modifier.
  5. Sous Chiffrement, sélectionnez Répliquer les objets chiffrés avec AWS KMS.
  6. Sous 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).

Pour plus d'informations, consultez la section Exemples de stratégies - Utilisation de SSE-S3 et SSE-KMS avec réplication.

Important : Si le compartiment de destination se trouve dans un autre compte, spécifiez une clé gérée par le client KMS qui appartient au compte de destination. La clé aws/S3 par défaut chiffre les objets à l'aide de la clé gérée par AWS appartenant au compte source. Étant donné que vous ne pouvez pas partager la clé gérée AWS avec un autre compte, le compte de destination ne peut pas accéder aux objets du compartiment de destination.

Accorder des autorisations AWS KMS supplémentaires pour les scénarios inter-comptes

Pour utiliser la clé AWS KMS du compte de destination afin de chiffrer les objets de destination, le compte de destination doit accorder le rôle de réplication dans la stratégie de clé :

{
    "Sid": "AllowS3ReplicationSourceRoleToUseTheKey",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
    },
    "Action": [
        "kms:GenerateDataKey",
        "kms:Encrypt"
    ],
    "Resource": "*"
}

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

En outre, vous devez ajouter les autorisations minimales suivantes à la stratégie IAM du rôle de réplication à partir du compte source :

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

Par défaut, la stratégie de clé KMS accorde à l'utilisateur racine des autorisations complètes sur la clé. Vous pouvez déléguer ces autorisations à d'autres utilisateurs du même compte. Vous pouvez utiliser une stratégie IAM pour accorder au rôle de réplication les autorisations sur la clé KMS source. Cela est suffisant à moins que la stratégie de clé KMS source ne contienne des instructions de refus.

Vérifier l’existence d’instructions de refus explicite et d'autorisation conditionnelle

Si vos objets ne sont toujours pas répliqués après avoir validé les autorisations, vérifiez s'il existe des instructions de refus explicite susceptibles d'entraîner l'échec de la réplication.

Supprimez les instructions de refus de la stratégie de compartiment de destination ou de la stratégie de clé AWS KMS qui limitent l'accès aux éléments suivants :

  • Gammes CIDR spécifiques
  • Points de terminaison du cloud privé virtuel (VPC)
  • Points d'accès S3

Supprimez les instructions de refus ou les limites d'autorisations associées au rôle IAM. En outre, supprimez les instructions de refus figurant dans les stratégies de contrôle des services (SCP) AWS Organizations associées aux comptes source ou de destination.

Conseil : Avant de supprimer toute instruction de refus explicite, confirmez la raison du refus. Déterminez également si l’instruction affecte la sécurité des données.

Vérifier l’existence de clés de compartiment Amazon S3

Si les clés KMS source ou de destination accordent des autorisations en fonction du contexte de chiffrement, vérifiez si les clés de compartiment S3 sont utilisées. Si les compartiments utilisent des clés de compartiment, le contexte de chiffrement doit concerner 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 de destination.

Si les clés de compartiment ne sont pas utilisées pour les compartiments source ou de destination, le contexte de chiffrement doit être la ressource au niveau de l'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 de destination.

Vérifier l’existence d’ACL d'objet et d’un blocage de l'accès public

Vérifiez si les compartiments source et de destination utilisent des listes de contrôle d'accès (ACL). Si l'objet est associé à 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.

Confirmer la propriété de l'objet source

Si un autre compte a chargé les objets dans le compartiment source, le compte source n'est peut-être pas autorisé à accéder à ces objets. Vérifiez le compartiment source pour déterminer si les ACL sont désactivées.

Si les ACL sont désactivées sur 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 sur le compartiment source, vérifiez si la propriété de l'objet est définie sur Propriétaire de l’objet préféré ou Propriétaire du compartiment préféré. Si la propriété est définie sur Propriétaire du compartiment préféré, les objets du compartiment source doivent disposer de l'autorisation ACL bucket-owner-full-control.

Le compte source peut désactiver les ACL pour devenir propriétaire de tous les objets de son compartiment. La plupart des cas d'utilisation n'exigent pas que vous utilisiez des ACL pour gérer l'accès. Il est recommandé d'utiliser les stratégies IAM et de compartiment pour gérer l'accès aux ressources S3. Pour désactiver les ACL sur votre compartiment S3, consultez la section Contrôle de la propriété des objets et désactivation des listes ACL pour votre compartiment. Votre compartiment et vos stratégies IAM doivent accorder des autorisations suffisantes afin qu vous n’affectiez pas l'accès à Amazon S3 lorsque vous désactivez les ACL.

Spécifier le filtre de règles de réplication approprié

Assurez-vous d'avoir correctement spécifié le filtre de règles de réplication.

Si vous spécifiez un filtre de règles combinant un préfixe de clé et des identifications d'objet, S3 exécute une opération logique AND pour combiner les filtres. La règle s'applique à un sous-ensemble d'objets dotés d'un préfixe clé spécifique et d’identifications spécifiques.

Informations connexes

Exemples de configuration de la réplication en direct

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois