Ich habe die Replikation zwischen meinen Buckets eingerichtet, aber neue Objekte replizieren sich nicht. Wie kann ich das Problem beheben?

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.

Auflösung

Um Fehler bei Objekten zu beheben, die nicht in den Ziel-Bucket repliziert werden, überprüfen Sie die verschiedenen Arten von Berechtigungen für Ihren Bucket. Überprüfen Sie auch die Einstellungen für den öffentlichen Zugriff und die Einstellungen für den Bucket-Besitz.

Tipp: Stellen Sie sicher, dass Sie die Replikation nach jeder Konfigurationsänderung testen, indem Sie ein Objekt in den Quell-Bucket hochladen. Es hat sich bewährt, eine Konfigurationsänderung nach der anderen vorzunehmen, um etwaige Probleme bei der Replikationseinrichtung zu identifizieren.

Nachdem Sie die Probleme behoben haben, die zum Scheitern 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. Replizieren Sie diese Objekte mithilfe der S3-Batch-Replikation.

Mindestberechtigungen für Amazon S3

Vergewissern Sie sich, dass die AWS Identity Access Management (IAM)-Rolle über die richtigen Berechtigungen verfügt. Wenn sich die Quell- und Ziel-Buckets in unterschiedlichen Konten befinden, vergewissern Sie sich, dass die Bucket-Richtlinie des Zielkontos auch der Replikationsrolle ausreichende Berechtigungen gewährt.

Das folgende Beispiel zeigt eine IAM-Richtlinie mit den für die Replikation erforderlichen Mindestberechtigungen.    Je nach den Optionen für die Replikationsregeln müssen Sie möglicherweise zusätzliche Berechtigungen gewähren.

{
    „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: Ersetzen Sie SourceBucket und DestinationBucket durch die Namen Ihrer S3-Buckets.

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

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

Wenn sich der Ziel-Bucket in einem anderen Konto befindet, muss die Ziel-Bucket-Richtlinie die folgenden Berechtigungen gewähren:

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

Hinweis: Ersetzen Sie arn:aws:iam::123456789101:role/s3-replication-role durch den ARN Ihrer Replikationsrolle.    

Zusätzliche Amazon S3-Berechtigungen

Wenn die Replikationsregel auf Change object ownership to the Destination Bucket Owner (Ändern des Objektbesitzes auf den Eigentümer des Zielbereichs) festgelegt ist, muss die IAM-Rolle über die Berechtigungen s3:ObjectOwnerOverrideToBucketOwner verfügen. Diese Berechtigung wird der S3-Objektressource zugewiesen. Zum Beispiel:

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

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

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

Hinweis: Wenn die Objektbesitzeinstellungen des Ziel-Buckets den Wert Bucket-Besitzer erzwungen enthalten, müssen Sie in der Replikationsregel den Objektbesitzer des Ziel-Buckets nicht ändern. Diese Änderung wird standardmäßig vorgenommen.

Wenn für die Replikationsregel die Markierungsreplikation zum Löschen aktiviert ist, muss die IAM-Rolle über die Berechtigungen s3:ReplicateDelete verfügen. Wenn sich der Ziel-Bucket in einem anderen Konto befindet, muss der Besitzer des Ziel-Buckets diese Berechtigung ebenfalls über die Bucket-Richtlinie gewähren. Zum Beispiel:

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

}

Hinweis: Ersetzen Sie DestinationBucket durch den Namen Ihres S3-Buckets.

Dieselbe Berechtigung muss auch über die Bucket-Richtlinie für den Ziel-Bucket erteilt werden:

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

AWS KMS-Berechtigungen

Wenn die Quellobjekte eines Buckets mit einem AWS Key Management Service (AWS KMS)-Schlüssel verschlüsselt sind, muss die Replikationsregel so konfiguriert werden, dass sie KMS-verschlüsselte Objekte enthält.

Gehen Sie wie folgt vor, um mit AWS KMS verschlüsselte Objekte einzubeziehen:

1.    Öffnen Sie die Amazon S3-Konsole.

2.    Wählen Sie den S3-Bucket aus, der die Quellobjekte enthält.

3.    Wählen Sie auf der Registerkarte Management (Verwaltung) eine Replikationsregel aus.

5.    Wählen Sie Edit (Bearbeiten).

6.    Wählen Sie unter Verschlüsselung die Option Replicate objects encrypted with AWS KMS (Mit AWS KMS verschlüsselte Objekte replizieren) aus.

7.    Wählen Sie 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).

Wichtig: Wenn sich der Ziel-Bucket in einem anderen AWS-Konto befindet, geben Sie einen vom Kunden verwalteten KMS-Schlüssel an, der dem Zielkonto gehört. Verwenden Sie nicht den standardmäßigen AWS/S3-Schlüssel. Dadurch werden die Objekte mit dem von AWS verwalteten Schlüssel verschlüsselt, der dem Quellkonto gehört und nicht mit einem anderen Konto geteilt werden kann. Daher kann das Zielkonto nicht auf die Objekte im Ziel-Bucket zugreifen.

