Warum werden meine Amazon S3-Objekte nicht repliziert, wenn ich die Replikation zwischen meinen Buckets einrichte?

Lesedauer: 8 Minute
0

Ich habe eine regionsübergreifende Replikation (CRR) oder die regionsgleiche Replikation (SRR) zwischen meinen Amazon Simple Storage Service (Amazon S3)-Buckets eingerichtet. Objekte werden jedoch nicht in den Ziel-Bucket repliziert.

Lösung

Überprüfe die verschiedenen Arten von Berechtigungen für den Bucket, um Fehler bei S3-Objekten zu beheben, die nicht in den Ziel-Bucket repliziert werden. Überprüfe auch die Einstellungen für den öffentlichen Zugriff und die Einstellungen für das Bucket-Eigentum.

Tipp:

  • Lade ein Objekt in den Quell-Bucket hoch, um die Replikation nach jeder Konfigurationsänderung zu testen. Es hat sich bewährt, eine Konfiguration nach der anderen zu ändern, um etwaige Probleme bei der Replikationseinrichtung zu identifizieren.
  • Aktiviere die Benachrichtigung vom Ereignistyp s3:Replication:OperationFailedReplication für Replikationsfehler. Der Fehlercode kann dir helfen, die Ursache des Fehlers zu ermitteln.

Nachdem du die Probleme behoben hast, die zum Fehlschlagen der Replikation geführt haben, befinden sich möglicherweise Objekte im Quell-Bucket, die nicht repliziert wurden. Standardmäßig repliziert die S3-Replikation keine vorhandenen Objekte oder Objekte mit dem Replikationsstatus FAILED oder REPLICA. Informationen zum Überprüfen des Replikationsstatus der Objekte findest du unter Wie zeige ich Objekte an, bei denen die Replikation von einem Amazon S3-Bucket in einen anderen fehlgeschlagen ist? Verwende die S3-Batch-Replikation, um die Objekte zu replizieren.

Mindestberechtigungen für Amazon S3 gewähren

Vergewissere dich, dass die AWS Identity Access Management (IAM, Identitäts- und Zugriffsmamagement)-Rolle, die du in der Replikationsregel verwendet hast, über die richtigen Berechtigungen verfügt. Wenn sich die Quell- und Ziel-Buckets in unterschiedlichen AWS-Konten befinden, vergewissere dich, dass die Bucket-Richtlinie des Zielkontos auch der Replikationsrolle ausreichende Berechtigungen gewährt.

Das folgende Beispiel einer IAM-Richtlinie verfügt über die erforderlichen Mindestberechtigungen für die Replikation: 

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

Hinweis: Ersetze SourceBucket und DestinationBucket durch die Namen deiner S3-Buckets.

Je nach den Optionen für die Replikationsregeln musst du möglicherweise zusätzliche Berechtigungen gewähren.

Die IAM-Rolle muss über eine Vertrauensrichtlinie verfügen, die es Amazon S3 ermöglicht, die Rolle zur Replikation von Objekten zu übernehmen:

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

Zusätzliche Amazon S3-Berechtigungen gewähren

Wenn du die Replikationsregel auf Change object ownership to the destination bucket owner (Ändern der Objekteigentümerschaft in den Eigentümer des Zielbereichs) festlegst, muss die IAM-Rolle über die Berechtigungen s3:ObjectOwnerOverrideToBucketOwner verfügen. Platziere die Berechtigung für die S3-Objektressource:

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

Das Zielkonto muss außerdem die Berechtigung s3:ObjectOwnerOverrideToBucketOwner in der Bucket-Richtlinie gewähren:

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

Hinweis: Wenn die Objekteigentűmerschaft des Ziel-Buckets Bucket-Eigentümer erzwungen ist, musst du in der Replikationsregel nicht die Objekteigentűmerschaft in den Eigentümer des Ziel-Buckets ändern. Die Änderung erfolgt standardmäßig.

Wenn du Replikation der Löschmarkierung in der Replikationsregel aktiviert hast, muss die IAM-Rolle über die s3:ReplicateDelete-Berechtigungen verfügen:

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

