Wie kann ich zu meinen Objekten in Amazon S3 eine ACL mit vollständiger Kontrolle für Bucket-Eigentümer hinzufügen?

Lesedauer: 7 Minute
0

Ich versuche, die Zugriffskontrollliste (ACL) mit vollständiger Kontrolle für Bucket-Eigentümer zu vorhandenen Objekten in Amazon Simple Storage Service (Amazon S3) hinzuzufügen. Wie kann ich vorgehen?

Kurzbeschreibung

In einem kontenübergreifenden Szenario, in dem andere AWS-Konten Objekte in Ihren Amazon-S3-Bucket hochladen, bleiben die Objekte standardmäßig Eigentum des hochladenden Kontos. Wenn die ACL mit vollständiger Kontrolle für Bucket-Eigentümer hinzugefügt wird, hat der Bucket-Eigentümer die volle Kontrolle über alle neuen Objekte, die von anderen Konten geschrieben werden.

Wenn der Objektschreiber keine Berechtigungen für das Zielkonto auf Objekt-ACL-Ebene festlegt, kann das Zielkonto nur Objekte löschen.

Wenn die ACL des Bucket-Eigentümers mit voller Kontrolle hinzugefügt wird, hat der Bucket-Eigentümer die volle Kontrolle über alle neuen Objekte, die von anderen AWS-Konten geschrieben werden. Diese ACL ist auch erforderlich, wenn der Ziel-Bucket S3-Objektbesitz aktiviert hat. Wenn S3-Objektbesitz aktiviert ist, wird der Besitzer neuer Objekte auf das Zielkonto aktualisiert.

Wichtig: Das Gewähren von kontenübergreifendem Zugriff über Bucket- und Objekt-ACLs funktioniert nicht für Buckets, bei denen S3 Object Ownership auf „Bucket-Eigentümer erzwungen“ gestellt ist. In den meisten Fällen müssen ACLs keine Berechtigungen für Objekte und Buckets erteilen. Verwenden Sie stattdessen AWS Identity Access and Management (IAM)-Richtlinien und S3-Bucket-Richtlinien, um Berechtigungen für Objekte und Buckets zu erteilen.

Bei vorhandenen Objekten kann der Objektbesitzer dem Bucket-Eigentümer die volle Kontrolle über das Objekt gewähren, indem er die ACL des Objekts aktualisiert. Beim Schreiben neuer Objekte kann die ACL mit voller Kontrolle für den Bucket-Eigentümer während eines PUT- oder COPY-Vorgangs angegeben werden.

Damit ein Benutzer in Konto A Objekten in Konto B die vordefinierte ACL mit voller Kontrolle für den Bucket-Eigentümer erteilen kann, müssen die folgenden Berechtigungen erteilt werden:

  • Ihre IAM-Rolle oder Ihr Benutzer in Konto A muss Zugriff auf den Bucket in Konto B gewähren
  • Ihre Bucket-Richtlinie in Konto B muss Zugriff auf die IAM-Rolle oder den Benutzer in Konto A gewähren

Sie können wie folgt Zugriff auf Objekte mit voller Kontrolle für Bucket-Eigentümer gewähren:

  • Vordefinierte ACLs
  • S3 Batch Operations (für umfassende Batchvorgänge)

Hinweis: Überprüfen Sie unbedingt Ihre VPC-Endpunkt-Richtlinie, wenn Sie Ihren S3-Objekten die vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer hinzufügen.

Auflösung

Ihre IAM-Rolle oder Ihr Benutzer in Konto A muss Zugriff auf den Bucket in Konto B gewähren.

Hinweis: Wenn der IAM-Benutzer oder die IAM-Rolle die ACL des Objekts während des Uploads aktualisieren muss, muss der Benutzer in seiner IAM-Richtlinie über Berechtigungen für s3:PutObjectAcl verfügen.

Erstellen Sie eine IAM-Rolle in Konto A. Erteilen Sie Rollen-/Benutzerberechtigungen zum Ausführen von PutObjectAcl für Objekte in Konto B.

Die folgende Beispielrichtlinie gewährt der IAM-Rolle in Konto A Zugriff zum Ausführen der Aktionen GetObject, PutObject und PutObjectAcl für Objekte in Konto B:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

Ihre Bucket-Richtlinie in Konto B muss dem IAM-Benutzer oder der IAM-Rolle in Konto A Zugriff gewähren.

Bucket-Richtlinien können je nach vordefinierter ACL-Anforderung beim Hochladen von Objekten variieren. Diese beiden Bucket-Richtlinien gewähren beispielsweise dem IAM-Benutzer oder der IAM-Rolle in Konto A auf unterschiedliche Weise Zugriff:

  • Richtlinie 1: Ermöglicht den Zugriff auf den IAM-Benutzer oder die IAM-Rolle in Konto A, ohne dass PUT-Vorgänge in Amazon S3 vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer enthalten müssen.
  • Richtlinie 2: Erzwingt alle PUT-Vorgänge in Amazon S3, um die vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer einzubeziehen.

