Benutzer, Gruppen und Richtlinien

Diese Seite beschreibt die Verwaltung von IAM-Benutzern und -Gruppen in RustFS, das JSON-Format von Richtliniendokumenten, Bedingungsoperatoren und integrierte Richtlinien.

Diese Seite behandelt die tägliche IAM-Verwaltung: Benutzer und Gruppen anlegen, Richtlinien zuweisen und eigene Richtliniendokumente schreiben.

Voraussetzungen

  • Installieren Sie rc, bevor Sie administrative RustFS-Befehle verwenden.
  • Konfigurieren Sie einen Alias mit Zugangsdaten, deren Richtlinien die entsprechenden Aktionen admin:* erlauben.

Benutzer verwalten

Benutzer lassen sich in der Console (Abschnitt Identity in der linken Navigation), mit rc admin oder über die Admin-REST-API verwalten. Die nativen Admin-Endpunkte liegen unter dem Präfix /rustfs/admin/v3. Anfragen müssen mit AWS Signature V4 von Zugangsdaten signiert sein, deren Richtlinien die entsprechende Aktion admin:* erlauben.

OperationMethode und PfadHinweise
Benutzer anlegen oder aktualisierenPUT /rustfs/admin/v3/add-user?accessKey=<name>JSON-Body: {"secretKey": "...", "status": "enabled"}; policy ist optional. Erfordert admin:CreateUser.
Benutzer auflistenGET /rustfs/admin/v3/list-usersErfordert admin:ListUsers.
BenutzerdetailsGET /rustfs/admin/v3/user-info?accessKey=<name>Erfordert admin:GetUser.
Benutzer aktivieren oder deaktivierenPUT /rustfs/admin/v3/set-user-status?accessKey=<name>&status=<enabled|disabled>Sie können den Status der Zugangsdaten, mit denen der Aufruf erfolgt, nicht ändern.
Benutzer löschenDELETE /rustfs/admin/v3/remove-user?accessKey=<name>Erfordert admin:DeleteUser.
IAM-Daten exportierenGET /rustfs/admin/v3/export-iamExportiert Benutzer, Gruppen, Richtlinien und Zuordnungen.
IAM-Daten importierenPUT /rustfs/admin/v3/import-iamStellt einen exportierten Datenbestand wieder her.

Ein Benutzername (Zugriffsschlüssel) darf keine Leerzeichen enthalten und darf nicht mit dem Root-Zugriffsschlüssel übereinstimmen. Beim Anlegen eines Benutzers ist der geheime Zugriffsschlüssel erforderlich.

Gruppen verwalten

Gruppen fassen Benutzer zusammen, damit eine einzige Richtlinienzuordnung für alle Mitglieder gilt. Mitgliedschaft und Status verwalten Sie über diese Endpunkte (entsprechende Funktionen gibt es in der Console unter Identity):

OperationMethode und PfadHinweise
Gruppen auflistenGET /rustfs/admin/v3/groupsErfordert admin:ListGroups.
GruppendetailsGET /rustfs/admin/v3/group?group=<name>Erfordert admin:GetGroup.
Mitglieder hinzufügen oder entfernenPUT /rustfs/admin/v3/update-group-membersJSON-Body unten. Wenn Sie Mitglieder zu einer noch nicht vorhandenen Gruppe hinzufügen, wird sie angelegt. Erfordert admin:AddUserToGroup / admin:RemoveUserFromGroup.
Gruppe aktivieren oder deaktivierenPUT /rustfs/admin/v3/set-group-status?group=<name>&status=<enabled|disabled>Erfordert admin:EnableGroup / admin:DisableGroup.
Gruppe löschenDELETE /rustfs/admin/v3/group/{group}Schlägt fehl, solange die Gruppe noch Mitglieder hat.

Body für die Aktualisierung der Mitgliedschaft:

{
  "group": "developers",
  "members": ["alice", "bob"],
  "isRemove": false
}

Setzen Sie isRemove auf true, um die aufgeführten Mitglieder stattdessen zu entfernen. Temporäre STS-Benutzer und die Root-Anmeldedaten können nicht zu Gruppen hinzugefügt werden.

Richtlinien zuweisen

Richtlinienzuordnungen verbinden eine benannte Richtlinie mit einem Benutzer oder einer Gruppe:

OperationMethode und PfadHinweise
Richtlinie für Benutzer oder Gruppe setzenPUT /rustfs/admin/v3/set-user-or-group-policy?policyName=<policy>&userOrGroup=<name>&isGroup=<true|false>Ersetzt die Zuordnung. Wird auch als /rustfs/admin/v3/set-policy bereitgestellt. Erfordert admin:AttachUserOrGroupPolicy.
Richtlinien anhängenPOST /rustfs/admin/v3/idp/builtin/policy/attachJSON-Body: {"policies": ["readonly"], "user": "alice"} (oder "group"). Ergänzt die bestehende Zuordnung.
Richtlinien lösenPOST /rustfs/admin/v3/idp/builtin/policy/detachDieselbe Body-Form; entfernt Richtlinien aus der Zuordnung.
Richtlinienzuordnungen auflistenGET /rustfs/admin/v3/idp/builtin/policy-entitiesZeigt, welche Benutzer und Gruppen welche Richtlinien haben.

Richtliniendokumente verwalten

