Wie kann ich S3-Objekte von einem anderen AWS-Konto kopieren?

Letzte Aktualisierung: 07.01.2022

Ich möchte Amazon-Simple-Storage-Service-(Amazon-S3)-Objekte zwischen AWS-Konten kopieren. Dann möchte ich sicherstellen, dass das Zielkonto Eigentümer der kopierten Objekte ist. Wie mache ich das?

Auflösung

Wichtig: Objekte in Amazon S3 gehören nicht mehr automatisch dem AWS-Konto, das sie hochlädt. Standardmäßig ist für alle neu erstellten Buckets jetzt die Einstellung erzwungener Bucket-Eigentümer aktiviert. Es ist auch eine bewährte Methode, beim Ändern der Objekteigentümerschaft die Einstellung erzwungener Bucket-Eigentümer zu verwenden. Beachten Sie jedoch, dass diese Option alle Bucket-ACLs und ACLs für alle Objekte in Ihrem Bucket deaktiviert.

Mit der Einstellung erzwungener Bucket-Eigentümer in der S3-Objekteigentümerschaft gehören nun alle Objekte in einem Amazon-S3-Bucket automatisch dem Bucket-Eigentümer. Die Funktion erzwungener Bucket-Eigentümer deaktiviert auch alle Zugriffskontrolllisten (ACLs), wodurch die Zugriffsverwaltung für in S3 gespeicherte Daten vereinfacht wird. Bei vorhandenen Buckets ist ein Amazon-S3-Objekt jedoch weiterhin im Besitz des AWS-Kontos, das es hochgeladen hat, sofern Sie die ACLs nicht explizit deaktivieren. Informationen zum Ändern der Objekteigentümerschaft in einem vorhandenen Bucket finden Sie unter Wie kann ich den Besitz von Objekten in öffentlichem Besitz in meinem S3-Bucket ändern?

Wenn Ihre vorhandene Methode zum Teilen von Objekten von der Verwendung von ACLs abhängt, identifizieren Sie die Hauptbenutzer, die ACLs für den Zugriff auf Objekte verwenden. Weitere Informationen zum Überprüfen von Berechtigungen vor dem Deaktivieren von ACLs finden Sie unter Voraussetzungen für das Deaktivieren von ACLs.

Wenn Sie Ihre ACLs nicht deaktivieren können, führen Sie die folgenden Schritte aus, um den Besitz von Objekten zu übernehmen, bis Sie Ihre Bucket-Richtlinie anpassen können:

1.    Erstellen Sie im Quellkonto eine vom Kunden verwaltete AWS-Identity-and-Access-Management-(IAM)-Richtlinie, die einer IAM-Identität (Benutzer oder Rolle) die richtigen Berechtigungen erteilt. Der IAM-Benutzer muss Zugriff haben, um Objekte aus dem Quell-Bucket abzurufen und Objekte wieder in den Ziel-Bucket einzufügen. Sie können eine IAM-Richtlinie ähnlich der folgenden verwenden:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

Hinweis: Diese Beispiel-IAM-Richtlinie enthält nur die erforderlichen Mindestberechtigungen zum Auflisten von Objekten und zum Kopieren von Objekten zwischen Buckets in verschiedenen Konten. Sie müssen die zulässigen S3-Aktionen an Ihren Anwendungsfall anpassen. Wenn der Benutzer beispielsweise Objekte kopieren muss, die über Objekt-Tags verfügen, müssen Sie auch Berechtigungen für s3:GetObjectTagging erteilen. Wenn ein Fehler auftritt, versuchen Sie, diese Schritte als Administrator auszuführen.

2.    Hängen Sie im Quellkonto die vom Kunden verwaltete Richtlinie an die IAM-Identität an, die Sie zum Kopieren von Objekten in den Ziel-Bucket verwenden möchten.

3.    Setzen Sie im Zielkonto S3-Objekteigentümerschaft für den Ziel-Bucket auf Bucket-Eigentümer bevorzugt. Nachdem Sie die S3-Objekteigentümerschaft festgelegt haben, gehören neue Objekte, die mit der Zugriffskontrollliste (ACL) auf Bucket-owner-full-control hochgeladen wurden, automatisch dem Konto des Buckets.

4.    Ändern Sie im Zielkonto die Bucket-Richtlinie des Ziel-Buckets, um dem Quellkonto Berechtigungen zum Upload von Objekten zu erteilen. Fügen Sie außerdem eine Bedingung in die Bucket-Richtlinie ein, die erfordert, dass Objekt-Uploads die ACL auf vollständige Bucket-Eigentümer-Kontrolle setzen. Sie können eine Anweisung ähnlich der folgenden verwenden:

Hinweis: Ersetzen Sie destination-DOC-EXAMPLE-BUCKET durch den Namen des Ziel-Buckets. Ersetzen Sie dann arn:aws:iam::222222222222:user/Jane durch den Amazon-Ressourcennamen (ARN) der IAM-Identität aus dem Quellkonto.

{
    "Version": "2012-10-17",
    "Id": "Policy1611277539797",
    "Statement": [
        {
            "Sid": "Stmt1611277535086",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::222222222222:user/Jane"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "Stmt1611277877767",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::222222222222:user/Jane"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
        }
    ]
}

Hinweis: Diese Beispiel-Bucket-Richtlinie enthält nur die erforderlichen Mindestberechtigungen zum Upload eines Objekts mit der erforderlichen ACL. Sie müssen die zulässigen S3-Aktionen an Ihren Anwendungsfall anpassen. Wenn der Benutzer beispielsweise Objekte mit Objekt-Tags kopieren muss, müssen Sie auch Berechtigungen für s3:GetObjectTagging erteilen

5.    Nachdem Sie die IAM-Richtlinie und die Bucket-Richtlinie konfiguriert haben, muss die IAM-Identität aus dem Quellkonto Objekte in den Ziel-Bucket hochladen. Stellen Sie sicher, dass die ACL auf Bucket-owner-full-control gesetzt ist. Beispielsweise muss die Quell-IAM-Identität den AWS-CLI-Befehl cp mit der Option --acl ausführen:

aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Wenn die S3-Objekteigentümerschaft auf Bucket-Eigentümer bevorzugt eingestellt ist, gehören die mit der Bucket-Owner-Vollzugriffs-ACL hochgeladenen Objekte automatisch dem Konto des Ziel-Buckets.

Wichtig: Wenn Ihr S3-Bucket über eine Standardverschlüsselung mit aktiviertem AWS Key Management Service (AWS KMS) verfügt, müssen Sie auch die AWS-KMS-Schlüsselberechtigungen ändern. Anweisungen finden Sie unter Mein Amazon-S3-Bucket hat eine Standardverschlüsselung mit einem benutzerdefinierten AWS-KMS-Schlüssel. Wie kann ich Benutzern Downloads und Uploads von und in den Bucket ermöglichen?