Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exemple 3 : contrôle d'accès multi-locataires avec RBAC
Pour développer l'exemple RBAC précédent, vous pouvez étendre vos exigences pour inclure la mutualisation du SaaS, qui est une exigence courante pour les fournisseurs de SaaS. Dans les solutions multi-locataires, l'accès aux ressources est toujours fourni au nom d'un locataire donné. En d'autres termes, les utilisateurs du locataire A ne peuvent pas voir les données du locataire B, même si ces données sont logiquement ou physiquement colocalisées dans un système. L'exemple suivant montre comment vous pouvez implémenter l'isolation des locataires en utilisant plusieurs magasins de politiques d'autorisations vérifiées, et comment vous pouvez utiliser des rôles d'utilisateur pour définir des autorisations au sein du locataire.
L'utilisation du modèle de conception Per Tenant Policy Store est une bonne pratique pour maintenir l'isolement des locataires tout en mettant en œuvre un contrôle d'accès avec des autorisations vérifiées. Dans ce scénario, les demandes des utilisateurs du locataire A et du locataire B sont vérifiées par rapport à des magasins de politiques distincts, DATAMICROSERVICE_POLICYSTORE_A
etDATAMICROSERVICE_POLICYSTORE_B
, respectivement. Pour plus d'informations sur les considérations relatives à la conception des autorisations vérifiées pour les applications SaaS multi-locataires, consultez la section Considérations relatives à la conception multi-locataires des autorisations vérifiées.

La politique suivante se trouve dans le magasin DATAMICROSERVICE_POLICYSTORE_A
de politiques. Il vérifie que le principal fera partie du groupe allAccessRole
de typeRole
. Dans ce cas, le principal sera autorisé à effectuer les updateData
actions viewData
et sur toutes les ressources associées au locataire A.
permit ( principal in MultitenantApp::Role::"allAccessRole", action in [ MultitenantApp::Action::"viewData", MultitenantApp::Action::"updateData" ], resource );
Les politiques suivantes se trouvent dans le magasin DATAMICROSERVICE_POLICYSTORE_B
de politiques. La première politique vérifie que le principal fait partie du updateDataRole
groupe de typesRole
. En supposant que tel soit le cas, il autorise les principaux à effectuer l'updateData
action sur les ressources associées au locataire B.
permit ( principal in MultitenantApp::Role::"updateDataRole", action == MultitenantApp::Action::"updateData", resource );
Cette deuxième politique stipule que les principaux qui font partie du viewDataRole
groupe de types Role
doivent être autorisés à effectuer l'viewData
action sur les ressources associées au locataire B.
permit ( principal in MultitenantApp::Role::"viewDataRole", action == MultitenantApp::Action::"viewData", resource );
La demande d'autorisation faite par le locataire A doit être envoyée au magasin de DATAMICROSERVICE_POLICYSTORE_A
politiques et vérifiée par les politiques appartenant à ce magasin. Dans ce cas, cela est vérifié par la première politique décrite précédemment dans le cadre de cet exemple. Dans cette demande d'autorisation, le principal de type User
avec une valeur Alice
de demande d'effectuer l'viewData
action. Le principal appartient au groupe allAccessRole
de typesRole
. Alice essaie d'exécuter l'viewData
action sur la SampleData
ressource. Alice ayant un allAccessRole
rôle à jouer, cette évaluation aboutit à une ALLOW
décision.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A", "principal": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "viewData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "allAccessRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }
Si, au contraire, vous consultez une demande faite par le locataire BUser Bob
, vous verrez quelque chose comme la demande d'autorisation suivante. La demande est envoyée au magasin de DATAMICROSERVICE_POLICYSTORE_B
politiques car elle provient du locataire B. Dans cette demande, le principal Bob
souhaite effectuer l'action updateData
sur la ressourceSampleData
. Cependant, ne Bob
fait pas partie d'un groupe ayant accès à l'action updateData
sur cette ressource. La demande aboutit donc à une DENY
décision.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_B", "principal": { "entityType": "MultitenantApp::User", "entityId": "Bob" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "updateData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Bob" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "viewDataRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }
Dans ce troisième exemple, User Alice
essaie d'exécuter l'viewData
action sur la ressourceSampleData
. Cette demande est dirigée vers le magasin de DATAMICROSERVICE_POLICYSTORE_A
politiques car le principal Alice
appartient à la locataire A. Alice
fait partie du groupe allAccessRole
de ce typeRole
, ce qui lui permet d'effectuer l'viewData
action sur les ressources. En tant que telle, la demande aboutit à une ALLOW
décision.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A", "principal": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "viewData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "allAccessRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }