Bucket- und Gruppenzugriffsrichtlinien
StorageGRID verwendet die Richtliniensprache für Amazon Web Services (AWS), um S3-Mandanten die Kontrolle des Zugriffs auf Buckets und Objekte innerhalb dieser Buckets zu ermöglichen. Das StorageGRID System implementiert eine Untermenge der S3-REST-API-Richtliniensprache. Zugriffsrichtlinien für die S3 API werden in JSON geschrieben.
Zugriffsrichtlinien – Überblick
Von StorageGRID werden zwei Arten von Zugriffsrichtlinien unterstützt:
-
Bucket-Richtlinien, die mit DER GET Bucket-Richtlinie konfiguriert sind, PUT Bucket-Richtlinie und S3-API-Operationen FÜR die Bucket-Richtlinie LÖSCHEN. Bucket-Richtlinien sind mit Buckets verknüpft, so dass sie so konfiguriert sind, dass sie den Zugriff durch Benutzer im Bucket-Eigentümerkonto oder andere Konten an den Bucket und die darin befindlichen Objekte steuern. Eine Bucket-Richtlinie gilt nur für einen Bucket und möglicherweise auch für mehrere Gruppen.
-
Gruppenrichtlinien, die mit dem Tenant Manager oder der Mandantenmanagement-API konfiguriert sind. Gruppenrichtlinien sind einer Gruppe im Konto zugeordnet, sodass sie so konfiguriert sind, dass sie der Gruppe ermöglichen, auf bestimmte Ressourcen zuzugreifen, die dem Konto gehören. Eine Gruppenrichtlinie gilt nur für eine Gruppe und möglicherweise für mehrere Buckets.
StorageGRID Bucket und Gruppenrichtlinien folgen einer bestimmten Grammatik, die von Amazon definiert wurde. Innerhalb jeder Richtlinie gibt es eine Reihe von Richtlinienerklärungen, und jede Aussage enthält die folgenden Elemente:
-
Statement-ID (Sid) (optional)
-
Wirkung
-
Principal/NotPrincipal
-
Ressource/Ressource
-
Aktion/Notaktion
-
Bedingung (optional)
Richtlinienerklärungen werden anhand dieser Struktur erstellt, um Berechtigungen festzulegen: Wirkung gewähren, um dem Auftraggeber die Durchführung von Aktionen auf Ressource zu erlauben/zu verweigern, wenn Bedingung zutrifft.
Jedes Richtlinienelement wird für eine bestimmte Funktion verwendet:
Element | Beschreibung |
---|---|
Sid |
Das Sid-Element ist optional. Der Sid ist nur als Beschreibung für den Benutzer gedacht. Diese wird vom StorageGRID System gespeichert, aber nicht interpretiert. |
Wirkung |
Verwenden Sie das Effektelement, um festzustellen, ob die angegebenen Vorgänge zulässig oder verweigert werden. Sie müssen anhand der Schlüsselwörter für unterstütztes Aktionselement Operationen identifizieren, die für Buckets oder Objekte zugelassen (oder verweigert) werden. |
Principal/NotPrincipal |
Benutzer, Gruppen und Konten können auf bestimmte Ressourcen zugreifen und bestimmte Aktionen ausführen. Wenn in der Anfrage keine S3-Signatur enthalten ist, ist ein anonymer Zugriff durch Angabe des Platzhalterzeichens (*) als Principal zulässig. Standardmäßig hat nur das Konto-Root Zugriff auf Ressourcen, die dem Konto gehören. Sie müssen nur das Hauptelement in einer Bucket-Richtlinie angeben. Bei Gruppenrichtlinien ist die Gruppe, der die Richtlinie zugeordnet ist, das implizite Prinzipalelement. |
Ressource/Ressource |
Das Ressourcenelement identifiziert Buckets und Objekte. Sie können Buckets und Objekten über den ARN (Amazon Resource Name) Berechtigungen gewähren oder verweigern, um die Ressource zu identifizieren. |
Aktion/Notaktion |
Die Elemente Aktion und Wirkung sind die beiden Komponenten von Berechtigungen. Wenn eine Gruppe eine Ressource anfordert, wird ihnen entweder der Zugriff auf die Ressource gewährt oder verweigert. Der Zugriff wird verweigert, es sei denn, Sie weisen ausdrücklich Berechtigungen zu, aber Sie können explizites Ablehnen verwenden, um eine von einer anderen Richtlinie gewährte Berechtigung zu überschreiben. |
Zustand |
Das Bedingungselement ist optional. Unter Bedingungen können Sie Ausdrücke erstellen, um zu bestimmen, wann eine Richtlinie angewendet werden soll. |
Im Element Aktion können Sie das Platzhalterzeichen (*) verwenden, um alle Vorgänge oder eine Untermenge von Vorgängen anzugeben. Diese Aktion entspricht beispielsweise Berechtigungen wie s3:GetObject, s3:PutObject und s3:DeleteObject.
s3:*Object
Im Element Ressource können Sie die Platzhalterzeichen (*) und (?) verwenden. Während das Sternchen (*) mit 0 oder mehr Zeichen übereinstimmt, ist das Fragezeichen (?) Entspricht einem beliebigen Zeichen.
Im Principal-Element werden Platzhalterzeichen nicht unterstützt, außer wenn anonymer Zugriff festgelegt wird, der allen die Berechtigung erteilt. Sie legen beispielsweise den Platzhalter (*) als Principal-Wert fest.
"Principal":"*"
Im folgenden Beispiel verwendet die Anweisung die Elemente „Effekt“, „Principal“, „Aktion“ und „Ressource“. Dieses Beispiel zeigt eine vollständige Bucket-Richtlinienanweisung, die den Principals, die Admin-Gruppe, mit dem Effekt „Zulassen“ erhält federated-group/admin
Und der Finanzgruppe federated-group/finance
, Berechtigungen zur Durchführung der Aktion s3:ListBucket
Auf dem genannten Bucket mybucket
Und der Aktion s3:GetObject
Auf allen Objekten in diesem Bucket.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::27233906934684427525:federated-group/admin", "arn:aws:iam::27233906934684427525:federated-group/finance" ] }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:iam:s3:::mybucket", "arn:aws:iam:s3:::mybucket/*" ] } ] }
Die Bucket-Richtlinie hat eine Größenbeschränkung von 20,480 Byte, und die Gruppenrichtlinie hat ein Größenlimit von 5,120 Byte.
Einstellungen zur Konsistenzkontrolle für Richtlinien
Standardmäßig sind alle Aktualisierungen, die Sie an Gruppenrichtlinien vornehmen, letztendlich konsistent. Sobald eine Gruppenrichtlinie konsistent wird, können die Änderungen aufgrund von Richtlinien-Caching weitere 15 Minuten dauern. Standardmäßig sind alle Updates an den Bucket-Richtlinien ebenfalls konsistent.
Sie können bei Bedarf die Konsistenzgarantien für Bucket-Richtlinienaktualisierungen ändern. Beispielsweise könnte eine Änderung an einer Bucket-Richtlinie aus Sicherheitsgründen so schnell wie möglich wirksam werden.
In diesem Fall können Sie entweder die einstellen Consistency-Control
Kopfzeile in der ANFORDERUNG DER PUT Bucket-Richtlinie, oder Sie können die PUT-Bucket-Konsistenzanforderung verwenden. Wenn Sie die Consistency Control für diese Anfrage ändern, müssen Sie den Wert all verwenden, der die höchste Garantie für die Konsistenz von Lesen nach dem Schreiben bietet. Wenn Sie einen anderen Wert für Consistency Control in einer Kopfzeile für die PUT Bucket Consistency Request angeben, wird die Anforderung abgelehnt. Wenn Sie einen anderen Wert für eine PUT Bucket Policy Request angeben, wird der Wert ignoriert. Sobald eine Bucket-Richtlinie konsistent ist, können die Änderungen aufgrund des Richtlinien-Caching weitere 8 Sekunden dauern.
Wenn Sie die Konsistenzstufe auf alle setzen, um eine neue Bucket-Richtlinie früher wirksam zu machen, stellen Sie die Bucket-Level-Kontrolle sicher, dass sie wieder auf ihren ursprünglichen Wert zurückgestellt wird, wenn Sie fertig sind. Andernfalls wird für alle zukünftigen Bucket-Anforderungen die all-Einstellung verwendet. |
Verwenden Sie ARN in den Richtlinienerklärungen
In den Richtlinienerklärungen wird das ARN in Haupt- und Ressourcenelementen verwendet.
-
Verwenden Sie diese Syntax, um die S3-Ressource ARN anzugeben:
arn:aws:s3:::bucket-name arn:aws:s3:::bucket-name/object_key
-
Verwenden Sie diese Syntax, um die Identitätressource ARN (Benutzer und Gruppen) festzulegen:
arn:aws:iam::account_id:root arn:aws:iam::account_id:user/user_name arn:aws:iam::account_id:group/group_name arn:aws:iam::account_id:federated-user/user_name arn:aws:iam::account_id:federated-group/group_name
Weitere Überlegungen:
-
Sie können das Sternchen (*) als Platzhalter verwenden, um Null oder mehr Zeichen im Objektschlüssel zu entsprechen.
-
Internationale Zeichen, die im Objektschlüssel angegeben werden können, sollten mit JSON UTF-8 oder mit JSON \U Escape Sequenzen codiert werden. Die prozentuale Kodierung wird nicht unterstützt.
Der HTTP-Anforderungskörper für DEN PUT Bucket-Richtlinienvorgang muss mit charset=UTF-8 codiert werden.
Geben Sie Ressourcen in einer Richtlinie an
In Richtlinienausrechnungen können Sie mithilfe des Elements Ressourcen den Bucket oder das Objekt angeben, für das Berechtigungen zulässig oder verweigert werden.
-
Jede Richtlinienanweisung erfordert ein Ressourcenelement. In einer Richtlinie werden Ressourcen durch das Element gekennzeichnet
Resource
, Oder alternativ ,NotResource
Für Ausschluss. -
Sie legen Ressourcen mit einer S3-Ressource ARN fest. Beispiel:
"Resource": "arn:aws:s3:::mybucket/*"
-
Sie können Richtlinienvariablen auch innerhalb des Objektschlüssels verwenden. Beispiel:
"Resource": "arn:aws:s3:::mybucket/home/${aws:username}/*"
-
Der Ressourcenwert kann einen Bucket angeben, der beim Erstellen einer Gruppenrichtlinie noch nicht vorhanden ist.
Principals in einer Policy angeben
Verwenden Sie das Hauptelement, um das Benutzer-, Gruppen- oder Mandantenkonto zu identifizieren, das über die Richtlinienanweisung Zugriff auf die Ressource erlaubt/verweigert wird.
-
Jede Richtlinienanweisung in einer Bucket-Richtlinie muss ein Principal Element enthalten. Richtlinienerklärungen in einer Gruppenpolitik benötigen das Hauptelement nicht, da die Gruppe als Hauptbestandteil verstanden wird.
-
In einer Richtlinie werden die Prinzipien durch das Element „
Principal,
“ oder alternativ „NotPrincipal
“ für den Ausschluss gekennzeichnet. -
Kontobasierte Identitäten müssen mit einer ID oder einem ARN angegeben werden:
"Principal": { "AWS": "account_id"} "Principal": { "AWS": "identity_arn" }
-
In diesem Beispiel wird die Mandanten-Account-ID 27233906934684427525 verwendet, die das Konto-Root und alle Benutzer im Konto enthält:
"Principal": { "AWS": "27233906934684427525" }
-
Sie können nur das Konto-Root angeben:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:root" }
-
Sie können einen bestimmten föderierten Benutzer („Alex“) angeben:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-user/Alex" }
-
Sie können eine bestimmte föderierte Gruppe („Manager“) angeben:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-group/Managers" }
-
Sie können einen anonymen Principal angeben:
"Principal": "*"
-
Um Mehrdeutigkeiten zu vermeiden, können Sie die Benutzer-UUID anstelle des Benutzernamens verwenden:
arn:aws:iam::27233906934684427525:user-uuid/de305d54-75b4-431b-adb2-eb6b9e546013
Angenommen, Alex verlässt zum Beispiel die Organisation und den Benutzernamen
Alex
Wird gelöscht. Wenn ein neuer Alex der Organisation beitritt und dem gleichen zugewiesen wirdAlex
Benutzername: Der neue Benutzer erbt möglicherweise unbeabsichtigt die dem ursprünglichen Benutzer gewährten Berechtigungen. -
Der Hauptwert kann einen Gruppen-/Benutzernamen angeben, der beim Erstellen einer Bucket-Richtlinie noch nicht vorhanden ist.
Legen Sie Berechtigungen in einer Richtlinie fest
In einer Richtlinie wird das Aktionselement verwendet, um Berechtigungen einer Ressource zuzulassen/zu verweigern. Es gibt eine Reihe von Berechtigungen, die Sie in einer Richtlinie festlegen können, die durch das Element „Aktion“ gekennzeichnet sind, oder alternativ durch „NotAction“ für den Ausschluss. Jedes dieser Elemente wird bestimmten S3-REST-API-Operationen zugeordnet.
In den Tabellen werden die Berechtigungen aufgeführt, die auf Buckets angewendet werden, sowie die Berechtigungen, die für Objekte gelten.
Amazon S3 nutzt jetzt die Berechtigung s3:PutReplicationConfiguration sowohl für DIE PUT- als AUCH DELETE-Bucket-Replizierungsaktionen. StorageGRID verwendet für jede Aktion separate Berechtigungen, die mit der ursprünglichen Amazon S3 Spezifikation übereinstimmt. |
EIN LÖSCHEN wird ausgeführt, wenn ein PUT zum Überschreiben eines vorhandenen Werts verwendet wird. |
Berechtigungen, die für Buckets gelten
Berechtigungen | S3-REST-API-OPERATIONEN | Individuell für StorageGRID |
---|---|---|
s3:CreateBucket |
Put Bucket |
|
s3:DeleteBucket |
Bucket LÖSCHEN |
|
s3:DeleteBucketMetadataBenachrichtigung |
Konfiguration für die Benachrichtigung über Bucket-Metadaten LÖSCHEN |
Ja. |
s3:DeleteBucketPolicy |
Bucket-Richtlinie LÖSCHEN |
|
s3:DeleteReplicationConfiguration |
Bucket-Replizierung LÖSCHEN |
Ja, separate Berechtigungen für PUT und DELETE* |
s3:GetBucketAcl |
Bucket-ACL ABRUFEN |
|
s3:GetBucketCompliance |
GET Bucket-Compliance (veraltet) |
Ja. |
s3:GetBucketConsistency |
Get Bucket-Konsistenz |
Ja. |
s3:GetBucketCORS |
Bucket-Cors ABRUFEN |
|
s3:GetVerschlüsselungKonfiguration |
Get Bucket-Verschlüsselung |
|
s3:GetBucketLastAccessTime |
ZEITPUNKT des letzten Zugriffs FÜR den Bucket ABRUFEN |
Ja. |
s3:GetBucketLocation |
Bucket-Speicherort ABRUFEN |
|
s3:GetBucketMetadataBenachrichtigung |
Konfiguration der Bucket-Metadaten-Benachrichtigungen ABRUFEN |
Ja. |
s3:GetBucketBenachrichtigung |
Bucket-Benachrichtigung ABRUFEN |
|
s3:GetBucketObjectLockConfiguration |
Konfiguration der Objektsperre ABRUFEN |
|
s3:GetBucketPolicy |
Get Bucket-Richtlinie |
|
s3:GetBucketTagging |
Get Bucket-Tagging |
|
s3:GetBucketVersionierung |
Get Bucket-Versionierung |
|
s3:GetLifecycleKonfiguration |
BUCKET-Lebenszyklus ABRUFEN |
|
s3:GetReplicationConfiguration |
GET Bucket-Replizierung |
|
s3:ListAllMyBuchs |
|
Ja, für GET Storage Usage |
s3:ListBucket |
|
|
s3:ListBucketMultipartUploads |
|
|
s3:ListBucketVersions |
Get Bucket-Versionen |
|
s3:PutBucketCompliance |
PUT Bucket-Compliance (veraltet) |
Ja. |
s3:PutBucketConsistency |
PUT Bucket-Konsistenz |
Ja. |
s3:PutBucketCORS |
|
|
s3:PutVerschlüsselungKonfiguration |
|
|
s3:PutBucketLastAccessTime |
PUT Bucket-Zeit für den letzten Zugriff |
Ja. |
s3:PutBucketMetadataBenachrichtigung |
PUT Bucket-Metadaten-Benachrichtigungskonfiguration |
Ja. |
s3:PutBucketNotification |
PUT Bucket-Benachrichtigung |
|
s3:PutBucketObjectLockConfiguration |
|
|
s3:PutBucketPolicy |
Bucket-Richtlinie |
|
s3:PutBucketTagging |
|
|
s3:PutBucketVersionierung |
PUT Bucket-Versionierung |
|
s3:PutLifecycleKonfiguration |
|
|
s3:PuteReplikationKonfiguration |
PUT Bucket-Replizierung |
Ja, separate Berechtigungen für PUT und DELETE* |
Berechtigungen, die sich auf Objekte beziehen
Berechtigungen | S3-REST-API-OPERATIONEN | Individuell für StorageGRID |
---|---|---|
s3:AbortMehrteilaUpload |
|
|
s3:DeleteObject |
|
|
s3:DeleteObjectTagging |
Objekt-Tagging LÖSCHEN |
|
s3:DeleteObjectVersionTagging |
Objekt-Tagging LÖSCHEN (eine bestimmte Version des Objekts) |
|
s3:DeleteObjectVersion |
Objekt LÖSCHEN (eine bestimmte Version des Objekts) |
|
s3:GetObject |
|
|
s3:GetObjectAcl |
GET Objekt-ACL |
|
s3:GetObjectLegalOld |
HOLD-Aufbewahrung für Objekte |
|
s3:GetObjectRetention |
Aufbewahrung von Objekten |
|
s3:GetObjectTagging |
Get Objekt-Tagging |
|
s3:GetObjectVersionTagging |
GET Object Tagging (eine bestimmte Version des Objekts) |
|
s3:GetObjectVersion |
GET Object (eine bestimmte Version des Objekts) |
|
s3:ListeMultipartUploadParts |
Teile auflisten, Objekt WIEDERHERSTELLEN |
|
s3:PutObject |
|
|
s3:PuttObjectLegalOld |
LEGALE Aufbewahrung des Objekts EINGEBEN |
|
s3:PutObjectRetention |
AUFBEWAHRUNG von Objekten |
|
s3:PuttObjectTagging |
PUT Objekt-Tagging |
|
s3:PuttObjectVersionTagging |
PUT Objekt-Tagging (eine bestimmte Version des Objekts) |
|
s3:PutOverwrite Object |
|
Ja. |
s3:RestoreObject |
WIEDERHERSTELLUNG VON POSTOBJEKTEN |
Verwenden Sie PutOverwriteObject-Berechtigung
die s3:PutOverwriteObject-Berechtigung ist eine benutzerdefinierte StorageGRID-Berechtigung, die für Vorgänge gilt, die Objekte erstellen oder aktualisieren. Durch diese Berechtigung wird festgelegt, ob der Client die Daten, benutzerdefinierte Metadaten oder S3-Objekt-Tagging überschreiben kann.
Mögliche Einstellungen für diese Berechtigung sind:
-
Zulassen: Der Client kann ein Objekt überschreiben. Dies ist die Standardeinstellung.
-
Deny: Der Client kann ein Objekt nicht überschreiben. Wenn die Option „Ablehnen“ eingestellt ist, funktioniert die Berechtigung „PutOverwriteObject“ wie folgt:
-
Wenn ein vorhandenes Objekt auf demselben Pfad gefunden wird:
-
Die Daten des Objekts, benutzerdefinierte Metadaten oder S3 Objekt-Tagging können nicht überschrieben werden.
-
Alle laufenden Aufnahmevorgänge werden abgebrochen und ein Fehler wird zurückgegeben.
-
Wenn die S3-Versionierung aktiviert ist, verhindert die Einstellung Deny, dass PUT Objekt-Tagging oder DELETE Objekt-Tagging die TagSet für ein Objekt und seine nicht aktuellen Versionen ändert.
-
-
Wenn ein vorhandenes Objekt nicht gefunden wird, hat diese Berechtigung keine Wirkung.
-
-
Wenn diese Berechtigung nicht vorhanden ist, ist der Effekt der gleiche, als ob Allow-were gesetzt wurden.
Wenn die aktuelle S3-Richtlinie eine Überschreibung zulässt und die Berechtigung PutOverwriteObject auf Deny gesetzt ist, kann der Client die Daten eines Objekts, benutzerdefinierte Metadaten oder Objekt-Tagging nicht überschreiben. Wenn zusätzlich das Kontrollkästchen Client Modification verhindern* aktiviert ist (CONFIGURATION System Grid options), überschreibt diese Einstellung die Einstellung der PutOverwriteObject-Berechtigung. |
Legen Sie Bedingungen in einer Richtlinie fest
Die Bedingungen legen fest, wann eine Richtlinie in Kraft sein wird. Die Bedingungen bestehen aus Bedienern und Schlüsselwertpaaren.
Bedingungen Verwenden Sie Key-Value-Paare für die Auswertung. Ein Bedingungselement kann mehrere Bedingungen enthalten, und jede Bedingung kann mehrere Schlüsselwert-Paare enthalten. Der Bedingungsblock verwendet das folgende Format:
Condition: { condition_type: { condition_key: condition_values
Im folgenden Beispiel verwendet die IPAddress-Bedingung den SourceIp-Bedingungsschlüssel.
"Condition": { "IpAddress": { "aws:SourceIp": "54.240.143.0/24" ... }, ...
Unterstützte Bedingungsoperatoren
Bedingungsoperatoren werden wie folgt kategorisiert:
-
Zeichenfolge
-
Numerisch
-
Boolesch
-
IP-Adresse
-
Null-Prüfung
Bedingungsoperatoren | Beschreibung |
---|---|
StringEquals |
Vergleicht einen Schlüssel mit einem Zeichenfolgenwert, der auf exakter Übereinstimmung basiert (Groß-/Kleinschreibung wird beachtet). |
StringNotEquals |
Vergleicht einen Schlüssel mit einem Zeichenfolgenwert, der auf negatives Matching basiert (Groß-/Kleinschreibung wird beachtet). |
StringEqusIgnoreCase |
Vergleicht einen Schlüssel mit einem Zeichenfolgenwert, der auf exakter Übereinstimmung basiert (Groß-/Kleinschreibung wird ignoriert). |
StringNotEqualesIgnoreCase |
Vergleicht einen Schlüssel mit einem String-Wert, der auf negatives Matching basiert (Groß-/Kleinschreibung wird ignoriert). |
StringLike |
Vergleicht einen Schlüssel mit einem Zeichenfolgenwert, der auf exakter Übereinstimmung basiert (Groß-/Kleinschreibung wird beachtet). Kann * und ? Platzhalterzeichen. |
StringNotLike |
Vergleicht einen Schlüssel mit einem Zeichenfolgenwert, der auf negatives Matching basiert (Groß-/Kleinschreibung wird beachtet). Kann * und ? Platzhalterzeichen. |
Ziffern |
Vergleicht einen Schlüssel mit einem numerischen Wert, der auf exakter Übereinstimmung basiert. |
ZiffernNotequals |
Vergleicht einen Schlüssel mit einem numerischen Wert, der auf negatives Matching basiert. |
NumericGreaterThan |
Vergleicht einen Schlüssel mit einem numerischen Wert, der auf „ |
ZahlungGreaterThanEquals |
Vergleicht einen Schlüssel mit einem numerischen Wert, der auf „ |
NumericLessThan |
Vergleicht einen Schlüssel mit einem numerischen Wert, der auf „ |
ZahlungWenigerThanEquals |
Vergleicht einen Schlüssel mit einem numerischen Wert, der auf „ |
Bool |
Vergleicht einen Schlüssel mit einem Booleschen Wert auf der Grundlage von „ |
IP-Adresse |
Vergleicht einen Schlüssel mit einer IP-Adresse oder einem IP-Adressbereich. |
NotIpAddress |
Vergleicht einen Schlüssel mit einer IP-Adresse oder einem IP-Adressbereich, basierend auf negatiertem Abgleich. |
Null |
Überprüft, ob im aktuellen Anforderungskontext ein Bedingungsschlüssel vorhanden ist. |
Unterstützte Bedingungsschlüssel
Kategorie | Die entsprechenden Bedingungsschlüssel | Beschreibung |
---|---|---|
IP-Operatoren |
aws:SourceIp |
Vergleicht mit der IP-Adresse, von der die Anfrage gesendet wurde. Kann für Bucket- oder Objektvorgänge verwendet werden Hinweis: wurde die S3-Anfrage über den Lastbalancer-Dienst auf Admin-Knoten und Gateways-Knoten gesendet, wird dies mit der IP-Adresse verglichen, die vor dem Load Balancer Service liegt. Hinweis: Wenn ein Drittanbieter-, nicht-transparenter Load Balancer verwendet wird, wird dies mit der IP-Adresse dieses Load Balancer verglichen. Alle |
Ressource/Identität |
aws:Benutzername |
Vergleicht mit dem Benutzernamen des Absenders, von dem die Anfrage gesendet wurde. Kann für Bucket- oder Objektvorgänge verwendet werden |
s3:ListBucket und s3:ListBucketVersions Berechtigungen |
s3:Trennzeichen |
Vergleicht mit dem Parameter Trennzeichen, der in einer Anforderung GET Bucket oder GET Bucket Object Version angegeben ist. |
s3:ListBucket und s3:ListBucketVersions Berechtigungen |
s3:max-keys |
Vergleicht den Parameter max-keys, der in einer Anforderung FÜR GET Bucket oder GET Bucket Object-Versionen angegeben ist. |
s3:ListBucket und s3:ListBucketVersions Berechtigungen |
s3:Präfix |
Vergleicht mit dem Präfixparameter, der in einer Anforderung FÜR GET Bucket oder GET Bucket Object-Versionen angegeben ist. |
s3:PutObject |
s3:verbleibende Object-Lock-Retention-Tage |
Vergleicht mit dem in angegebenen Aufbewahrungsdatum
|
s3:PutObjectRetention |
s3:verbleibende Object-Lock-Retention-Tage |
Vergleicht mit dem in der ANFORDERUNG PUT Object Retention angegebenen Aufbewahrungsdatum, um sicherzustellen, dass dieser innerhalb des zulässigen Bereichs liegt. |
Geben Sie Variablen in einer Richtlinie an
Sie können Variablen in Richtlinien verwenden, um die Richtlinieninformationen auszufüllen, wenn sie verfügbar sind. Sie können Richtlinienvariablen in verwenden Resource
Element und in String-Vergleichen im Condition
Element:
In diesem Beispiel die Variable ${aws:username}
Ist Teil des Ressourcenelements:
"Resource": "arn:aws:s3:::bucket-name/home/${aws:username}/*"
In diesem Beispiel die Variable ${aws:username}
Ist Teil des Bedingungswertes im Bedingungsblock:
"Condition": { "StringLike": { "s3:prefix": "${aws:username}/*" ... }, ...
Variabel | Beschreibung |
---|---|
|
Verwendet den SourceIp-Schlüssel als bereitgestellte Variable. |
|
Verwendet den Benutzernamen-Schlüssel als bereitgestellte Variable. |
|
Verwendet den Service-spezifischen Präfixschlüssel als bereitgestellte Variable. |
|
Verwendet die Service-spezifische max-keys als die angegebene Variable. |
|
Sonderzeichen. Verwendet das Zeichen als Literal * -Zeichen. |
|
Sonderzeichen. Verwendet den Charakter als Literal ? Zeichen. |
|
Sonderzeichen. Verwendet das Zeichen als Literal USD Zeichen. |
Erstellen von Richtlinien, die eine spezielle Handhabung erfordern
Manchmal kann eine Richtlinie Berechtigungen erteilen, die für die Sicherheit oder die Gefahr für einen fortgesetzten Betrieb gefährlich sind, z. B. das Sperren des Root-Benutzers des Kontos. Die StorageGRID S3-REST-API-Implementierung ist bei der Richtlinienvalidierung weniger restriktiv als Amazon, aber auch bei der Richtlinienbewertung streng.
Richtlinienbeschreibung | Richtlinientyp | Verhalten von Amazon | Verhalten von StorageGRID |
---|---|---|---|
Verweigern Sie sich selbst irgendwelche Berechtigungen für das Root-Konto |
Eimer |
Gültig und durchgesetzt, aber das Root-Benutzerkonto behält die Berechtigung für alle S3 Bucket-Richtlinienvorgänge bei |
Gleich |
Verweigern Sie selbst jegliche Berechtigungen für Benutzer/Gruppe |
Gruppieren |
Gültig und durchgesetzt |
Gleich |
Erlauben Sie einer fremden Kontogruppe jegliche Berechtigung |
Eimer |
Ungültiger Principal |
Gültig, aber die Berechtigungen für alle S3-Bucket-Richtlinienvorgänge geben bei Richtlinienzugelassen durch eine Richtlinie einen nicht zugelassenen 405-Method-Fehler zurück |
Berechtigung für ein ausländisches Konto oder einen Benutzer zulassen |
Eimer |
Gültig, aber die Berechtigungen für alle S3-Bucket-Richtlinienvorgänge geben bei Richtlinienzugelassen durch eine Richtlinie einen nicht zugelassenen 405-Method-Fehler zurück |
Gleich |
Alle Berechtigungen für alle Aktionen zulassen |
Eimer |
Gültig, aber Berechtigungen für alle S3-Bucket-Richtlinienvorgänge geben einen 405 Methode nicht erlaubten Fehler für das ausländische Konto Root und Benutzer zurück |
Gleich |
Alle Berechtigungen für alle Aktionen verweigern |
Eimer |
Gültig und durchgesetzt, aber das Root-Benutzerkonto behält die Berechtigung für alle S3 Bucket-Richtlinienvorgänge bei |
Gleich |
Principal ist ein nicht existierender Benutzer oder eine Gruppe |
Eimer |
Ungültiger Principal |
Gültig |
Die Ressource ist ein nicht existierender S3-Bucket |
Gruppieren |
Gültig |
Gleich |
Principal ist eine lokale Gruppe |
Eimer |
Ungültiger Principal |
Gültig |
Policy gewährt einem nicht-Inhaberkonto (einschließlich anonymer Konten) Berechtigungen zum PUT von Objekten |
Eimer |
Gültig. Objekte sind Eigentum des Erstellerkontos, und die Bucket-Richtlinie gilt nicht. Das Ersteller-Konto muss über Objekt-ACLs Zugriffsrechte für das Objekt gewähren. |
Gültig. Der Eigentümer der Objekte ist das Bucket-Owner-Konto. Bucket-Richtlinie gilt. |
WORM-Schutz (Write Once, Read Many)
Sie können WORM-Buckets (Write-Once-Read-Many) erstellen, um Daten, benutzerdefinierte Objekt-Metadaten und S3-Objekt-Tagging zu sichern. SIE konfigurieren die WORM-Buckets, um das Erstellen neuer Objekte zu ermöglichen und Überschreibungen oder das Löschen vorhandener Inhalte zu verhindern. Verwenden Sie einen der hier beschriebenen Ansätze.
Um sicherzustellen, dass Überschreibungen immer verweigert werden, können Sie:
-
Wählen Sie im Grid Manager die Option KONFIGURATION System Grid-Optionen und aktivieren Sie das Kontrollkästchen Client-Änderung verhindern.
-
Wenden Sie die folgenden Regeln und S3-Richtlinien an:
-
Fügen Sie der S3-Richtlinie einen PutOverwriteObject DENY-Vorgang hinzu.
-
Fügen Sie der S3-Richtlinie einen DeleteObject DENY-Vorgang hinzu.
-
Fügen Sie der S3-Richtlinie einen PUT Object ALLOW-Vorgang hinzu.
-
Wenn DeleteObject in einer S3-Richtlinie VERWEIGERT wird, verhindert dies nicht, dass ILM Objekte löscht, wenn eine Regel wie „Zero Copies after 30 days “ vorhanden ist.
|
Selbst wenn all diese Regeln und Richtlinien angewendet werden, schützen sie sich nicht vor gleichzeitigen Schreibvorgängen (siehe Situation A). Sie schützen vor sequenziellen Überschreibungen (siehe Situation B). |
Situation A: Gleichzeitige Schreibvorgänge (nicht bewacht)
/mybucket/important.doc PUT#1 ---> OK PUT#2 -------> OK
Situation B: Sequentielle abgeschlossene Überschreibungen (bewacht gegen)
/mybucket/important.doc PUT#1 -------> PUT#2 ---X (denied)
Beispiele für S3-Richtlinien
Verwenden Sie die Beispiele in diesem Abschnitt, um StorageGRID-Zugriffsrichtlinien für Buckets und Gruppen zu erstellen.
Beispiele für S3-Bucket-Richtlinien
Bucket-Richtlinien geben die Zugriffsberechtigungen für den Bucket an, mit dem die Richtlinie verknüpft ist. Bucket-Richtlinien werden mithilfe der S3-PutBucketPolicy-API konfiguriert.
Eine Bucket-Richtlinie kann mithilfe der AWS CLI wie folgt konfiguriert werden:
> aws s3api put-bucket-policy --bucket examplebucket --policy file://policy.json
Beispiel: Lesezugriff auf einen Bucket zulassen
In diesem Beispiel darf jeder, auch anonym, Objekte im Bucket auflisten und get-Objektvorgänge an allen Objekten im Bucket durchführen. Alle anderen Operationen werden abgelehnt. Beachten Sie, dass diese Richtlinie möglicherweise nicht besonders nützlich ist, da niemand außer dem Konto-Root über Berechtigungen zum Schreiben in den Bucket verfügt.
{ "Statement": [ { "Sid": "AllowEveryoneReadOnlyAccess", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": ["arn:aws:s3:::examplebucket","arn:aws:s3:::examplebucket/*"] } ] }
Beispiel: Jeder in einem Konto Vollzugriff zulassen, und jeder in einem anderen Konto hat nur Lesezugriff auf einen Bucket
In diesem Beispiel ist jedem in einem bestimmten Konto der vollständige Zugriff auf einen Bucket gestattet, während jeder in einem anderen angegebenen Konto nur die Liste des Buckets und die Durchführung von GetObject-Operationen für Objekte im Bucket erlaubt ist, die mit dem beginnen shared/
Objektschlüsselpräfix.
In StorageGRID sind Objekte, die von einem nicht-Inhaberkonto erstellt wurden (einschließlich anonymer Konten), Eigentum des Bucket-Inhaberkontos. Die Bucket-Richtlinie gilt für diese Objekte. |
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "95390887230002558202" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] }, { "Effect": "Allow", "Principal": { "AWS": "31181711887329436680" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::examplebucket/shared/*" }, { "Effect": "Allow", "Principal": { "AWS": "31181711887329436680" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::examplebucket", "Condition": { "StringLike": { "s3:prefix": "shared/*" } } } ] }
Beispiel: Lesezugriff für einen Bucket und vollständiger Zugriff durch angegebene Gruppe
In diesem Beispiel dürfen alle, einschließlich anonym, den Bucket auflisten und GET-Objektvorgänge für alle Objekte im Bucket durchführen, während nur Benutzer der Gruppe gehören Marketing
Im angegebenen Konto ist Vollzugriff erlaubt.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-group/Marketing" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] }, { "Effect": "Allow", "Principal": "*", "Action": ["s3:ListBucket","s3:GetObject"], "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] } ] }
Beispiel: Jeder Lese- und Schreibzugriff auf einen Bucket zulassen, wenn Client im IP-Bereich ist
In diesem Beispiel darf jeder, einschließlich anonym, den Bucket auflisten und beliebige Objektvorgänge an allen Objekten im Bucket durchführen, vorausgesetzt, dass die Anforderungen aus einem bestimmten IP-Bereich stammen (54.240.143.0 bis 54.240.143.255, außer 54.240.143.188). Alle anderen Vorgänge werden abgelehnt, und alle Anfragen außerhalb des IP-Bereichs werden abgelehnt.
{ "Statement": [ { "Sid": "AllowEveryoneReadWriteAccessIfInSourceIpRange", "Effect": "Allow", "Principal": "*", "Action": [ "s3:*Object", "s3:ListBucket" ], "Resource": ["arn:aws:s3:::examplebucket","arn:aws:s3:::examplebucket/*"], "Condition": { "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}, "NotIpAddress": {"aws:SourceIp": "54.240.143.188"} } } ] }
Beispiel: Vollständigen Zugriff auf einen Bucket zulassen, der ausschließlich von einem festgelegten föderierten Benutzer verwendet wird
In diesem Beispiel ist dem föderierten Benutzer Alex der vollständige Zugriff auf das erlaubt examplebucket
Bucket und seine Objekte. Alle anderen Benutzer, einschließlich ‘root', werden ausdrücklich allen Operationen verweigert. Beachten Sie jedoch, dass ‘root' niemals die Berechtigungen zum Put/get/DeleteBucketPolicy verweigert wird.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-user/Alex" }, "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] }, { "Effect": "Deny", "NotPrincipal": { "AWS": "arn:aws:iam::95390887230002558202:federated-user/Alex" }, "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] } ] }
Beispiel: PutOverwriteObject-Berechtigung
In diesem Beispiel ist der Deny
Effect für PutOverwriteObject und DeleteObject stellt sicher, dass niemand die Daten, benutzerdefinierte Metadaten und S3-Objekt-Tagging überschreiben oder löschen kann.
{ "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:PutOverwriteObject", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::wormbucket/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-group/SomeGroup" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::wormbucket" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-group/SomeGroup" }, "Action": "s3:*", "Resource": "arn:aws:s3:::wormbucket/*" } ] }
Beispiele für S3-Gruppenrichtlinien
Gruppenrichtlinien legen die Zugriffsberechtigungen für die Gruppe fest, der die Richtlinie zugeordnet ist. Es gibt keine Principal
Element in der Richtlinie, da sie implizit ist. Gruppenrichtlinien werden mit dem Tenant Manager oder der API konfiguriert.
Beispiel: Legen Sie eine Gruppenrichtlinie mit Tenant Manager fest
Wenn Sie den Tenant Manager zum Hinzufügen oder Bearbeiten einer Gruppe verwenden, können Sie auswählen, wie Sie die Gruppenrichtlinie erstellen möchten, die definiert, welche S3-Zugriffsberechtigungen Mitglieder dieser Gruppe haben. Gehen Sie wie folgt vor:
-
Kein S3-Zugriff: Standardoption. Benutzer in dieser Gruppe haben keinen Zugriff auf S3-Ressourcen, es sei denn, der Zugriff wird mit einer Bucket-Richtlinie gewährt. Wenn Sie diese Option auswählen, hat nur der Root-Benutzer standardmäßig Zugriff auf S3-Ressourcen.
-
Schreibgeschützter Zugriff: Benutzer in dieser Gruppe haben schreibgeschützten Zugriff auf S3-Ressourcen. Benutzer in dieser Gruppe können beispielsweise Objekte auflisten und Objektdaten, Metadaten und Tags lesen. Wenn Sie diese Option auswählen, wird im Textfeld der JSON-String für eine schreibgeschützte Gruppenrichtlinie angezeigt. Sie können diesen String nicht bearbeiten.
-
Vollzugriff: Benutzer in dieser Gruppe haben vollen Zugriff auf S3-Ressourcen, einschließlich Buckets. Wenn Sie diese Option auswählen, wird im Textfeld der JSON-String für eine Richtlinie mit vollem Zugriff angezeigt. Sie können diesen String nicht bearbeiten.
-
Benutzerdefiniert: Benutzern in der Gruppe werden die Berechtigungen erteilt, die Sie im Textfeld angeben.
In diesem Beispiel dürfen Mitglieder der Gruppe nur ihren spezifischen Ordner (Schlüsselpräfix) im angegebenen Bucket auflisten und darauf zugreifen.
Beispiel: Vollständigen Zugriff auf alle Buckets zulassen
In diesem Beispiel sind alle Mitglieder der Gruppe berechtigt, vollständigen Zugriff auf alle Buckets des Mandantenkontos zu erhalten, sofern nicht ausdrücklich von der Bucket-Richtlinie abgelehnt wurde.
{ "Statement": [ { "Action": "s3:*", "Effect": "Allow", "Resource": "arn:aws:s3:::*" } ] }
Beispiel: Schreibgeschützter Zugriff auf alle Buckets für Gruppen zulassen
In diesem Beispiel haben alle Mitglieder der Gruppe schreibgeschützten Zugriff auf S3-Ressourcen, sofern nicht ausdrücklich von der Bucket-Richtlinie abgelehnt wird. Benutzer in dieser Gruppe können beispielsweise Objekte auflisten und Objektdaten, Metadaten und Tags lesen.
{ "Statement": [ { "Sid": "AllowGroupReadOnlyAccess", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:ListBucketVersions", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": "arn:aws:s3:::*" } ] }
Beispiel: Gruppenmitglieder haben vollen Zugriff auf ihre „folder
“ in einem Bucket
In diesem Beispiel dürfen Mitglieder der Gruppe nur ihren spezifischen Ordner (Schlüsselpräfix) im angegebenen Bucket auflisten und darauf zugreifen. Beachten Sie, dass bei der Festlegung der Privatsphäre dieser Ordner Zugriffsberechtigungen aus anderen Gruppenrichtlinien und der Bucket-Richtlinie berücksichtigt werden sollten.
{ "Statement": [ { "Sid": "AllowListBucketOfASpecificUserPrefix", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::department-bucket", "Condition": { "StringLike": { "s3:prefix": "${aws:username}/*" } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect": "Allow", "Action": "s3:*Object", "Resource": "arn:aws:s3:::department-bucket/${aws:username}/*" } ] }