Amazon S3-Berechtigungsproblem - Wie werden Berechtigungen für alle Dateien gleichzeitig festgelegt?

76

Ich habe einige Dateien über die Amazon AWS-Verwaltungskonsole hochgeladen.

Ich habe einen HTTP 403 Access deniedFehler bekommen. Ich fand heraus, dass ich die Erlaubnis auf setzen musste view.

Wie würde ich das für alle Dateien im Bucket tun?

Ich weiß, dass es möglich ist, Berechtigungen für jede Datei festzulegen, aber es ist zeitaufwändig, wenn viele Dateien vorhanden sind, die für alle sichtbar sein müssen.

Schienen Anfänger
quelle

Antworten:

123

Ich schlage vor, dass Sie eine Bucket-Richtlinie 1 auf den Bucket anwenden, in dem Sie öffentliche Inhalte speichern möchten. Auf diese Weise müssen Sie nicht für jedes Objekt eine ACL festlegen. Hier ist ein Beispiel für eine Richtlinie, mit der alle Dateien im Bucket mybucket öffentlich gemacht werden.

{
    "Version": "2008-10-17",
    "Id": "http better policy",
    "Statement": [
        {
            "Sid": "readonly policy",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/sub/dirs/are/supported/*"
        }
    ]
}

Das *in "Resource": "arn:aws:s3:::mybucket/sub/dirs/are/supported/*"erlaubt Rekursion.


1 Beachten Sie, dass sich eine Bucket-Richtlinie von einer IAM-Richtlinie unterscheidet. (Zum einen wird eine Fehlermeldung angezeigt, wenn Sie versuchen, Principaleine IAM-Richtlinie aufzunehmen.) Die Bucket-Richtlinie kann bearbeitet werden, indem Sie das Stammverzeichnis des Buckets in Ihrer AWS-Webkonsole verschieben und Eigenschaften> Berechtigungen erweitern. Unterverzeichnisse eines Buckets haben ebenfalls Eigenschaften> Berechtigungen, es gibt jedoch keine Option dazuEdit bucket policy

Cloudberryman
quelle
4
Nur für den Fall, dass jemand anderes davon betroffen ist, muss die Version genau den Angaben entsprechen.
opsb
9
Für den Fall, dass sich jemand fragt, wie eine Bucket-Richtlinie festgelegt werden soll, finden Sie hier die offizielle AWS-Dokumentation: docs.amazonwebservices.com/AmazonS3/latest/dev/…
Herman J. Radtke III
6
Sie haben auch ein nützliches Werkzeug, um diese zu generieren: awspolicygen.s3.amazonaws.com/policygen.html
Ben Sharpe
2
S3 Browser ist ein UI-Toolkit, das dies kann. Es hat eine Freeware-Version, die meiner Meinung nach das tun sollte, was Sie brauchen. s3browser.com wir verwenden ihre kostenpflichtige Version (es ist wie 30 $) und ich weiß, dass es all diese Dinge in ein paar Klicks für schnelle Aufgaben erledigt, bei denen Sie keine Gebühren wie Codierung erheben
Glenn
3
Ich habe versucht, dies in die S3-Konsole einzufügen. Es wird beanstandet, dass es nicht gültig ist. Sie müssen das nachfolgende Komma nach der Zeile "Ressource" und das anfängliche Leerzeichen vor dem ersten {entfernen.
Jon Tirsen
5

Sie können auswählen, welches Verzeichnis öffentlich sein soll.

Drücken Sie auf "Mehr" und markieren Sie es als öffentlich. Dadurch werden das Verzeichnis und alle Dateien als öffentlich zugänglich.

mohammad zein
quelle
4

Sie können ACLs nur für einen eindeutigen Artikel (Eimer oder Artikel) ändern. Sie müssen sie also einzeln ändern.

Bei einigen S3-Verwaltungsanwendungen können Sie dieselbe ACL auf alle Elemente in einem Bucket anwenden. Intern wird die ACL jedoch einzeln auf alle Elemente angewendet.

Wenn Sie Ihre Dateien programmgesteuert hochladen, ist es wichtig, die ACL beim Hochladen der Datei anzugeben, damit Sie sie später nicht ändern müssen. Das Problem bei der Verwendung einer S3-Verwaltungsanwendung (wie Cloudberry, Transmit, ...) besteht darin, dass die meisten von ihnen beim Hochladen jeder Datei die Standard-ACL (privat schreibgeschützt) verwenden.

Daniel García
quelle
2

Mit dem S3-Browser können Sie Berechtigungen auch rekursiv über die GUI aktualisieren. Es ist ein nützliches Tool und kostenlos für den nichtkommerziellen Gebrauch.

Paul Siersma
quelle
2

Sie können die ACL für jede Datei mit aws cli festlegen:

BUCKET_NAME=example
BUCKET_DIR=media
NEW_ACL=public-read

aws s3 ls $BUCKET_NAME/$BUCKET_DIR/ | \
awk '{$1=$2=$3=""; print $0}' | \
xargs -t -I _ \
aws s3api put-object-acl --acl $NEW_ACL --bucket $BUCKET_NAME --key "$BUCKET_DIR/_"
Moppag
quelle
Diese Lösung ist gut, wenn die Dateien direkt schlechte Eigenschaften haben :) Man könnte auch etwas Ähnliches in Python mit boto3ObjectAcl oder genauer schreiben, was S3.ObjectAcl.putzu etwas führen würde, das leichter zu lesen ist.
GabLeRoux
2

Ich hatte das gleiche Problem beim Hochladen der Dateien über Programm (Java) in S3 Bucket ..

Fehler: In der angeforderten Ressource ist kein Header 'Access-Control-Allow-Origin' vorhanden.
Origin ' http: // localhost: 9000 ' ist daher kein Zugriff gestattet. Die Antwort hatte den HTTP-Statuscode 403

Ich habe die Ursprungsidentität hinzugefügt und die Bucket-Richtlinie und die CORS-Konfiguration geändert, dann hat alles gut funktioniert.

Manju Shingadi
quelle
1

Senden 5

Ich wollte dies hier für potenzielle MacOS-Benutzer hinzufügen, die bereits die wunderschön gestaltete FTP-App Transmit by Panic haben.

Ich hatte bereits Panic und es unterstützt S3-Buckets (nicht sicher, in welcher Version dies kam, aber ich denke, die Upgrades waren kostenlos). Es unterstützt auch die rekursive Aktualisierung von Lese- und Schreibberechtigungen.

Klicken Sie einfach mit der rechten Maustaste auf das Verzeichnis, das Sie aktualisieren möchten, und wählen Sie die Lese- und Schreibberechtigungen aus, auf die Sie sie festlegen möchten.

Es scheint nicht besonders schnell zu sein, aber Sie können die Protokolldatei unter Fenster> Transkript öffnen, damit Sie zumindest wissen, dass sie etwas bewirkt.

Joshua Pinter
quelle
1

Gehen Sie wie folgt vor, um einen Großteil der Dateien öffentlich zu machen:

  1. Gehen Sie zur S3-Weboberfläche
  2. Öffnen Sie den gewünschten Eimer
  3. Wählen Sie die gewünschten Dateien und Ordner aus, indem Sie auf die Kontrollkästchen links in der Liste klicken
  4. Klicken Sie oben in der Liste auf die Schaltfläche «Mehr» und dann auf «Öffentlich machen».
  5. Bestätigen Sie mit «Öffentlich machen». Die Dateien haben trotz der Warnung "... dieses Objekt lesen, Lese- und Schreibberechtigungen lesen" keinen öffentlichen Schreibzugriff.
Finesse
quelle
0

Verwenden Sie den AWS-Richtliniengenerator , um eine Richtlinie zu generieren, die Ihren Anforderungen entspricht. Der Principal im Richtliniengenerator sollte der IAM-Benutzer / die IAM-Rolle sein, die Sie für den Zugriff auf die Objekte verwenden würden. Ressourcen-ARN sollte seinarn:aws:s3:::mybucket/sub/dirs/are/supported/*

Klicken Sie anschließend auf "Anweisung hinzufügen" und folgen Sie den Anweisungen. Sie erhalten schließlich einen JSON, der die Richtlinie darstellt. Fügen Sie dies in Ihren Abschnitt zur Verwaltung von s3-Bucket-Richtlinien ein, der sich unter "Ihre s3-Bucket-Seite in AWS -> Berechtigungen -> Bucket-Richtlinie" befindet.

user2906555
quelle