Les rôles intégrés dans MaxCompute sont associés à des autorisations étendues. Par exemple, le rôle Development accorde des droits d'opération sur toutes les tables et ressources d'un projet. Lorsque vous devez restreindre certaines opérations pour un utilisateur disposant d'un rôle intégré — comme l'empêcher de supprimer des tables critiques — utilisez le mécanisme de gestion des autorisations basé sur les stratégies pour superposer des règles de refus aux autorisations existantes du rôle.
Toutes les opérations décrites dans cette rubrique nécessitent l'utilisation du client MaxCompute. La console ne prend pas en charge la gestion des règles de refus basées sur les stratégies.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Le client MaxCompute est installé. Pour plus d'informations, consultez la rubrique Installation et configuration du client MaxCompute.
Le rôle de propriétaire du projet, ou le rôle intégré Super_Administrator ou Admin dans le projet cible.
Contexte
Pour les utilisateurs déjà associés à un rôle intégré, le mécanisme basé sur les stratégies s'avère plus efficace que celui basé sur les listes de contrôle d'accès (ACL) pour un contrôle granulaire des autorisations. Le tableau ci-dessous indique quand utiliser chaque méthode.
|**Mécanisme**
|
**Fonctionnement**
|
**Cas d'utilisation**
| | --- | --- | --- | |
**Stratégie**
|
Accorde ou révoque des opérations spécifiques sur les objets du projet (comme les tables) pour un rôle. Les autorisations appliquées au rôle s'appliquent à tous les utilisateurs auxquels ce rôle est attribué.
|
Un utilisateur dispose d'un rôle intégré et vous devez restreindre certaines opérations, par exemple en l'empêchant de supprimer des tables spécifiques.
| |
**ACL**
|
Accorde ou révoque directement des autorisations au niveau des objets pour des utilisateurs ou des groupes.
|
Aucune gestion des autorisations basée sur les stratégies n'est requise.
|
Pour en savoir plus, consultez les rubriques Utilisateurs et rôles et Contrôle d'accès et contrôle de téléchargement basés sur les stratégies.
Accorder des autorisations à l'aide du mécanisme basé sur les stratégies
L'exemple suivant illustre comment empêcher l'utilisateur RAM Alice (associée au rôle Development) de supprimer les tables dont le nom commence par tb_. Alice appartient au compte Alibaba Cloud bo*@aliyun.com.
Cette approche consiste à créer un rôle de refus distinct (delete_test) plutôt qu'à modifier directement le rôle intégré. Cela permet d'isoler la règle de refus et de faciliter sa révocation : vous pouvez la retirer d'un utilisateur sans affecter les autres personnes partageant le même rôle intégré.
Seul le propriétaire du projet ou les utilisateurs disposant du rôle Super_Administrator ou Admin peuvent effectuer cette opération.
-
Exécutez la commande
CREATE ROLEpour créer un rôle nommédelete_test.CREATE ROLE delete_test;Pour plus d'informations, consultez la rubrique Planification des rôles.
-
Exécutez la commande
GRANTafin de configurer le rôledelete_testpour refuser les opérations DROP sur toutes les tables dont le nom commence partb_.GRANT DROP ON TABLE tb_* TO ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");L'indicateur
"policy" = "true"active le mécanisme basé sur les stratégies. L'indicateur"allow"="false"définit la règle comme un refus. Pour plus d'informations sur la syntaxe GRANT, consultez la section « Contrôle d'accès basé sur les stratégies à l'aide de l'instruction GRANT » dans la rubrique Contrôle d'accès et contrôle de téléchargement basés sur les stratégies. -
Exécutez la commande
GRANTpour attribuer le rôledelete_testà Alice.GRANT delete_test TO ram$bo*@aliyun.com:Alice;Si vous ignorez le compte Alibaba Cloud auquel Alice appartient, exécutez la commande
LIST USERS;sur le client MaxCompute pour le rechercher. Pour plus d'informations, consultez la rubrique Planification des rôles. -
Exécutez la commande
SHOW GRANTSpour vérifier les autorisations d'Alice.SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;Vérifiez que la sortie inclut un bloc
[role/delete_test]sousAuthorization Type: Policyavec un préfixeD(Deny) sur l'entréetb_*: Drop.[roles] role_project_admin, delete_test Authorization Type: Policy [role/delete_test] D projects/mcproject_name/tables/tb_*: Drop [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: AllPour plus d'informations, consultez la rubrique Interrogation des autorisations à l'aide de MaxCompute SQL.
-
Connectez-vous au client MaxCompute en tant qu'Alice et exécutez la commande
DROP TABLEpour tester la restriction.DROP TABLE tb_test;Si la règle de refus est active, la commande échoue avec une erreur similaire à :
FAILED: Catalog Service Failed, ErrorCode: 50, Error Message: ODPS-0130013:Authorization exception - Authorization Failed [4011], You have NO privilege 'odps:Drop' on {acs:odps:*:projects/mcproject_name/tables/tb_test}. Explicitly denied by policy. Context ID:85efa8e9-40da-4660-bbfd-b503dfa64c0a. --->Tips: Pricipal:RAM$bo*@aliyun.com:Alice; Deny by policyDeux expressions confirment que la règle de refus basée sur les stratégies est effective :
Explicitly denied by policyau milieu de l'erreur, etDeny by policyà la fin. Si aucune de ces expressions n'apparaît, ou si la table est supprimée, vérifiez que toutes les étapes précédentes ont été correctement effectuées.
Révoquer des autorisations à l'aide du mécanisme basé sur les stratégies
Si les tables préfixées par tb_ ne sont plus critiques et que vous souhaitez autoriser Alice à les supprimer, révoquez l'autorisation de refus à l'aide de l'une des deux méthodes ci-dessous.
Seul le propriétaire du projet ou les utilisateurs disposant du rôle Super_Administrator ou Admin peuvent effectuer cette opération.
Méthode 1 : Supprimer la règle de refus du rôle
Utilisez cette méthode pour supprimer la restriction de refus tout en conservant le rôle delete_test attribué à Alice.
-
Exécutez la commande
REVOKEpour supprimer la règle de refus du rôledelete_test.REVOKE DROP ON TABLE tb_* FROM ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");Pour plus d'informations sur la syntaxe REVOKE, consultez la section « Contrôle d'accès basé sur les stratégies à l'aide de l'instruction GRANT » dans la rubrique Contrôle d'accès et contrôle de téléchargement basés sur les stratégies.
-
Exécutez la commande
SHOW GRANTSpour vérifier que la règle de refus a été supprimée.SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;Le bloc
[role/delete_test]ne doit plus apparaître sousAuthorization Type: Policy, ce qui confirme que la restriction est levée.[roles] role_project_admin, delete_test Authorization Type: Policy [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/tb_test: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: AllPour plus d'informations, consultez la rubrique Interrogation des autorisations à l'aide de MaxCompute SQL.
-
Connectez-vous au client MaxCompute en tant qu'Alice et exécutez la commande
DROP TABLEpour confirmer que la suppression fonctionne désormais.DROP TABLE tb_test;Si la réponse
OKs'affiche, la règle de refus a bien été supprimée.
Méthode 2 : Révoquer le rôle de refus de l'utilisateur
Utilisez cette méthode pour dissocier complètement Alice du rôle delete_test. Vous pouvez également supprimer le rôle s'il n'est plus nécessaire.
-
Exécutez la commande
REVOKEpour retirer le rôledelete_testd'Alice.REVOKE delete_test FROM ram$bo*@aliyun.com:Alice;Pour plus d'informations, consultez la rubrique Planification des rôles.
-
Exécutez la commande
SHOW GRANTSpour confirmer qu'Alice ne dispose plus du rôledelete_test.SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;L'entrée
delete_testdoit être absente de la ligne[roles].[roles] role_project_admin Authorization Type: Policy [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: All -
Connectez-vous au client MaxCompute en tant qu'Alice et exécutez la commande
DROP TABLEpour confirmer que la restriction est levée.DROP TABLE tb_test;Si la réponse
OKs'affiche, Alice peut désormais supprimer les tablestb_*. -
(Facultatif) Exécutez la commande
DROP ROLEpour supprimer le rôledelete_tests'il n'est plus nécessaire.DROP ROLE delete_test;Si la réponse
OKs'affiche, le rôle est supprimé. Pour plus d'informations, consultez la rubrique Planification des rôles.