Um einen AWS-KMS-Schlüssel, der zum Zielkonto gehört, zum Verschlüsseln der Zielobjekte zu verwenden, muss das Zielkonto die Replikationsrolle in der KMS-Schlüsselrichtlinie zuweisen:

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

Hinweis: Wenn Sie in der AWS KMS-Schlüsselrichtlinie ein Sternchen (*) für Ressource verwenden, gewährt die Richtlinie nur der Replikationsrolle die Berechtigung für den KMS-Schlüssel. Die Richtlinie erlaubt der Replikationsrolle nicht, ihre Berechtigungen zu erhöhen.

Darüber hinaus muss das Quellkonto der IAM-Richtlinie der Replikationsrolle 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 KMS-Schlüsselrichtlinie dem Root-Benutzer volle Berechtigungen für den Schlüssel. Diese Berechtigungen können an andere Benutzer desselben Kontos delegiert werden. Sofern die KMS-Quellschlüsselrichtlinie keine Zugriffsverweigerungen enthält, reicht die Verwendung einer IAM-Richtlinie aus, um der Replikationsrolle Berechtigungen für den KMS-Quellschlüssel zu gewähren.

Anweisungen zum expliziten Verweigern und bedingten Zulassen

Wenn Ihre Objekte immer noch nicht repliziert werden, nachdem Sie die Berechtigungen validiert haben, suchen Sie nach expliziten Zugriffsverweigerungen:

  • Zugriffsverweigerungen in der Ziel-Bucket-Richtlinie oder in KMS-Schlüsselrichtlinien, die den Zugriff auf bestimmte CIDR-Bereiche, VPC-Endpunkte oder S3-Zugriffspunkte einschränken, können dazu führen, dass die Replikation fehlschlägt.
  • Der IAM-Rolle zugeordnete Zugriffsverweigerungen oder Zugriffsbeschränkungen können dazu führen, dass die Replikation fehlschlägt.
  • Zugriffsverweigerungen in den Service Control-Richtlinien von AWS Organizations, die entweder dem Quell- oder dem Zielkonto zugeordnet sind, können dazu führen, dass die Replikation fehlschlägt.

Tipp: Bevor Sie explizite Zugriffsverweigerungen entfernen, überprüfen Sie den Grund für die Verwendung der Verweigerung und stellen Sie fest, ob sich die Aussage auf die Datensicherheit auswirkt.

Wenn entweder der Quell- oder der Ziel-KMS-Schlüssel je nach Verschlüsselungskontext Berechtigungen gewähren, vergewissern Sie sich, dass die S3-Bucket-Schlüssel für die Buckets aktiviert sind. Wenn für die Buckets Bucket Keys aktiviert sind, 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: Ersetzen Sie SOURCE_BUCKET_NAME und DESTINATION_BUCKET_NAME durch die Namen Ihrer Quell- und Ziel-Buckets.    

Wenn die Bucket-Schlüssel für die Quell- oder Ziel-Buckets nicht aktiviert sind, 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: Ersetzen Sie SOURCE_BUCKET_NAME und DESTINATION_BUCKET_NAME durch die Namen Ihrer Quell- und Ziel-Buckets.

Objekt-ACLs und Blockierung des öffentlichen Zugriffs

Überprüfen Sie, ob die Quell- und Ziel-Buckets ACLs verwenden. Wenn an das Objekt eine ACL angehängt ist, die den öffentlichen Zugriff ermöglicht, der Ziel-Bucket aber block public access (öffentlichen Zugriff blockieren) verwendet, schlägt die Replikation fehl.

Besitz des Quellobjekts

Wenn die Objekte im Quell-Bucket von einem anderen AWS-Konto hochgeladen wurden, hat das Quellkonto möglicherweise keine Berechtigungen für diese Objekte. Prüfen Sie im Quell-Bucket, ob ACLs deaktiviert sind. Wenn für den Quell-Bucket ACLs deaktiviert sind, ist das Quellkonto der Besitzer aller Objekte im Bucket. Wenn für den Quell-Bucket keine deaktivierten ACLs vorhanden sind, überprüfen Sie, ob Object Ownership (Objektbesitz) auf Object Owner Preferred oder Bucket Owner Preferred gesetzt ist. Wenn der Bucket auf Bucket Owner Preferred gesetzt ist, benötigen Quell-Bucket-Objekte eineBucket-Owner-Full-Control-ACL, damit der Bucket-Besitzer zum Objektbesitzer wird.

Das Quellkonto kann den Besitz an allen Objekten in seinem Bucket übernehmen, indem es ACLs deaktiviert. In den meisten Anwendungsfällen ist die Verwendung von ACLs zur Zugriffsverwaltung nicht erforderlich. 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 Ihrem S3-Bucket finden Sie unter Steuern des Besitzes von Objekten und Deaktivieren von ACLs für Ihren Bucket. Achten Sie darauf, die aktuelle Verwendung von ACLs für Ihren Bucket und Ihre Objekte zu bewerten. Ihre aktuellen Bucket- und IAM-Richtlinien müssen ausreichend Berechtigungen gewähren, damit Sie ACLs deaktivieren können, ohne den Amazon S3-Zugriff zu beeinträchtigen.


Relevante Informationen

Komplettlösungen: Beispiele für die Konfiguration der Replikation

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren