Ich habe einen einfachen Bucket, der images.mysite.com
auf meinem S3 und anderen Buckets mit Backups usw. aussieht .
Ich möchte einem bestimmten Benutzer ermöglichen, auf den images.mysite.com
Bucket zuzugreifen , um Bilder hochzuladen. Ich möchte jedoch nicht, dass er einen der anderen Eimer sieht. nicht einmal, dass sie existieren.
Ich konnte keine Politik machen, die dies tut; Jedes Mal, wenn ich etwas Restriktives versuche, blockiert es die Auflistung von Eimern.
https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/
. Auf diese Weise verhindern Sie, dass sie die gesamte Liste sehen, und ändern nichts an Ihrer aktuellen Richtlinie.Antworten:
Ich habe es eine Weile versucht und schließlich eine funktionierende Lösung gefunden. Sie müssen je nach Art der ausgeführten Aktion unterschiedliche "Ressourcen" verwenden. Außerdem habe ich einige fehlende Aktionen in die vorherige Antwort aufgenommen (wie
DeleteObject
) und einige weitere eingeschränkt (wiePutBucketAcl
).Die folgende IAM-Richtlinie funktioniert jetzt für mich:
Die Aktionen in Bezug auf einen Bucket und die in Bezug auf Objekte müssen unterschiedliche Arn haben.
quelle
ListAllMyBuckets
undGetBucketLocation
für alle S3-Buckets ("arn:aws:s3:::*"
funktioniert nicht"*"
für die Ressource) gewähren . In diesem AWS-Blogbeitrag heißt es: "Abgesehen davon können Sie bestimmte Buckets derzeit nicht selektiv herausfiltern. Daher müssen Benutzer die Berechtigung haben, alle Buckets für den Konsolenzugriff aufzulisten."Unser Anwendungsfall: Stellen Sie Backup-Speicherplatz für Clients unserer Cloud-Anwendung bereit, auf den die Clients direkt mit gängigen S3-Tools zugreifen können. Natürlich sollte kein Kunde sehen, was andere Kunden haben.
Wie Cloudberryman erklärte: "Sie können entweder alle oder keine Eimer auflisten.", Also müssen wir eine Lösung finden. Hintergrund:
Das Gewähren von ListAllMyBuckets-Rechten für den Benutzer ist erforderlich, damit die AWS S3-Konsole oder S3Fox ohne Fehlermeldung eine Verbindung herstellen können. ListAllMyBuckets listet jedoch alle Buckets auf, unabhängig von den zugewiesenen Ressourcen (tatsächlich funktioniert nur arn: ... ::: *). Das ist ein schwerwiegender Fehler, wenn Sie mich fragen. Übrigens. Das Verweigern von ListBucket für alle Buckets verhindert nicht, dass sie aufgelistet werden, da ListBucket Rechte zum Auflisten des Bucket-Inhalts gewährt.
Es gibt 3 Möglichkeiten, die ich als Workaround angesehen habe. Ich habe den letzten gewählt.
(1) Verwenden Sie kryptische Bucket-Namen, z. B. GUIDs
Vorteil: einfach einzurichten
Nachteil: schwer zu verwalten, insbesondere für den Kunden. (Stellen Sie sich vor, Sie finden eine bestimmte GUID unter Tausenden von anderen.) Zeigt auch die Anzahl der Buckets = Anzahl der Clients an, die den Sicherungsdienst verwenden.
(2) Verwenden Sie einen Bucket mit clientspezifischen Ordnern
Auf diese Weise schlägt Amazon anhand seiner S3 / IAM-Beispiele vor, nur bestimmten Benutzern oder Benutzergruppen Speicherplatz für den Zugriff bereitzustellen. Siehe: AWS-Beispiel-IAM-Richtlinien
Vorteil: ziemlich einfach einzurichten, passt zu AWS-Ideen
Nachteil: Erzwingt die Veröffentlichung aller Eimer, damit der Kunde seinen "Heimat" -Eimer finden kann. Die AWS-Buchhaltung bietet Statistiken zur Bucket-Nutzung, jedoch nicht zur Ordner-Nutzung, was es schwierig macht, die Kosten nach Client zu berechnen.
(3) Gewähren Sie kein Zugriffsrecht für ListAllMyBuckets
Vorteil: Sie bekommen, was Sie wollen: Kunden können die Eimer anderer Kunden nicht sehen
Nachteil: Der Kunde kann seinen eigenen Eimer nicht sehen. S3Browser wird mit einer netten Meldung "Kann nicht" geliefert und fragt nach der Eingabe des Bucket-Namens. S3Fox gibt beim Herstellen einer Verbindung zum Root eine Fehlermeldung aus, ermöglicht jedoch die direkte Navigation zum Bucket des Clients, wenn der Bucket-Name bekannt ist. Die Amazon S3-Konsole funktioniert überhaupt nicht.
Ich hoffe, dies hat dazu beigetragen, S3 IAM so zu handhaben, wie Sie es brauchen.
quelle
Es ist nicht möglich, ohne Erteilung der
ListAllMyBuckets
Berechtigung Zugriff auf die S3-Konsole zu gewähren .In meinem Fall (und vielleicht auch bei Ihrem zukünftigen Leser) besteht eine akzeptable Alternative darin, Benutzer bei der Anmeldung direkt in den Eimer umzuleiten, den sie sehen sollen.
Fügen Sie dazu Folgendes an Ihre IAM-Anmelde-URL an:
/s3/?bucket=bucket-name
Vollständige Anmelde-URL (ersetzen Sie Ihren Alias und den Bucket-Namen ):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
IAM-Richtlinie ( Bucket-Name ersetzen ):
Weitere Informationen zum Erstellen von Bucket-spezifischen Berechtigungen für Benutzer finden Sie in diesem Blog: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /.
quelle
Versuchen Sie diese Richtlinie. Berücksichtigen Sie auch, dass es nicht möglich ist, dass der Benutzer nur den ausgewählten Bucket auflistet. Sie können entweder alle oder keine Eimer auflisten.
quelle
s3:*
, um es für mich zum Laufen zu bringen. Ich hatte es auch"Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]
, aber das könnte nicht nötig sein.Ich interpretiere diese Frage wie folgt: "Kann ich den Zugriff auf einen Eimer zulassen, in dem andere Eimer nicht zugänglich und somit unsichtbar sind?" Denn das Anzeigen des Namens des Buckets, auf den kein Zugriff gewährt wurde, entspricht immer noch einem Informationsverlust.
Und die richtige Antwort ist nein. Die erforderliche Berechtigung ist ListAllMyBuckets, mit der der Benutzer ALLE Buckets anzeigen kann. Wenn Sie diese Berechtigung weglassen, wird die Konsole unbrauchbar.
quelle
Es gibt eine großartige Möglichkeit, Benutzern den Zugriff auf einen bestimmten Bucket zu ermöglichen, ohne Kenntnisse über andere Buckets zu haben. Mit einer Gruppenrichtlinie wie der folgenden können Benutzer nur "Bucket a" sehen. Der einzige Haken ist, dass der Benutzer nur dann auf den Bucket zugreifen kann, wenn er eine Verbindung zum angegebenen Bucket-Endpunkt herstellt. Für das folgende Beispiel wäre das Bucket-a.s3.amazonaws.com. Für den Bucket müssen möglicherweise auch "Authentifizierte Benutzer" zugelassen sein, damit dies geschieht.
Diese Methode wurde mit Cyberduck unter Mac OS / X und unter Verwendung des s3cmd-Pakets getestet
quelle
Verwirrt darüber, warum keine Antwort überprüft wurde?
Lassen Sie uns jede Richtlinienerklärung aus den oben genannten Lösungen aufschlüsseln:
Diese Richtlinienerklärung von gilt für den Inhalt des Buckets, nicht jedoch für den Buck selbst. Dies ist wahrscheinlich nicht das, wonach die Frage gestellt wurde, da Sie nicht sehen können, was sich im Eimer befindet.
Diese von abgeleitete Richtlinie mit zwei Anweisungen ermöglicht schreibgeschützten Zugriff auf den Bucket bei (
arn:aws:s3:::your_bucket_here/
) schreibgeschützt , ermöglicht jedoch weiterhin CRUD-Operationen für den Inhalt des Buckets (arn:aws:s3:::your_bucket_here/*
).Die Richtlinie enthält jedoch die folgende Anweisung, mit der ein Benutzer alle Buckets am Endpunkt anzeigen kann. Dies ist wahrscheinlich nicht das, wonach die Frage gestellt wurde.
Dies ist jedoch sehr nützlich, wenn Sie einen Client verwenden, der einen S3-Speicher durchsucht. Wenn Ihr Client direkt auf das Geschäft und nicht auf den Bucket zugreift, benötigen Sie Zugriff auf die Liste der Buckets im Stammverzeichnis.
quelle
Wahrscheinlich der einfachste Anwendungsfall:
quelle
This policy contains the following error: The policy must contain a valid version string
(listing included)
wie man nur den Bucket auflistet, in den der Benutzer gelangen darf? Bisher (und nach allen anderen Antworten) scheint es, als würde AWS Sie das nicht zulassen.Es gibt eine einfache Möglichkeit oder Problemumgehung, dies mithilfe von AWS-Organisationen zu tun. In der AWS-Organisation können Sie mehrere Benutzerkonten haben. Ihr Hauptkonto kann mehrere AWS-Konten (Sub) haben, und welche Dienste (s3 / EC2 / *) auch immer in den AWS-Konten hinzugefügt werden, nur diese Ressourcen sind sichtbar.
Weitere Informationen finden Sie unter https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/
Organisation Auf meiner Kontoseite
quelle
Ich habe diese Lösung gefunden:
AWS FLOW:
Bucket Policy:
IAM-Richtlinie:
aws iam get-user -–user-name USER-NAME --profile = ExampleProfile
aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile
Quelle: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
PS Seien Sie vorsichtig mit Bucket-Richtlinien, Sie können ohne Berechtigungen draußen bleiben
quelle
Wie oben ausführlich erläutert, ist es nicht möglich, nur einen Bucket auf der Konsole aufzulisten. Wenn der Zugriff des S3-Buckets jedoch an einen IAM angehängt ist, kann der IAM direkt auf den Bucket zugreifen, wenn die URL zum Bucket verfügbar ist. Die S3-Bucket-URL lautet wie folgt:
https://s3.console.aws.amazon.com/s3/buckets/BucketName
Wobei BucketName der Name des Buckets ist, auf den IAM Zugriff hat
quelle
Ich habe es geschafft, Folgendes zum Laufen zu bringen. Bedeutete, dass das Auflisten anderer Buckets die Nachricht "Zugriff verweigert" erhielt. Konnte aber immer noch den gewünschten Bucket sehen, wenn ich mich mit dem als Pfad festgelegten Bucket-Namen verband.
Ich habe Cyberduck verwendet, um diese Verbindung zu testen.
quelle
Während es nicht möglich ist,
s3:ListAllMyBuckets
Aktionen auf bestimmte Buckets zu beschränken , können Sie ihnen zur Problemumgehung eine Konsolen-URL für einen bestimmten Bucket senden, zhttps://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/
Quelle: Einschränken der Liste der S3-Buckets in der S3-Konsole
Dazu müssen Sie das folgende Richtliniendokument für einen bestimmten Benutzer oder eine bestimmte Gruppe angeben:
Wo
my-bucket-1
undmy-bucket-2
sind Ihre Eimer, um den Lese- und Schreibzugriff zu ermöglichen.Verbunden:
quelle
Versuchen Sie diese Richtlinie. Der Benutzer kann keinen Bucket auflisten, sondern muss einen direkten Link zum zulässigen Bucket verwenden.
Zum Beispiel: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview
quelle
Ähnlich wie bei anderen oben beschriebenen:
Hier ist jedoch das fehlende Stück. Während es nicht möglich ist, über S3-> Home auf den Bucket zuzugreifen, ist es möglich, über eine direkte Verbindung nur auf den gewünschten Bucket zuzugreifen.
Weitere Informationen finden Sie im folgenden Beitrag:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/
quelle
Die unten stehende Lösung hat bei mir funktioniert. Ich wollte eine Richtlinie, die einem bestimmten Benutzer my_iam_user Zugriff auf einen bestimmten Bucket my-s3-Bucket gewährt .
Diese Richtlinie ermöglicht es meinem Benutzer, Dateien in einem bestimmten s3-Bucket aufzulisten, zu löschen und abzulegen.
quelle
Ich füge nur ein ähnliches Bedürfnis hinzu, das dadurch gelöst wird:
quelle
Ich benutze die folgenden Dinge, um den Inhalt des Buckets vor anderen Benutzern zu verbergen. Dies hilft nicht nur, andere Buckets auszublenden (verwenden Sie ListAllMyBuckets nicht), sondern auch Ordner im selben Bucket, wenn Sie einen Bucket erstellen, sondern möchte Unterordner darin haben, die dem IAM-Benutzer / Unterordner die richtigen Berechtigungen zuweisen.
Die folgende Richtlinie wird auf die IAM-Gruppe angewendet und alle Benutzer befinden sich in dieser Gruppe. Sie müssen
aws:userid
einen gleichnamigen Unterordner in den Bucket aufnehmen und erstellen.Benutzer-ID kann genommen werden:
aws iam get-user --user-name "user_name_for_folder_access":
quelle
Eine nette einfache Lösung, die wir uns ausgedacht haben, besteht darin, den Benutzer für die Anmeldung im Stammverzeichnis zu blockieren. Sie müssen sich also mit dem Remote-Pfad anmelden, der auf den gewünschten Ordner eingestellt ist.
quelle
Nein, es ist derzeit nicht möglich, Benutzer darauf zu beschränken, ausgewählte Buckets unter root oder anderswo anzuzeigen. Sie haben momentan nur diese 3 Optionen.
Ich habe den Client gebeten, den Bucket-Namen explizit zu verwenden.
quelle
Dies wird von Amazon unter http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket beschrieben
quelle
Das hat perfekt für mich funktioniert. Der Benutzer kann Dateien hochladen, herunterladen und abrufen, kann jedoch keine Dateien aus einem anderen Bucket sehen.
quelle
Füge hinzu ein
Deny
Klausel für die Buckets hinzu, auf die Sie nicht zugreifen möchten. Denken Sie daran, dass sie möglicherweise noch aufgelistet sind, Sie jedoch nicht auf die darin enthaltenen Inhalte zugreifen können.quelle