Wenn sich der Ziel-Bucket in einem anderen Konto befindet, muss der Eigentümer des Ziel-Buckets die Berechtigung ebenfalls in der Bucket-Richtlinie gewähren:

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

Hinweis: Ersetze arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role durch den ARN deiner Replikationsrolle. Ersetze DestinationBucket durch den Namen deines S3-Buckets.

AWS KMS-Berechtigungen gewähren

Wenn du die Quellobjekte des Buckets mit einem AWS Key Management Service (AWS KMS)-Schlüssel verschlüsselt hast, muss die Replikationsregel mit AWS KMS verschlüsselte Objekte enthalten.

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-S3-Konsole.
  2. Wähle den S3-Bucket aus, der die Quellobjekte enthält.
  3. Wähle auf der Registerkarte Verwaltung eine Replikationsregel aus.
  4. Wähle Bearbeiten aus.
  5. Wähle unter Verschlüsselung die Option Mit AWS KMS verschlüsselte Objekte replizieren aus.
  6. Wähle unter AWS KMS key for encrypting destination objects (AWS-KMS-Schlüssel für die Verschlüsselung von Zielobjekten) einen AWS-KMS-Schlüssel aus. Die Standardoption ist die Verwendung des AWS-KMS-Schlüssels (aws/S3).

Weitere Informationen findest du unter Beispielrichtlinien – Verwendung von SSE-S3 und SSE-KMS mit Replikation.

Wichtig: Wenn sich der Ziel-Bucket in einem anderen Konto befindet, gib einen kundenseitig verwalteten AWS-KMS-Schlüssel an, der dem Zielkonto gehört. Der standardmäßige aws/S3-Schlüssel verschlüsselt die Objekte mit dem von AWS verwalteten Schlüssel, den das Quellkonto besitzt. Da du den von AWS verwalteten Schlüssel nicht mit einem anderen Konto teilen kannst, kann das Zielkonto nicht auf die Objekte im Ziel-Bucket zugreifen.

Zusätzliche AWS-KMS-Berechtigungen für kontoübergreifende Szenarien gewähren

Um den AWS KMS-Schlüssel des Zielkontos zum Verschlüsseln der Zielobjekte zu verwenden, muss das Zielkonto die Replikationsrolle in der Schlüsselrichtlinie gewähren:

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

Hinweis: Wenn du in der AWS-KMS-Schlüsselrichtlinie ein Sternchen (*) für Ressource verwendest, gewährt die Richtlinie nur der Replikationsrolle die Berechtigung. Die Richtlinie erlaubt es der Replikationsrolle nicht, ihre Berechtigungen zu erweitern.

Außerdem musst du der IAM-Richtlinie der Replikationsrolle vom Quellkonto aus die folgenden Mindestberechtigungen hinzufügen:

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

Standardmäßig gewährt die AWS-KMS-Schlüsselrichtlinie dem Root-Benutzer vollständige Berechtigungen für den Schlüssel. Du kannst diese Berechtigungen an andere Benutzer im selben Konto delegieren. Du kannst auch eine IAM-Richtlinie verwenden, um der Replikationsrolle Berechtigungen für den KMS-Quellschlüssel zu gewähren. Dies ist ausreichend, sofern die KMS-Quellschlüsselrichtlinie keine Verweigerungsanweisungen enthält.

Auf explizite Verweigerungs- und bedingte Zulassungsanweisungen prüfen

Wenn deine Objekte nach der Überprüfung der Berechtigungen immer noch nicht repliziert werden, suche nach expliziten Verweigerungs-Anweisungen, die dazu führen können, dass die Replikation fehlschlägt.

Entferne Verweigerungsanweisungen in der Ziel-Bucket-Richtlinie oder der AWS-KMS-Schlüsselrichtlinie, die den Zugriff auf Folgendes einschränken:

  • Spezifische CIDR-Bereiche,
  • Endpunkte der Virtual Private Cloud (VPC)
  • S3-Zugriffspunkte

