Wie kann ich nur für einige Objekte in meinem Amazon-S3-Bucket öffentlichen Lesezugriff gewähren?

Letzte Aktualisierung: 29.07.2022

Ich möchte, dass einige Objekte in meinem Amazon-Simple-Storage-Service-Bucket (Amazon S3) öffentlich lesbar sind. Ich möchte jedoch nicht die Berechtigungen für andere Objekte ändern, die sich im selben Bucket befinden. Wie mache ich das?

Kurzbeschreibung

Gewähren Sie öffentlichen Lesezugriff auf eine der folgenden Arten:

  • Aktualisieren Sie die Zugriffssteuerungsliste (ACL) des Objekts mithilfe der Amazon-S3-Konsole
  • Aktualisieren Sie die ACL des Objekts mithilfe der AWS-Befehlszeilenschnittstelle (AWS CLI)
  • Verwenden Sie eine Bucket-Richtlinie, die öffentlichen Lesezugriff auf ein bestimmtes Objekt-Tag gewährt
  • Verwenden Sie eine Bucket-Richtlinie, die öffentlichen Lesezugriff auf ein bestimmtes Präfix gewährt

Wichtig: Das Gewähren von öffentlichem 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 gewähren. Verwenden Sie stattdessen AWS Identity Access and Management (IAM)-Richtlinien und S3-Bucket-Richtlinien, um Berechtigungen für Objekte und Buckets zu erteilen.

Standardmäßig erlauben neue Buckets, Zugriffspunkte und Objekte keinen öffentlichen Zugriff. Wenn die Option „Öffentlichen Zugriff blockieren“ für alle Buckets innerhalb des Kontos aktiviert ist, wird die Meldung „Bucket und Objekte nicht öffentlich“ angezeigt. Weitere Informationen finden Sie unter Konfigurieren der Einstellungen zum Blockieren des öffentlichen Zugriffs für Ihr Konto.

Auflösung

Wichtig: Bevor Sie beginnen, vergewissern Sie sich, dass Sie auf Konto- oder Bucket-Ebene keine Block-Einstellungen für den öffentlichen Zugriff haben. Ihre Einstellungen dürfen Sie nicht daran hindern, die Objekte öffentlich zu machen. Standardmäßig sind die Einstellungen zum Blockieren des öffentlichen Zugriffs bei neuen S3-Buckets auf True gesetzt.

Aktualisieren Sie die ACL des Objekts mithilfe der Amazon-S3-Konsole

Gehen Sie folgendermaßen vor, um mehrere Objekte gleichzeitig öffentlich zu machen:

Warnung: Nachdem Sie mehrere Objekte öffentlich gemacht haben, gibt es keine Möglichkeit, diese Aktion für mehrere Objekte gleichzeitig rückgängig zu machen. Um den öffentlichen Zugriff zu entfernen, müssen Sie jedes Objekt in der Amazon-S3-Konsole aufrufen. Ändern Sie dann auf der Registerkarte Berechtigungen des Objekts den öffentlichen Zugriff. Sie müssen dies für jedes Objekt tun, für das Sie den gewährten öffentlichen Zugriff rückgängig machen möchten. Überprüfen Sie die Liste der Objekte sorgfältig, bevor Sie sie öffentlich machen.

1.    Öffnen Sie die Amazon-S3-Konsole.

2.    Wählen Sie aus der Liste der Buckets den Bucket mit den Objekten aus, die Sie aktualisieren möchten.

3.    Navigieren Sie zu dem Ordner, der die Objekte enthält.

4.    Wählen Sie aus der Objektliste alle Objekte aus, die Sie öffentlich machen möchten.

5.    Wählen Sie Aktionen und anschließend Öffentlich machen.

6.    Bestätigen Sie im Dialogfeld Öffentlich machen, dass die Liste der Objekte korrekt ist.

7.    Wählen Sie Öffentlich machen.

Um ein einzelnes Objekt öffentlich zu machen, können Sie den vorherigen Vorgang wiederholen oder die folgenden Schritte ausführen:

1.    Wählen Sie in der Amazon-S3-Konsole den Bucket mit dem Objekt aus, das Sie aktualisieren möchten.

2.    Navigieren Sie zu dem Ordner, der das Objekt enthält.

3.    Öffnen Sie das Objekt, indem Sie den Link auf dem Objektnamen auswählen.

4.    Wählen Sie die Registerkarte Berechtigungen.

5.    Wählen Sie Bearbeiten.

6.    Wählen Sie im Abschnitt Jeder die Option Gelesene Objekte aus.

7.    Wählen Sie Ich verstehe die Auswirkungen dieser Änderungen auf dieses Objekt.

8.    Wählen Sie Änderungen speichern.

Aktualisieren Sie die ACL des Objekts mithilfe der AWS-CLI

Für ein Objekt, das Sie bereits in Amazon S3 gespeichert haben, können Sie diesen Befehl ausführen, um seine ACL für den öffentlichen Lesezugriff zu aktualisieren:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

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

Oder Sie können diesen Befehl ausführen, um dem AWS-Kontoinhaber die volle Kontrolle über das Objekt und allen anderen Lesezugriff zu gewähren:

Hinweis: Geben Sie für den Wert von --grant-full-control die kanonische Benutzer-ID des Kontos ein.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

Verwenden Sie eine Bucket-Richtlinie, die öffentlichen Lesezugriff auf ein bestimmtes Objekt-Tag gewährt

Wichtig: Bevor Sie beginnen, sollten Sie unbedingt die Preise für S3-Objektkennzeichnung überprüfen.

Fügen Sie zunächst eine Bucket-Richtlinie hinzu, die öffentlichen Lesezugriff auf alle Objekte mit einem bestimmten Tag ermöglicht. Diese Richtlinie ermöglicht beispielsweise öffentlichen Lesezugriff für jedes Objekt, das mit dem Schlüssel-Wert-Paar public=yes gekennzeichnet ist:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/public": "yes"
        }
      }
    }
  ]
}

Fügen Sie dann den Tag zu den Objekten hinzu, die öffentlich lesbar sein sollen. Sie können Objekt-Tags mithilfe der Amazon-S3-Konsole hinzufügen oder verwalten. Oder Sie können die AWS CLI verwenden.

Um zu überprüfen, ob ein Objekt über vorhandene Tags verfügt, führen Sie diesen AWS-CLI-Befehl aus:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Um ein Tag zu einem Objekt hinzuzufügen, das keine vorhandenen Tags hat, führen Sie diesen Befehl aus:

Warnung: Dieser Befehl überschreibt alle vorhandenen Objekttags.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

Um ein Tag zu einem Objekt mit vorhandenen Tags hinzuzufügen, führen Sie den folgenden Befehl aus. Stellen Sie sicher, dass Sie das neue Objekt-Tag sowie die vorhandenen Tags, die Sie behalten möchten, einschließen.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

Nachdem Sie den Objekt-Tag hinzugefügt haben, führen Sie diesen Befehl aus, um die Tags aller Objekte zu überprüfen:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Verwenden Sie eine Bucket-Richtlinie, die öffentlichen Lesezugriff auf ein bestimmtes Präfix gewährt

Warnung: Die folgende Bucket-Richtlinie gewährt öffentlichen Lesezugriff auf alle Objekte unter einem bestimmten Präfix. Bevor Sie diese Bucket-Richtlinie verwenden, vergewissern Sie sich, dass Ihr Anwendungsfall alle öffentlich lesbaren Objekte innerhalb des Präfixes unterstützt. Diese Richtlinie gewährt keinen Listenzugriff für das Präfix. Der Benutzer kann nur auf das Objekt zugreifen, wenn der Objektpfad bekannt ist. Beim Zugriff auf ein Objekt, das im Präfix nicht vorhanden ist, erhält der Benutzer einen 403-Fehler.

Um öffentlichen Lesezugriff auf ein bestimmtes Objektpräfix zu gewähren, fügen Sie eine Bucket-Richtlinie hinzu, die der folgenden ähnelt:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"]
      }
  ]
}

Kopieren Sie dann die Objekte in das Präfix mit öffentlichem Lesezugriff. Sie können ein Objekt in das Präfix kopieren, indem Sie einen Befehl ausführen, der dem folgenden ähnlich ist:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

Hinweis: Abhängig vom Präfix des Objekts ist das Kopieren des Objekts nicht erforderlich, um öffentlichen Lesezugriff zu gewähren.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?