Utilisateurs, groupes et politiques

Cette page décrit l’administration des utilisateurs et des groupes IAM RustFS, le format JSON des documents de politique, les opérateurs de condition et les politiques intégrées.

Cette page couvre l’administration IAM au quotidien : création d’utilisateurs et de groupes, association de politiques et rédaction de documents de politique personnalisés.

Prérequis

  • Installez rc avant d’utiliser les commandes d’administration RustFS.
  • Configurez un alias avec des identifiants autorisés à effectuer les actions admin:* correspondantes.

Gérer les utilisateurs

Les utilisateurs se gèrent depuis la Console (section Identity de la navigation de gauche), avec rc admin ou via l’API REST d’administration. Les points de terminaison d’administration natifs se trouvent sous le préfixe /rustfs/admin/v3. Les requêtes doivent être signées (AWS Signature V4) par un identifiant dont les politiques autorisent l’action admin:* correspondante.

OpérationMéthode et cheminRemarques
Créer ou mettre à jour un utilisateurPUT /rustfs/admin/v3/add-user?accessKey=<name>Corps JSON : {"secretKey": "...", "status": "enabled"} ; policy est facultatif. Exige admin:CreateUser.
Lister les utilisateursGET /rustfs/admin/v3/list-usersExige admin:ListUsers.
Détail d’un utilisateurGET /rustfs/admin/v3/user-info?accessKey=<name>Exige admin:GetUser.
Activer ou désactiver un utilisateurPUT /rustfs/admin/v3/set-user-status?accessKey=<name>&status=<enabled|disabled>Vous ne pouvez pas modifier l’état de l’identifiant qui effectue l’appel.
Supprimer un utilisateurDELETE /rustfs/admin/v3/remove-user?accessKey=<name>Exige admin:DeleteUser.
Exporter les données IAMGET /rustfs/admin/v3/export-iamExporte les utilisateurs, les groupes, les politiques et les associations.
Importer les données IAMPUT /rustfs/admin/v3/import-iamRestaure un jeu de données exporté.

:::note

Un nom d’utilisateur (clé d’accès) ne doit pas contenir d’espace et ne peut pas être identique à la clé d’accès racine. La clé secrète est obligatoire lors de la création d’un utilisateur.

:: :

Gérer les groupes

Les groupes rassemblent des utilisateurs afin qu’une seule association de politique couvre tous les membres. L’appartenance et l’état d’un groupe se gèrent avec ces points de terminaison (la Console propose les équivalents sous Identity) :

OpérationMéthode et cheminRemarques
Lister les groupesGET /rustfs/admin/v3/groupsExige admin:ListGroups.
Détail d’un groupeGET /rustfs/admin/v3/group?group=<name>Exige admin:GetGroup.
Ajouter ou retirer des membresPUT /rustfs/admin/v3/update-group-membersCorps JSON ci-dessous. L’ajout de membres à un groupe inexistant crée ce groupe. Exige admin:AddUserToGroup / admin:RemoveUserFromGroup.
Activer ou désactiver un groupePUT /rustfs/admin/v3/set-group-status?group=<name>&status=<enabled|disabled>Exige admin:EnableGroup / admin:DisableGroup.
Supprimer un groupeDELETE /rustfs/admin/v3/group/{group}Échoue tant que le groupe contient encore des membres.

Corps de mise à jour de l’appartenance :

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

Réglez isRemove sur true pour retirer les membres indiqués au lieu de les ajouter. Les utilisateurs temporaires (STS) et l’identifiant racine ne peuvent pas être ajoutés à un groupe.

Associer des politiques

Une association relie une politique nommée à un utilisateur ou à un groupe :

OpérationMéthode et cheminRemarques
Définir la politique d’un utilisateur ou d’un groupePUT /rustfs/admin/v3/set-user-or-group-policy?policyName=<policy>&userOrGroup=<name>&isGroup=<true|false>Remplace l’association. Également exposé sur /rustfs/admin/v3/set-policy. Exige admin:AttachUserOrGroupPolicy.
Associer des politiquesPOST /rustfs/admin/v3/idp/builtin/policy/attachCorps JSON : {"policies": ["readonly"], "user": "alice"} (ou "group"). S’ajoute à l’association existante.
Dissocier des politiquesPOST /rustfs/admin/v3/idp/builtin/policy/detachMême forme de corps ; retire des politiques de l’association.
Lister les associations de politiquesGET /rustfs/admin/v3/idp/builtin/policy-entitiesIndique quels utilisateurs et groupes possèdent quelles politiques.

