Wie StorageGRID AWS-Richtlinien verwendet, um den Zugriff auf S3-Buckets und Objekte zu steuern
StorageGRID verwendet die Richtliniensprache von Amazon Web Services (AWS), um S3-Mandanten die Kontrolle über den Zugriff auf Buckets und Objekte innerhalb dieser Buckets zu ermöglichen. Das StorageGRID System implementiert eine Teilmenge der S3 REST API Richtliniensprache. Zugriffsrichtlinien für die S3 API werden in JSON geschrieben.
Überblick über die Zugriffsrichtlinie
StorageGRID unterstützt drei Arten von Zugriffsrichtlinien:
-
Bucket-Richtlinien, die mithilfe der GetBucketPolicy, PutBucketPolicy und DeleteBucketPolicy S3-API-Operationen oder über den Tenant Manager bzw. die Tenant Management API verwaltet werden. Bucket-Richtlinien sind Buckets zugeordnet, sodass sie den Zugriff von Benutzern im Bucket-Inhaberkonto oder in anderen Konten auf den Bucket und die darin enthaltenen Objekte steuern. Eine Bucket-Richtlinie gilt nur für einen Bucket und möglicherweise für mehrere Gruppen.
-
Gruppenrichtlinien, die mithilfe des Tenant Managers oder der Tenant Management API konfiguriert werden. Gruppenrichtlinien sind einer Gruppe im Konto zugeordnet, sodass sie so konfiguriert werden, dass diese Gruppe auf bestimmte Ressourcen zugreifen kann, die diesem Konto gehören. Eine Gruppenrichtlinie gilt nur für eine Gruppe und möglicherweise für mehrere Buckets.
-
Sitzungsrichtlinien, die im Rahmen einer AssumeRole-Anfrage übermittelt werden. Sitzungsrichtlinien gelten nur für die jeweilige Sitzung und definieren zusätzlich zu den durch Gruppen- und Bucket-Richtlinie gewährten Berechtigungen die Berechtigungen des Benutzers.
|
|
Es besteht kein Unterschied in der Priorität zwischen Gruppenrichtlinien, Bucket-Richtlinien und Sitzungsrichtlinien. |
StorageGRID Bucket und Gruppenrichtlinien folgen einer von Amazon definierten spezifischen Grammatik. Innerhalb jeder Richtlinie befindet sich ein Array von Richtlinienanweisungen, und jede Anweisung enthält die folgenden Elemente:
-
Statement-ID (Sid) (optional)
-
Wirkung
-
Principal/NotPrincipal
-
Ressource/NotResource
-
Aktion/NotAction
-
Zustand (optional)
Richtlinienanweisungen werden mithilfe dieser Struktur erstellt, um Berechtigungen festzulegen: Grant <Effect> zum Erlauben/Verweigern von <Principal> für die Ausführung von <Action> auf <Resource>, wenn <Condition> zutrifft.
Jedes Richtlinienelement dient einer bestimmten Funktion:
| Element | Beschreibung |
|---|---|
Sid |
Das Sid-Element ist optional. Das Sid dient lediglich als Beschreibung für den Benutzer. Es wird gespeichert, aber vom StorageGRID System nicht interpretiert. |
Wirkung |
Das Effect-Element dient dazu festzustellen, ob die angegebenen Operationen erlaubt oder verweigert werden. Operationen, die auf Buckets oder Objekten erlaubt (oder verweigert) werden, sind mit den unterstützten Schlüsselwörtern des Action-Elements zu kennzeichnen. |
Principal/NotPrincipal |
Sie können Benutzern, Gruppen und Konten den Zugriff auf bestimmte Ressourcen und die Durchführung bestimmter Aktionen ermöglichen. Wenn keine S3-Signatur in der Anfrage enthalten ist, wird anonymer Zugriff durch Angabe des Platzhalterzeichens (*) als Principal erlaubt. Standardmäßig hat nur das Konto-Root Zugriff auf Ressourcen, die dem Konto gehören. Sie müssen lediglich das Principal-Element in einer Bucket-Richtlinie angeben. Bei Gruppenrichtlinien ist die Gruppe, der die Richtlinie zugeordnet ist, das implizite Principal-Element. |
Ressource/NotResource |
Das Resource-Element identifiziert Buckets und Objekte. Berechtigungen für Buckets und Objekte können mithilfe des Amazon Resource Name (ARN) zur Identifizierung der Ressource erlaubt oder verweigert werden. |
Aktion/NotAction |
Die Elemente „Aktion“ und „Wirkung“ bilden die beiden Komponenten von Berechtigungen. Wenn eine Gruppe eine Ressource anfordert, wird ihr der Zugriff entweder gewährt oder verweigert. Der Zugriff wird verweigert, sofern Sie keine Berechtigungen explizit zuweisen, jedoch kann eine durch eine andere Richtlinie gewährte Berechtigung durch eine explizite Verweigerung überschrieben werden. |
Zustand |
Das Element „Bedingung“ ist optional. Bedingungen ermöglichen das Erstellen von Ausdrücken, um festzulegen, wann eine Richtlinie angewendet werden soll. |
Im Action-Element kann das Platzhalterzeichen (*) verwendet werden, um alle Operationen oder eine Teilmenge von Operationen anzugeben. Beispielsweise entspricht diese Action Berechtigungen wie s3:GetObject, s3:PutObject und s3:DeleteObject.
s3:*Object
Im Resource-Element können Sie die Platzhalterzeichen (*) und (?) verwenden. Während das Sternchen (*) mit 0 oder mehr Zeichen übereinstimmt, stimmt das Fragezeichen (?) mit einem einzelnen beliebigen Zeichen überein.
Im Principal-Element werden Platzhalterzeichen nicht unterstützt, außer um anonymer Zugriff zu setzen, der allen Benutzern die Berechtigung erteilt. Zum Beispiel wird das Platzhalterzeichen (*) als Wert für Principal gesetzt.
"Principal":"*"
"Principal":{"AWS":"*"}
Im folgenden Beispiel wird die Anweisung mit den Elementen „Effect“, „Principal“, „Action“ und „Resource“ verwendet. Dieses Beispiel zeigt eine vollständige Bucket-Policy-Anweisung, die den Effect „Allow“ verwendet, um den Principals, der admin group federated-group/admin und der finance group federated-group/finance, Berechtigungen zu erteilen, die Action s3:ListBucket für den Bucket mit dem Namen mybucket und die Action s3:GetObject für alle Objekte in diesem Bucket auszuführen.
{
"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:s3:::mybucket",
"arn:aws:s3:::mybucket/*"
]
}
]
}
Die Bucket-Richtlinie hat eine Größenbeschränkung von 20.480 Bytes, und die Gruppenrichtlinie hat eine Größenbeschränkung von 5.120 Bytes.
Einheitlichkeit der Richtlinien
Standardmäßig sind alle Aktualisierungen, die Sie an Gruppenrichtlinien vornehmen, letztendlich konsistent. Wenn eine Gruppenrichtlinie konsistent ist, kann es aufgrund des Richtlinien-Cachings bis zu 15 Minuten dauern, bis die Änderungen wirksam werden. Standardmäßig sind alle Aktualisierungen, die Sie an Bucket-Richtlinien vornehmen, stark konsistent.
Bei Bedarf können die Konsistenzgarantien für Aktualisierungen der Bucket-Richtlinie geändert werden. Beispielsweise kann gewünscht sein, dass eine Änderung an einer Bucket-Richtlinie auch während eines Standortausfalls verfügbar ist.
In diesem Fall kann entweder der Consistency-Control-Header in der PutBucketPolicy-Anfrage gesetzt werden oder die PUT Bucket consistency-Anfrage verwendet werden. Wenn eine Bucket-Richtlinie konsistent wird, können die Änderungen aufgrund des Richtlinien-Cachings bis zu 8 Sekunden benötigen, um wirksam zu werden.
|
|
Wenn die Konsistenz vorübergehend auf einen anderen Wert gesetzt wird, um eine temporäre Situation zu umgehen, sollte die Einstellung auf Bucket-Ebene nach Abschluss wieder auf den ursprünglichen Wert zurückgesetzt werden. Andernfalls werden alle zukünftigen Bucket-Anfragen die geänderte Einstellung verwenden. |
Was ist eine Sitzungsrichtlinie?
Eine Sitzungsrichtlinie ist eine Zugriffsrichtlinie, die die während einer bestimmten Sitzung verfügbaren Berechtigungen vorübergehend einschränkt, beispielsweise wenn ein Benutzer einer Gruppe beitritt. Eine Sitzungsrichtlinie kann nur eine Teilmenge der Berechtigungen zulassen und keine zusätzlichen Berechtigungen gewähren. Die Gruppe selbst kann über umfassendere Berechtigungen verfügen.
ARN in Richtlinienaussagen verwenden
In Richtlinienanweisungen wird der ARN in Principal- und Resource-Elementen verwendet.
-
Diese Syntax gibt den S3-Ressourcen-ARN an:
arn:aws:s3:::bucket-name arn:aws:s3:::bucket-name/object_key
-
Diese Syntax gibt den ARN der Identitätsressource (Benutzer und Gruppen) an:
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 innerhalb des Objektschlüssels abzugleichen.
-
Internationale Zeichen, die im Objektschlüssel angegeben werden können, sollten mit JSON UTF-8 oder mit JSON \u-Escape-Sequenzen kodiert werden. Prozentkodierung wird nicht unterstützt.
Der HTTP-Anfragetext für die PutBucketPolicy-Operation muss mit charset=UTF-8 kodiert sein.
Ressourcen in einer Richtlinie angeben
In Richtlinienanweisungen kann das Resource-Element verwendet werden, um den Bucket oder das Objekt anzugeben, für das Berechtigungen erlaubt oder verweigert werden.
-
Jede Richtlinienaussage erfordert ein Ressourcenelement. In einer Richtlinie werden Ressourcen durch das Element
Resourceoder alternativNotResourcefür Ausschluss gekennzeichnet. -
Sie geben Ressourcen mithilfe eines S3-Ressourcen-ARN an. Zum Beispiel:
"Resource": "arn:aws:s3:::mybucket/*"
-
Sie können auch Richtlinienvariablen innerhalb des Objektschlüssels verwenden. Beispielsweise:
"Resource": "arn:aws:s3:::mybucket/home/${aws:username}/*" -
Der Ressourcenwert kann einen Bucket angeben, der beim Erstellen einer Gruppenrichtlinie noch nicht existiert.
Geben Sie Prinzipale in einer Richtlinie an.
Das Principal-Element dient zur Identifizierung des Benutzers, der Gruppe oder des Mandantenkontos, dem der Zugriff auf die Ressource durch die Richtlinienanweisung erlaubt oder verweigert wird.
-
Jede Richtlinienanweisung in einer Bucket-Richtlinie muss ein Principal-Element enthalten. Richtlinienanweisungen in einer Gruppenrichtlinie benötigen das Principal-Element nicht, da die Gruppe als Principal gilt.
-
In einer Richtlinie werden Principals durch das Element „Principal“ oder alternativ „NotPrincipal“ für den Ausschluss bezeichnet.
-
Kontobasierte Identitäten müssen mithilfe einer ID oder einer ARN angegeben werden:
"Principal": { "AWS": "account_id"} "Principal": { "AWS": "identity_arn" } -
Dieses Beispiel verwendet die Mandantenkonto-ID 27233906934684427525, die das Stammkonto und alle Benutzer des Kontos umfasst:
"Principal": { "AWS": "27233906934684427525" } -
Sie können nur das Stammkonto angeben:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:root" } -
Sie können einen bestimmten Verbundbenutzer („Alex“) angeben:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-user/Alex" } -
Sie können eine bestimmte föderierte Gruppe („Managers“) angeben:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-group/Managers" } -
Es kann ein anonymer Prinzipal angegeben werden:
"Principal": "*"
-
Um Mehrdeutigkeiten zu vermeiden, kann die Benutzer-UUID anstelle des Benutzernamens verwendet werden:
arn:aws:iam::27233906934684427525:user-uuid/de305d54-75b4-431b-adb2-eb6b9e546013
Angenommen, Alex verlässt das Unternehmen und der Benutzername
Alexwird gelöscht. Wenn ein neuer Alex dem Unternehmen beitritt und denselbenAlexBenutzernamen erhält, könnte der neue Benutzer unbeabsichtigt die Berechtigungen des ursprünglichen Benutzers übernehmen. -
Der Principal-Wert kann einen Gruppen-/Benutzernamen angeben, der beim Erstellen einer Bucket-Richtlinie noch nicht existiert.
Berechtigungen in einer Richtlinie angeben
In einer Richtlinie wird das Element „Action“ verwendet, um Berechtigungen für eine Ressource zu erlauben oder zu verweigern. Es gibt eine Reihe von Berechtigungen, die in einer Richtlinie angegeben werden können, die durch das Element „Action“ oder alternativ „NotAction“ für den Ausschluss gekennzeichnet sind. Jedes dieser Elemente entspricht bestimmten S3 REST API-Operationen.
Die Tabelle listet die Berechtigungen auf, die für Buckets gelten, und die Berechtigungen, die für Objekte gelten.
|
|
Amazon S3 verwendet jetzt die Berechtigung s3:PutReplicationConfiguration sowohl für die Aktionen PutBucketReplication und DeleteBucketReplication. StorageGRID verwendet separate Berechtigungen für jede Aktion, was der ursprünglichen Amazon S3-Spezifikation entspricht. |
|
|
Ein Löschvorgang wird durchgeführt, wenn mit einem Put ein vorhandener Wert überschrieben wird. |
Berechtigungen, die für Buckets gelten
| Berechtigungen | S3 REST API Operationen | Kundenspezifisch für StorageGRID |
|---|---|---|
s3:CreateBucket |
CreateBucket |
Ja. Hinweis: Nur in Gruppenrichtlinien verwenden. |
s3:DeleteBucket |
DeleteBucket |
|
s3:DeleteBucketMetadataNotification |
Bucket-Metadatenbenachrichtigungskonfiguration löschen |
Ja |
s3:DeleteBucketPolicy |
DeleteBucketPolicy |
|
s3:DeleteReplicationConfiguration |
DeleteBucketReplication |
Ja, separate Berechtigungen für PUT und DELETE |
s3:GetBucketAcl |
GetBucketAcl |
|
s3:GetBucketCompliance |
GET Bucket compliance (veraltet) |
Ja |
s3:GetBucketConsistency |
GET Bucket Konsistenz |
Ja |
s3:GetBucketCORS |
GetBucketCors |
|
s3:GetEncryptionConfiguration |
GetBucketEncryption |
|
s3:GetBucketLastAccessTime |
Letzte Zugriffszeit des Buckets abrufen |
Ja |
s3:GetBucketLocation |
GetBucketLocation |
|
s3:GetBucketMetadataNotification |
GET Bucket-Metadaten-Benachrichtigungskonfiguration |
Ja |
s3:GetBucketNotification |
GetBucketNotificationConfiguration |
|
s3:GetBucketObjectLockConfiguration |
GetObjectLockConfiguration |
|
s3:GetBucketPolicy |
GetBucketPolicy |
|
s3:GetBucketTagging |
GetBucketTagging |
|
s3:GetBucketVersioning |
GetBucketVersioning |
|
s3:GetLifecycleConfiguration |
GetBucketLifecycleConfiguration |
|
s3:GetReplicationConfiguration |
GetBucketReplication |
|
s3:ListAllMyBuckets |
|
Ja, für GET Storage Usage. Hinweis: Nur in Gruppenrichtlinien verwenden. |
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:PutEncryptionConfiguration |
|
|
s3:PutBucketLastAccessTime |
PUT Bucket letzter Zugriffszeitpunkt |
Ja |
s3:PutBucketMetadataNotification |
PUT Bucket Metadaten-Benachrichtigungskonfiguration |
Ja |
s3:PutBucketNotification |
PutBucketNotificationConfiguration |
|
s3:PutBucketObjectLockConfiguration |
|
|
s3:PutBucketPolicy |
PutBucketPolicy |
|
s3:PutBucketTagging |
|
|
s3:PutBucketVersioning |
PutBucketVersioning |
|
s3:PutLifecycleConfiguration |
|
|
s3:PutReplicationConfiguration |
PutBucketReplication |
Ja, separate Berechtigungen für PUT und DELETE |
Berechtigungen, die für Objekte gelten
| Berechtigungen | S3 REST API Operationen | Kundenspezifisch für StorageGRID |
|---|---|---|
s3:AbortMultipartUpload |
|
|
s3:BypassGovernanceRetention |
|
|
s3:DeleteObject |
|
|
s3:DeleteObjectTagging |
DeleteObjectTagging |
|
s3:DeleteObjectVersionTagging |
DeleteObjectTagging (eine bestimmte Version des Objekts) |
|
s3:DeleteObjectVersion |
DeleteObject (eine bestimmte Version des Objekts) |
|
s3:GetObject |
|
|
s3:GetObjectAcl |
GetObjectAcl |
|
s3:GetObjectLegalHold |
GetObjectLegalHold |
|
s3:GetObjectRetention |
GetObjectRetention |
|
s3:GetObjectTagging |
GetObjectTagging |
|
s3:GetObjectVersionTagging |
GetObjectTagging (eine bestimmte Version des Objekts) |
|
s3:GetObjectVersion |
GetObject (eine bestimmte Version des Objekts) |
|
s3:ListMultipartUploadParts |
ListParts, RestoreObject |
|
s3:PutObject |
|
|
s3:PutObjectLegalHold |
PutObjectLegalHold |
|
s3:PutObjectRetention |
PutObjectRetention |
|
s3:PutObjectTagging |
PutObjectTagging |
|
s3:PutObjectVersionTagging |
PutObjectTagging (eine bestimmte Version des Objekts) |
|
s3:PutOverwriteObject |
|
Ja |
s3:RestoreObject |
RestoreObject |
PutOverwriteObject-Berechtigung verwenden
Die s3:PutOverwriteObject Berechtigung ist eine benutzerdefinierte StorageGRID Berechtigung, die für Vorgänge gilt, die Objekte erstellen oder aktualisieren. Die Einstellung dieser Berechtigung bestimmt, ob der Client die Daten eines Objekts, benutzerdefinierte Metadaten oder S3-Objekt-Tags überschreiben kann.
Mögliche Einstellungen für diese Berechtigung sind:
-
Zulassen: Der Client kann ein Objekt überschreiben. Dies ist die Standardeinstellung.
-
Verweigern: Der Client kann ein Objekt nicht überschreiben. Wenn auf „Verweigern“ gesetzt, funktioniert die PutOverwriteObject-Berechtigung wie folgt:
-
Wenn unter demselben Pfad bereits ein Objekt gefunden wird:
-
Die Daten des Objekts, die benutzerdefinierten Metadaten oder die S3-Objektkennzeichnung können nicht überschrieben werden.
-
Alle laufenden Datenerfassungsvorgänge werden abgebrochen und ein Fehler zurückgegeben.
-
Wenn die S3-Versionierung aktiviert ist, verhindert die Einstellung „Deny“, dass PutObjectTagging- oder DeleteObjectTagging-Operationen das TagSet eines Objekts und seiner nicht aktuellen Versionen ändern.
-
-
Wenn kein vorhandenes Objekt gefunden wird, hat diese Berechtigung keine Auswirkung.
-
-
Wenn diese Berechtigung nicht vorhanden ist, ist die Wirkung identisch damit, als wäre „Zulassen“ gesetzt.
|
|
Wenn die aktuelle S3-Richtlinie das Überschreiben zulässt und die PutOverwriteObject-Berechtigung auf Verweigern gesetzt ist, kann der Client weder die Daten eines Objekts, benutzerdefinierte Metadaten noch Objekt-Tags überschreiben. Wenn außerdem das Kontrollkästchen Prevent client modification aktiviert ist (Configuration > Security settings > Network and objects), hat diese Einstellung Vorrang vor der Einstellung der PutOverwriteObject-Berechtigung. |
Bedingungen in einer Richtlinie angeben
Bedingungen definieren, wann eine Richtlinie wirksam wird. Bedingungen bestehen aus Operatoren und Schlüssel-Wert-Paaren.
Bedingungen verwenden Schlüssel-Wert-Paare zur Auswertung. Ein Bedingungselement kann mehrere Bedingungen enthalten, und jede Bedingung kann mehrere Schlüssel-Wert-Paare enthalten. Der Bedingungsblock verwendet das folgende Format:
Condition: {
condition_type: {
condition_key: condition_values
Im folgenden Beispiel verwendet die Bedingung IpAddress den Bedingungsschlüssel SourceIp.
"Condition": {
"IpAddress": {
"aws:SourceIp": "54.240.143.0/24"
...
},
...
Unterstützte Bedingungsoperatoren
Bedingungsoperatoren werden wie folgt kategorisiert:
-
Zeichenkette
-
Numerisch
-
Boolescher Wert
-
IP-Adresse
-
Nullprüfung
| Bedingungsoperatoren | Beschreibung |
|---|---|
StringEquals |
Vergleicht einen Schlüssel mit einem Zeichenkettenwert auf Basis einer exakten Übereinstimmung (Groß-/Kleinschreibung). |
StringNotEquals |
Vergleicht einen Schlüssel mit einem Zeichenkettenwert anhand einer negierten Übereinstimmung (Groß-/Kleinschreibung). |
StringEqualsIgnoreCase |
Vergleicht einen Schlüssel mit einem Zeichenkettenwert anhand einer exakten Übereinstimmung (Groß-/Kleinschreibung wird ignoriert). |
StringNotEqualsIgnoreCase |
Vergleicht einen Schlüssel mit einem Zeichenkettenwert auf Basis einer negierten Übereinstimmung (Groß-/Kleinschreibung wird ignoriert). |
StringLike |
Vergleicht einen Schlüssel mit einem Zeichenkettenwert anhand einer exakten Übereinstimmung (Groß-/Kleinschreibung). Kann die Platzhalterzeichen * und ? enthalten. |
StringNotLike |
Vergleicht einen Schlüssel mit einem Zeichenkettenwert anhand negierter Übereinstimmung (Groß-/Kleinschreibung). Kann die Platzhalterzeichen * und ? enthalten. |
NumericEquals |
Vergleicht einen Schlüssel mit einem numerischen Wert basierend auf exakter Übereinstimmung. |
NumericNotEquals |
Vergleicht einen Schlüssel mit einem numerischen Wert auf Basis einer negierten Übereinstimmung. |
NumericGreaterThan |
Vergleicht einen Schlüssel mit einem numerischen Wert auf Basis einer „größer als“-Übereinstimmung. |
NumericGreaterThanEquals |
Vergleicht einen Schlüssel mit einem numerischen Wert anhand einer Übereinstimmung nach dem Prinzip „größer als oder gleich“. |
NumericLessThan |
Vergleicht einen Schlüssel mit einem numerischen Wert auf Basis einer „kleiner als“-Übereinstimmung. |
NumericLessThanEquals |
Vergleicht einen Schlüssel mit einem numerischen Wert auf Basis einer „kleiner als oder gleich“-Übereinstimmung. |
Bool |
Vergleicht einen Schlüssel mit einem booleschen Wert basierend auf „wahr“ oder „falsch“ Übereinstimmung. |
IpAddress |
Vergleicht einen Schlüssel mit einer IP-Adresse oder einem Bereich von IP-Adressen. |
NotIpAddress |
Vergleicht einen Schlüssel mit einer IP-Adresse oder einem Bereich von IP-Adressen auf Basis einer negierten Übereinstimmung. |
Null |
Prüft, ob ein Bedingungsschlüssel im aktuellen Anfragekontext vorhanden ist. |
IfExists |
Wird an jeden Bedingungsoperator außer der Null-Bedingung angehängt, um das Fehlen des entsprechenden Bedingungsschlüssels zu prüfen. Gibt TRUE zurück, wenn der Bedingungsschlüssel nicht vorhanden ist. |
Unterstützte Bedingungsschlüssel
| Bedingungsschlüssel | Aktionen | Beschreibung |
|---|---|---|
aws:SourceIp |
IP-Operatoren |
Wird mit der IP-Adresse verglichen, von der die Anfrage gesendet wurde. Kann für Bucket- oder Objektoperationen verwendet werden. Hinweis: Wenn die S3-Anfrage über den Load Balancer Service auf Admin Nodes und Gateways Nodes gesendet wurde, erfolgt der Vergleich mit der IP-Adresse, die stromaufwärts des Load Balancer Service liegt. Hinweis: Bei Verwendung eines nicht transparenten Load Balancers eines Drittanbieters erfolgt ein Vergleich mit der IP-Adresse dieses Load Balancers. Sämtliche |
aws:Benutzername |
Ressource/Identität |
Wird mit dem Benutzernamen des Absenders verglichen, von dem die Anfrage gesendet wurde. Kann für Bucket- oder Objektoperationen verwendet werden. |
s3:Trennzeichen |
s3:ListBucket und s3:ListBucketVersions-Berechtigungen |
Wird mit dem im Parameter Trennzeichen einer ListObjects- oder ListObjectVersions-Anfrage angegebenen Wert verglichen. |
s3:ExistingObjectTag/<tag-key> |
s3:DeleteObjectTagging s3:DeleteObjectVersionTagging s3:GetObject s3:GetObjectAcl 3:GetObjectTagging s3:GetObjectVersion s3:GetObjectVersionAcl s3:GetObjectVersionTagging s3:PutObjectAcl s3:PutObjectTagging s3:PutObjectVersionAcl s3:PutObjectVersionTagging |
Es wird vorausgesetzt, dass das bestehende Objekt den spezifischen Tag-Schlüssel und Wert besitzt. |
s3:max-keys |
s3:ListBucket und s3:ListBucketVersions-Berechtigungen |
Wird mit dem in einer ListObjects oder ListObjectVersions Anfrage angegebenen Parameter max-keys verglichen. |
s3:object-lock-mode |
s3:PutObject |
Vergleicht mit dem |
s3:object-lock-mode |
s3:PutObjectRetention |
Vergleicht mit dem |
s3:object-lock-remaining-retention-days |
s3:PutObject |
Vergleicht das im `x-amz-object-lock-retain-until-date`Anforderungsheader angegebene oder aus der Standardaufbewahrungsdauer des Buckets berechnete Aufbewahrungsdatum, um sicherzustellen, dass diese Werte im zulässigen Bereich für die folgenden Anfragen liegen:
|
s3:object-lock-remaining-retention-days |
s3:PutObjectRetention |
Vergleicht das in der PutObjectRetention-Anfrage angegebene Aufbewahrungsdatum mit dem Aufbewahrungsfristdatum, um sicherzustellen, dass es innerhalb des zulässigen Bereichs liegt. |
s3:prefix |
s3:ListBucket und s3:ListBucketVersions-Berechtigungen |
Wird mit dem in einer ListObjects oder ListObjectVersions Anfrage angegebenen Präfixparameter verglichen. |
s3:RequestObjectTag/<tag-key> |
s3:PutObject s3:PutObjectTagging s3:PutObjectVersionTagging |
Wenn die Objektanfrage Tags enthält, sind ein spezifischer Tag-Schlüssel und ein spezifischer Tag-Wert erforderlich. |
s3:x-amz-server-side-encryption-customer-algorithm |
s3:PutObject |
Vergleicht mit dem |
Variablen in einer Richtlinie angeben
Sie können Variablen in Richtlinien verwenden, um Richtlinieninformationen einzufügen, sobald diese verfügbar sind. Sie können Richtlinienvariablen im Resource Element und bei Zeichenkettenvergleichen im Condition Element verwenden.
In diesem Beispiel ist die Variable ${aws:username} Teil des Resource-Elements:
"Resource": "arn:aws:s3:::bucket-name/home/${aws:username}/*"
In diesem Beispiel ist die Variable ${aws:username} Teil des Bedingungswerts im Bedingungsblock:
"Condition": {
"StringLike": {
"s3:prefix": "${aws:username}/*"
...
},
...
| Variable | Beschreibung |
|---|---|
|
Verwendet den SourceIp-Schlüssel als die bereitgestellte Variable. |
|
Verwendet den Schlüssel für den Benutzernamen als bereitgestellte Variable. |
|
Verwendet den dienstspezifischen Präfixschlüssel als bereitgestellte Variable. |
|
Verwendet den dienstspezifischen Schlüssel max-keys als bereitgestellte Variable. |
|
Sonderzeichen. Verwendet das Zeichen als wörtliches * Zeichen. |
|
Sonderzeichen. Verwendet das Zeichen als wörtliches Fragezeichen. |
|
Sonderzeichen. Verwendet das Zeichen als wörtliches $-Zeichen. |
Richtlinien erstellen, die eine besondere Behandlung erfordern
Richtlinien können mitunter Berechtigungen erteilen, die sicherheitsgefährdend oder für den laufenden Betrieb problematisch sind, beispielsweise die Sperrung des Root-Benutzers des Kontos. Die StorageGRID S3 REST API Implementierung ist bei der Richtlinienvalidierung weniger restriktiv als Amazon, bei der Richtlinienauswertung jedoch genauso streng.
| Richtlinienbeschreibung | Richtlinientyp | Amazon Verhalten | StorageGRID Verhalten |
|---|---|---|---|
Jegliche Berechtigungen für das Root-Konto für sich selbst verweigern |
Bucket |
Gültig und durchgesetzt, aber das Root-Benutzer-Konto behält die Berechtigung für alle S3-Bucket-Richtlinienoperationen |
Dasselbe |
Sich selbst alle Berechtigungen für Benutzer/Gruppe verweigern |
Gruppe |
Gültig und durchgesetzt |
Dasselbe |
Einer ausländischen Kontengruppe beliebige Berechtigungen erlauben |
Bucket |
Ungültiger Principal |
Gültig, aber die Berechtigungen für alle S3-Bucket-Richtlinienoperationen führen zu einem 405-Fehler (Methode nicht zulässig), wenn sie durch eine Richtlinie erlaubt sind |
Einem fremden Konto (Root oder Benutzer) beliebige Berechtigungen gewähren |
Bucket |
Gültig, aber die Berechtigungen für alle S3-Bucket-Richtlinienoperationen führen zu einem 405-Fehler (Methode nicht zulässig), wenn sie durch eine Richtlinie erlaubt sind |
Dasselbe |
Allen Berechtigungen für alle Aktionen gewähren |
Bucket |
Gültig, aber für alle S3-Bucket-Richtlinienoperationen wird für das fremde Root-Konto und die Benutzer der Fehler 405 Method Not Allowed zurückgegeben. |
Dasselbe |
Allen wird die Berechtigung für alle Aktionen verweigert |
Bucket |
Gültig und durchgesetzt, aber das Root-Benutzer-Konto behält die Berechtigung für alle S3-Bucket-Richtlinienoperationen |
Dasselbe |
Der Principal ist ein nicht existierender Benutzer oder eine nicht existierende Gruppe |
Bucket |
Ungültiger Principal |
Gültig |
Die Ressource ist ein nicht existierender S3-Bucket |
Gruppe |
Gültig |
Dasselbe |
Principal ist eine lokale Gruppe |
Bucket |
Ungültiger Principal |
Gültig |
Die Richtlinie gewährt einem Nicht-Inhaber-Konto (einschließlich anonymer Konten) Berechtigungen zum Ablegen von Objekten. |
Bucket |
Gültig. Die Objekte gehören dem Erstellerkonto, und die Bucket-Richtlinie findet keine Anwendung. Das Erstellerkonto muss die Zugriffsberechtigungen für das Objekt mithilfe von Objekt-ACLs erteilen. |
Gültig. Objekte gehören dem Bucket-Eigentümerkonto. Bucket-Richtlinie gilt. |
Write-once-read-many (WORM)-Schutz
Sie können Write-Once-Read-Many (WORM) Buckets erstellen, um Daten, benutzerdefinierte Objektmetadaten und S3-Objekt-Tags zu schützen. Die WORM-Buckets werden so konfiguriert, dass neue Objekte erstellt werden können und das Überschreiben oder Löschen vorhandener Inhalte verhindert wird. Eine der hier beschriebenen Methoden kann verwendet werden.
Um sicherzustellen, dass Überschreibungen immer verhindert werden, können Sie Folgendes tun:
-
Im Grid Manager unter Konfiguration > Sicherheit > Sicherheitseinstellungen > Netzwerk und Objekte das Kontrollkästchen Clientänderungen verhindern auswählen.
-
Die folgenden Regeln und S3-Richtlinien gelten:
-
Eine PutOverwriteObject DENY-Operation zur S3-Richtlinie hinzufügen.
-
Eine DeleteObject DENY-Operation zur S3-Richtlinie hinzufügen.
-
Eine PutObject ALLOW-Operation zur S3-Richtlinie hinzufügen.
-
|
|
Die Einstellung DeleteObject auf DENY in einer S3-Richtlinie verhindert nicht, dass ILM Objekte löscht, wenn eine Regel wie „null Kopien nach 30 Tagen“ existiert. |
|
|
Selbst wenn all diese Regeln und Richtlinien angewendet werden, bieten sie keinen Schutz vor gleichzeitigen Schreibvorgängen (siehe Situation A). Sie schützen jedoch vor sequenziell abgeschlossenen Überschreibungen (siehe Situation B). |
Situation A: Gleichzeitige Schreibvorgänge (nicht abgesichert)
/mybucket/important.doc PUT#1 ---> OK PUT#2 -------> OK
Situation B: Sequenziell abgeschlossene Überschreibungen (geschützt)
/mybucket/important.doc PUT#1 -------> PUT#2 ---X (denied)