OperationMethode und PfadHinweise
Richtlinien auflistenGET /rustfs/admin/v3/list-canned-policiesFür Details ist admin:GetPolicy erforderlich.
RichtliniendetailsGET /rustfs/admin/v3/info-canned-policy?name=<policy>Gibt das JSON-Dokument zurück.
Richtlinie anlegen oder ersetzenPUT /rustfs/admin/v3/add-canned-policy?name=<policy>Der Request-Body ist das JSON-Dokument der Richtlinie. Erfordert admin:CreatePolicy.
Richtlinie löschenDELETE /rustfs/admin/v3/remove-canned-policy?name=<policy>Erfordert admin:DeletePolicy.

Format des Richtliniendokuments

Ein Richtliniendokument ist ein JSON-Objekt mit den Feldern Version und Statement. Der einzige akzeptierte Wert für Version ist 2012-10-17.

Jedes Statement unterstützt:

FeldErforderlichBeschreibung
SidNeinKennung des Statements.
EffectJaAllow oder Deny.
ActionJa (oder NotAction)Aktionsnamen, Platzhalter sind erlaubt (zum Beispiel s3:Get*).
NotActionNeinTrifft auf jede Aktion zu, außer auf die aufgeführten.
ResourceJa für S3-Aktionen (oder NotResource)ARNs der Form arn:aws:s3:::bucket oder arn:aws:s3:::bucket/prefix/*.
NotResourceNeinTrifft auf jede Ressource zu, außer auf die aufgeführten.
ConditionNeinBedingungsoperatoren, deren Schlüssel Kontextwerte sind.

Aktionsnamen sind nach Namensraum gegliedert: s3:* für Objekt- und Bucket-Operationen (zum Beispiel s3:GetObject, s3:PutObject, s3:DeleteObject, s3:ListBucket, s3:GetBucketLocation, s3:ListAllMyBuckets), admin:* für Verwaltungsoperationen, sts:AssumeRole für STS und kms:* für die Schlüsselverwaltung.

Unterstützte Bedingungsoperatoren sind unter anderem: StringEquals, StringNotEquals, StringEqualsIgnoreCase, StringNotEqualsIgnoreCase, StringLike, StringNotLike, ArnEquals, ArnNotEquals, ArnLike, ArnNotLike, BinaryEquals, IpAddress, NotIpAddress, Null, Bool, NumericEquals, NumericNotEquals, NumericLessThan, NumericLessThanEquals, NumericGreaterThan, NumericGreaterThanEquals, DateEquals, DateNotEquals, DateLessThan, DateLessThanEquals, DateGreaterThan und DateGreaterThanEquals. An jeden Operator kann IfExists angehängt werden (die Bedingung ist erfüllt, wenn der referenzierte Kontextschlüssel fehlt).

Beispiel: Lesezugriff auf einen Bucket

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetBucketLocation", "s3:ListBucket"],
      "Resource": ["arn:aws:s3:::reports"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::reports/*"]
    }
  ]
}

Beispiel: Lese- und Schreibzugriff auf ein Präfix beschränkt

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::app-data"],
      "Condition": {
        "StringLike": {
          "s3:prefix": ["tenant-42/*"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": ["arn:aws:s3:::app-data/tenant-42/*"]
    }
  ]
}

Beispiel: Voller Zugriff, Löschen verweigert

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::archive", "arn:aws:s3:::archive/*"]
    },
    {
      "Effect": "Deny",
      "Action": ["s3:DeleteObject", "s3:DeleteObjectVersion", "s3:DeleteBucket"],
      "Resource": ["arn:aws:s3:::archive", "arn:aws:s3:::archive/*"]
    }
  ]
}

Ein ausdrückliches Deny hat immer Vorrang vor Allow. Das zweite Statement gilt daher für Löschoperationen, auch wenn s3:* sie ebenfalls trifft. Siehe die Auswertungssemantik.

Integrierte Richtlinien

RustFS definiert fünf integrierte Richtlinien, die Sie zuweisen können, ohne sie zuvor anzulegen:

RichtlinieGewährt
readwriteAlle S3-Aktionen (s3:*) auf allen Ressourcen sowie sts:AssumeRole.
readonlys3:GetBucketLocation, s3:GetObject und s3:GetBucketQuota auf allen Ressourcen sowie sts:AssumeRole.
writeonlys3:PutObject auf allen Ressourcen sowie sts:AssumeRole.
diagnosticsAdministrative Diagnoseaktionen (admin:Profiling, admin:ServerTrace, admin:ConsoleLog, admin:ServerInfo, admin:TopLocksInfo, admin:OBDInfo, admin:Prometheus, admin:BandwidthMonitor) sowie sts:AssumeRole.
consoleAdminAlle Admin-Aktionen (admin:*), alle KMS-Aktionen (kms:*), alle S3-Aktionen (s3:*) sowie sts:AssumeRole.

Die integrierte Richtlinie readonly enthält weder s3:ListBucket noch s3:ListAllMyBuckets. Mit der Berechtigung s3:GetBucketLocation können Sie Bucket-Namen in RustFS sehen; mit s3:GetObject können Sie Objekte über einen bekannten Objektschlüssel abrufen. Um Objekte in einem Bucket aufzulisten, fügen Sie eine benutzerdefinierte Richtlinie hinzu, die s3:ListBucket für diesen Bucket gewährt.

On this page