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

Letzte Aktualisierung am 19.05.2021

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

Standardmäßig gehört ein S3-Objekt dem Konto, das das Objekt hochgeladen hat. Dies gilt auch dann, wenn der Ziel-Bucket einem anderen Konto gehört. Der Objektbesitz ist wichtig für die Verwaltung von Berechtigungen mithilfe einer Bucket-Richtlinie. Damit eine Bucket-Richtlinie auf ein Objekt im Bucket angewendet werden kann, muss das Objekt dem Konto gehören, dem der Bucket gehört.

Gehen Sie folgendermaßen vor, um sicherzustellen, dass ein Zielkonto ein S3-Objekt besitzt, das von einem anderen Konto kopiert wurde:

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?