Richtlinie 1: Erlaubt den Zugriff auf den IAM-Benutzer oder die IAM-Rolle in Konto A, ohne dass PUT-Vorgänge in Amazon S3 eine vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer enthalten müssen

Um den Zugriff auf die IAM-Rolle in Konto A zu erlauben, ohne eine ACL zu benötigen, erstellen Sie eine Bucket-Richtlinie in Konto B (wo Objekte hochgeladen werden). Diese Bucket-Richtlinie muss Zugriff auf die IAM-Rolle oder den Benutzer in Konto A gewähren. Die folgende Bucket-Richtlinie erlaubt der Rolle in Konto A, die Aktionen GetObject, PutObject und PutObjectAcl für die Objekte in Konto B ausführen:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountA:role/AccountARole"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::AccountB-Bucket/*"
            ]
        }
    ]
}

Richtlinie 2: Erzwingt alle PUT-Vorgänge in Amazon S3, um die vordefinierte ACL mit vollständiger Kontrolle für die Bucket-Eigentümer einzubeziehen

Die folgende Bucket-Richtlinie legt fest, dass ein Benutzer oder eine Rolle in Konto A Objekte in einen Bucket in Konto B hochladen kann (wo Objekte hochgeladen werden sollen). Uploads können nur durchgeführt werden, wenn die ACL des Objekts auf „Vollständige Kontrolle für Bucket-Eigentümer“ eingestellt ist. Beispiel:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Only allow writes to my bucket with bucket owner full control",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AccountA:role/AccountARole"
                ]
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

Hinweis: Wenn die vorhergehende Bucket-Richtlinie angewendet wird, muss der Benutzer während des Vorgangs PutObject die vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer einbeziehen. Andernfalls schlägt der Vorgang fehl, was zu dem Fehler Access Denied (Zugriff verweigert) führt. Weitere Informationen darüber, wie Amazon S3 den Objektbesitz für andere AWS-Konten aktiviert, finden Sie unter Steuern des Besitzes von hochgeladenen Objekten mithilfe von S3 Object Ownership.

Bereitstellung von Zugriff mit vollständiger Kontrolle für Bucket-Eigentümer

Vordefinierte ACLs

Führen Sie den Befehl put-object über Konto A (Konto des Objektbesitzers) aus, um eine vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer während eines Objekt-Uploads zu gewähren:

aws s3api put-object --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Um während eines Kopiervorgangs eine vordefinierte ACL mit vollständiger Kontrolle für Bucket Besitzer zu gewähren, führen Sie den Befehl copy-object von Konto A (Konto des Objektbesitzers) aus:

aws s3api copy-object --copy-source accountA-bucket/example.txt --key example.txt --bucket accountB-bucket --acl bucket-owner-full-control

Oder Sie können den Befehl cp auch von Konto A aus ausführen, um die vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer zu gewähren:

aws s3 cp s3://accountA-bucket/test.txt s3://accountB-bucket/test2.txt --acl bucket-owner-full-control

Für einen Kopiervorgang mehrerer Objekte kann der Objektbesitzer (Konto A) den folgenden Befehl ausführen:

aws s3 cp s3://accountA-bucket/ s3://accountB-bucket/ --acl bucket-owner-full-control --recursive

Wenn das Objekt in einem Bucket in einem anderen Konto (Konto B) existiert, kann der Objektbesitzer dem Bucket-Eigentümer mit diesem Befehl Zugriff gewähren:

aws s3api put-object-acl --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

S3 Batch Operations

Verwenden Sie S3 Batch Operations, um die vordefinierte ACL mit vollständiger Kontrolle für Bucket-Eigentümer für eine große Anzahl von Amazon-S3-Objekten hinzuzufügen. S3 Batch Operations kann einen einzelnen Vorgang für eine Liste von Objekten ausführen, die Sie angeben. Sie können S3 Batch Operations sogar verwenden, um ACLs für eine große Anzahl von Objekten festzulegen. S3 Batch Operations unterstützen benutzerdefinierte und vordefinierte ACLs, die Amazon S3 mit einem vordefinierten Satz von Zugriffsberechtigungen bereitstellt.

Hinweis: Der Vorgang Zugriffskontrollliste (ACL) ersetzen ersetzt die Amazon-S3-ACLs für jedes Objekt, das im Manifest aufgeführt ist.

Zusätzliche Überlegungen

Zugriff durch eine VPC-Endpunkt-Richtlinie erlaubt

Wenn eine IAM-Rolle Objekte mithilfe einer Instanz, die über einen Virtual Private Cloud (VPC)-Endpunkt geroutet wird, auf S3 hochlädt, überprüfen Sie die VPC-Endpunkt-Richtlinie. Wenn beispielsweise ein Objekt mithilfe einer Amazon-Elastic-Compute-Cloud(Amazon EC2)-Instanz in einer VPC auf S3 hochgeladen wird, muss die VPC-Endpunkt-Richtlinie überprüft werden. Stellen Sie sicher, dass Ihre Endpunkt-Richtlinie wie folgt Zugriff auf die Aktion PutObjectAcl gewährt:

{
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren