Warum kann ich keine Website-Inhalte laden, die von einem anderen AWS-Konto in meinen Amazon S3-Bucket hochgeladen wurden?

Lesedauer: 5 Minute
0

Ich verwende einen Amazon Simple Storage Service (Amazon S3)-Bucket, um Inhalte für meine Website zu speichern. Ein Benutzer von einem anderen AWS-Konto hat ein Objekt für die Website in meinen Bucket hochgeladen. Meine Bucket-Richtlinie ist korrekt, aber das Objekt wird nicht auf die Website geladen.

Kurzbeschreibung

Wenn in Ihrem Bucket Access Control Lists (ACLs) aktiviert sind, gehören Ihnen standardmäßig nicht die Objekte, die andere AWS-Konten in Ihren Bucket hochladen. Dies kann dazu führen, dass Sie das Objekt möglicherweise nicht lesen können. Das Upload-Konto muss Ihnen (dem Bucket-Besitzer) ausdrücklich Berechtigungen für das Objekt gewähren.

Darüber hinaus gilt eine Bucket-Richtlinie nicht für Objekte im Bucket, die anderen Konten gehören. Daher gilt die Bucket-Richtlinie, die den Benutzern Ihrer Website Lesezugriff gewährt, nicht automatisch für Objekte, die von einem anderen Konto hochgeladen wurden.

Wenden Sie eine der folgenden Methoden an, um dieses Problem zu beheben:

  • Deaktivieren Sie ACLs auf Ihrem S3-Buckel (bewährte Methode).
  • Bitten Sie den Objektbesitzer, dem Objekt öffentlichen Lesezugriff zu gewähren.
  • Lassen Sie sich vom Objektbesitzer die vollständige Kontrolle über das Objekt gewähren.

Behebung

ACLs auf Ihrem S3-Bucket (bewährte Methode) deaktivieren

Um ACLs in Ihrem Amazon S3-Bucket zu deaktivieren, wählen Sie die Einstellung Bucket-Besitzer erzwungen Einstellung des Objektbesitzes. Wenn Sie diese Einstellung anwenden, wird die ACL deaktiviert und Sie besitzen automatisch alle Objekte in Ihrem Bucket und haben die volle Kontrolle über sie. Selbst bei kontoübergreifend hochgeladenen Objekten gehört der Besitz dieses Objekts dem Bucket-Besitzer. Der Bucket-Besitzer kontrolliert auch, welche Bucket-Richtlinie, die Lesezugriff gewährt, für diese Objekte gilt.

Voraussetzungen

Bevor Sie ACLs deaktivieren, finden Sie weitere Informationen unter Voraussetzungen für die Deaktivierung von ACLs.

ACLs ausschalten

  1. Öffnen Sie die Amazon S3-Konsole.
  2. Wählen Sie Buckets und dann den Namen des Buckets aus, auf den Sie eine Einstellung für S3-Objekteibesitz anwenden möchten.
  3. Wählen Sie den Registerkarte Berechtigungen aus.
  4. Wählen Sie unter Eigentumsverhältnisse an Objekten die Option Bearbeiten aus.
  5. Wählen Sie unter Eigentumsverhältnisse an Objekten die Option Bucket-Besitzer erzwungen aus.
  6. Wählen Sie Speichern aus.

Wenn Ihr Anwendungsfall es Ihnen nicht erlaubt, ACLs zu deaktivieren, verwenden Sie eine dieser alternativen Methoden.

Der Objektbesitzer gewährt dem Objekt öffentlichen Lesezugriff

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

Das Konto, das das Objekt hochgeladen hat, kann dem Objekt öffentlichen Lesezugriff gewähren. Führen Sie dazu diesen AWS Command Line Interface (AWS CLI)-Befehl aus:

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl public read

Hinweis:Ersetzen Sie--bucket durch den Namen des Buckets, der den Inhalt Ihrer Website speichert.

Lassen Sie sich vom Objektbesitzer die volle Kontrolle über das Objekt gewähren

Objektbesitzer können dem Bucket-Besitzer automatisch die volle Kontrolle über ein Objekt gewähren. Aktivieren Sie dazu S3 Besitzverhältnisse an Objekten im Ziel-Bucket. Diese Funktion gewährt dem Bucket-Besitzer die Kontrolle, wenn der Objektbesitzer ein Objekt hochlädt, und beinhaltet die vorgefertigte bucket-owner-full-control-ACL.

Nachdem der Bucket-Besitzer seinen S3-Objektbesitz auf bucket-owner preferred, konfiguriert hat, kann der Bucket-Besitzer eine weitere Bucket-Richtlinie hinzufügen. Diese zusätzliche Bucket-Richtlinie muss voraussetzen, dass alle Amazon S3-PUT-Operationen die vorgefertigte ACL des Bucket-Owner-Full-Control enthalten. Diese ACL gewährt dem Bucket-Besitzer die volle Kontrolle über neue Objekte.

Um dem Bucket-Besitzer die volle Kontrolle über das Objekt zu gewähren, muss das hochladende Konto beim Hochladen des Objekts die CLI-Syntax verwenden:

aws s3api put-object --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Der Bucket-Besitzer besitzt jetzt das Objekt, und das Objekt erbt die in der Bucket-Richtlinie festgelegten Berechtigungen.

Für vorhandene Objekte, die vor der Aktivierung von S3 Object Ownership hochgeladen wurden, muss der Objektbesitzer dem Bucket-Besitzer Berechtigungen für das Objekt gewähren. Dann muss der Bucket-Besitzer das Objekt selbst kopieren.

Um dem Bucket-Besitzer die volle Kontrolle über das Objekt zu gewähren, muss das hochladende Konto die CLI-Syntax verwenden:

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Um den Objektbesitz des Objekts zu erben, muss der Bucket-Besitzer das Objekt selbst wie folgt kopieren:

aws s3 cp s3://docexamplebucket/example.jpg s3://docexamplebucket/example.jpg --acl bucket-owner-full-control

Der Bucket-Besitzer besitzt jetzt das Objekt, und das Objekt erbt die in der Bucket-Richtlinie festgelegten Berechtigungen.

Erfordert, dass kontoübergreifende Uploads dem Bucket-Besitzer die volle Kontrolle über das Objekt gewähren

Um zu verlangen, dass alle Uploads (s3:PutObject) von einem anderen Konto dem Bucket-Besitzer die volle Kontrolle über das Objekt gewähren, verwenden Sie eine Bucket-Richtlinie wie diese:

{
  "Id": "Policy1541018284691",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireBucketOwnerFullControlOnPuts",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/iam_user"
        ]
      },
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::docexamplebucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

Mit dieser Bucket-Richtlinie kann der Benutzer des anderen Kontos (111122223333) nur dann in den Bucket hochladen, wenn die ACL des Objekts angegeben ist. Die ACL des Objekts muss dem Bucket-Besitzer die volle Kontrolle gewähren. Der andere Kontobenutzer muss dann die Objekte hochladen, wie in diesem Befehl:

aws s3 cp path/to/local/file s3://docexamplebucket --acl bucket-owner-full-control

Ähnliche Informationen

So autorisiert Amazon S3 eine Anfrage

Leitlinien zur Zugriffsrichtlinie

Berechtigungen für den Website-Zugrif festlegen

Zugriff auf einen Bucket mit Benutzerrichtlinien steuern

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 6 Monaten