Entferne Verweigerungsanweisungen oder Berechtigungsgrenzen, die der IAM-Rolle zugeordnet sind. Entferne außerdem Verweigerungsanweisungen in den Service-Kontrollrichtlinien (Service Control Policies, SCPs) von AWS Organizations, die entweder den Quell- oder Zielkonten zugeordnet sind.

Tipp: Bevor du alle ausdrücklichen Verweigerungsanweisungen entfernst, überprüfe den Grund für die Verweigerung. Stelle außerdem fest, ob sich die Anweisung auf die Datensicherheit auswirkt.

Nach Amazon S3-Bucket-Schlűsseln suchen

Wenn die Quell- oder Ziel-KMS-Schlüssel basierend auf dem Verschlüsselungskontext Berechtigungen gewähren, überprüfe, ob S3-Bucket-Schlüssel verwendet werden. Wenn die Buckets Bucket-Schlüssel verwenden, muss der Verschlüsselungskontext für die Ressource auf Bucket-Ebene gelten:

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

Hinweis: Ersetze SOURCE_BUCKET_NAME und DESTINATION_BUCKET_NAME durch die Namen deiner Quell- und Ziel-Buckets.

Wenn die Bucket-Schlüssel nicht für die Quell- oder Ziel-Buckets verwendet werden, muss der Verschlüsselungskontext die Ressource auf Objektebene sein:

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

Hinweis: Ersetze SOURCE_BUCKET_NAME und DESTINATION_BUCKET_NAME durch die Namen deiner Quell- und Ziel-Buckets.

Nach Objekt-ACLs suchen und den öffentlichen Zugriff blockieren

Prüfe, ob die Quell- und Ziel-Buckets Zugriffssteuerungslisten (ACLs) verwenden. Wenn das Objekt eine ACL enthält, die öffentlichen Zugriff zulässt, der Ziel-Bucket aber Öffentlichen Zugriff blockieren verwendet, schlägt die Replikation fehl.

Eigentümerschaft am Quellobjekt bestätigen

Wenn ein anderes Konto die Objekte im Quell-Bucket hochgeladen hat, hat das Quellkonto möglicherweise keine Berechtigung für diese Objekte. Überprüfe den Quell-Bucket, um festzustellen, ob ACLs deaktiviert sind.

Wenn die ACLs im Quell-Bucket deaktiviert sind, ist das Quellkonto der Eigentümer aller Objekte im Bucket. Wenn ACLs im Quell-Bucket nicht deaktiviert sind, überprüfe, ob die Objekteigentümerschaft auf Object owner preferred (Objekteigentümer bevorzugt) oder Bucket-Eigentümer bevorzugt gesetzt ist. Wenn die Eigentümerschaft auf Bucket-Eigentümer bevorzugt gesetzt ist, müssen die Quell-Bucket-Objekte über die ACL-Berechtigung bucket-owner-full-control verfügen.

Das Quellkonto kann ACLs deaktivieren, um das Eigentum an allen Objekten in seinem Bucket zu übernehmen. In den meisten Anwendungsfällen ist es nicht erforderlich, dass du ACLs verwendest, um den Zugriff zu verwalten. Es ist eine bewährte Methode, IAM- und Bucket-Richtlinien zu verwenden, um den Zugriff auf S3-Ressourcen zu verwalten. Informationen zum Deaktivieren von ACLs in deinem S3-Bucket findest du unter Steuern des Eigentums an Objekten und Deaktivieren von ACLs für deinen Bucket. Die Bucket- und IAM-Richtlinien müssen ausreichende Berechtigungen gewähren, damit du den Amazon S3-Zugriff nicht beeinträchtigst, wenn du ACLs deaktivierst.

Den richtigen Replikationsregelfilter angeben

Stelle sicher, dass du den Replikationsregelfilter richtig angegeben hast.

Wenn du einen Regelfilter mit einer Kombination aus einem Schlüsselpräfix und Objekt-Tags angibst, führt S3 eine logische UND-Operation aus, um die Filter zu kombinieren. Die Regel gilt für eine Teilmenge von Objekten mit einem bestimmten Schlüsselpräfix und bestimmten Tags.

Ähnliche Informationen

Beispiele für die Konfiguration der Live-Replikation