Gérer les documents de politique

OpérationMéthode et cheminRemarques
Lister les politiquesGET /rustfs/admin/v3/list-canned-policiesLe détail exige le périmètre admin:GetPolicy.
Détail d’une politiqueGET /rustfs/admin/v3/info-canned-policy?name=<policy>Renvoie le document JSON.
Créer ou remplacer une politiquePUT /rustfs/admin/v3/add-canned-policy?name=<policy>Le corps de la requête est le document JSON de la politique. Exige admin:CreatePolicy.
Supprimer une politiqueDELETE /rustfs/admin/v3/remove-canned-policy?name=<policy>Exige admin:DeletePolicy.

Format du document de politique

Un document de politique est un objet JSON comportant les champs Version et Statement. La seule valeur acceptée pour Version est 2012-10-17.

Chaque instruction prend en charge :

ChampObligatoireDescription
SidNonIdentifiant de l’instruction.
EffectOuiAllow ou Deny.
ActionOui (ou NotAction)Noms d’actions ; les caractères génériques sont autorisés (par exemple s3:Get*).
NotActionNonCorrespond à toutes les actions sauf celles de la liste.
ResourceOui pour les actions S3 (ou NotResource)ARN de la forme arn:aws:s3:::bucket ou arn:aws:s3:::bucket/prefix/*.
NotResourceNonCorrespond à toutes les ressources sauf celles de la liste.
ConditionNonOpérateurs de condition indexés par des clés de contexte.

Les noms d’actions portent un préfixe d’espace de noms : s3:* pour les opérations sur les objets et les compartiments (par exemple s3:GetObject, s3:PutObject, s3:DeleteObject, s3:ListBucket, s3:GetBucketLocation, s3:ListAllMyBuckets), admin:* pour les opérations de gestion, sts:AssumeRole pour STS et kms:* pour la gestion des clés.

Les opérateurs de condition pris en charge sont : 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 et DateGreaterThanEquals. Tout opérateur peut recevoir le suffixe IfExists (la condition est satisfaite lorsque la clé de contexte référencée est absente).

Exemple : accès en lecture seule à un compartiment

{
  "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/*"]
    }
  ]
}

Exemple : lecture et écriture limitées à un préfixe

{
  "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/*"]
    }
  ]
}

Exemple : accès complet, suppression refusée

{
  "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/*"]
    }
  ]
}

:::note

Un Deny explicite l’emporte toujours sur Allow : la seconde instruction s’applique donc aux opérations de suppression, même si s3:* les inclut. Voir la sémantique d’évaluation.

:: :

Politiques intégrées

RustFS définit cinq politiques intégrées, associables sans les créer au préalable :

PolitiqueAutorisations
readwriteToutes les actions S3 (s3:*) sur toutes les ressources, plus sts:AssumeRole.
readonlys3:GetBucketLocation, s3:GetObject et s3:GetBucketQuota sur toutes les ressources, plus sts:AssumeRole.
writeonlys3:PutObject sur toutes les ressources, plus sts:AssumeRole.
diagnosticsActions d’administration de diagnostic (admin:Profiling, admin:ServerTrace, admin:ConsoleLog, admin:ServerInfo, admin:TopLocksInfo, admin:OBDInfo, admin:Prometheus, admin:BandwidthMonitor), plus sts:AssumeRole.
consoleAdminToutes les actions d’administration (admin:*), toutes les actions KMS (kms:*), toutes les actions S3 (s3:*), plus sts:AssumeRole.

:::warning

La politique intégrée readonly ne comprend ni s3:ListBucket ni s3:ListAllMyBuckets. L’autorisation s3:GetBucketLocation vous permet de voir les noms des compartiments dans RustFS, et s3:GetObject vous permet de récupérer des objets dont vous connaissez la clé. Pour lister les objets d’un compartiment, ajoutez une politique personnalisée accordant s3:ListBucket sur ce compartiment.

:: :

On this page