Si vous devez permettre à plusieurs utilisateurs de travailler avec des objets MaxCompute tels que des projets et des tables, vous pouvez utiliser les listes de contrôle d'accès (ACL) pour accorder des autorisations spécifiques aux utilisateurs ou aux rôles. Pour gérer efficacement les autorisations de plusieurs utilisateurs, accordez des autorisations à un rôle, puis attribuez ce rôle aux utilisateurs. Cette rubrique décrit les commandes d'autorisation ACL prises en charge par MaxCompute et fournit des exemples.
Informations générales
Le contrôle d'accès basé sur les ACL utilise un modèle d'autorisation par liste d'autorisation. Vous autorisez explicitement un utilisateur ou un rôle à effectuer des actions spécifiques sur un objet donné. Cela rend l'autorisation simple et précise.
Après la création d'un projet MaxCompute, le contrôle d'accès basé sur les ACL est activé par défaut. Le propriétaire d'un projet peut exécuter la commande set CheckPermissionUsingACL=true|false; dans le projet pour activer ou désactiver cette fonctionnalité.
Le contrôle d'accès basé sur les ACL s'applique aux scénarios suivants.
|
Scénario |
Description |
Concédant |
Point d'entrée |
|
Accorder des autorisations à un utilisateur |
Accordez directement une ou plusieurs actions sur un objet spécifique à un seul utilisateur. |
Consultez la colonne Concédants pris en charge de la liste des autorisations. |
|
|
Accorder des autorisations aux utilisateurs en fonction des rôles |
Accordez directement une ou plusieurs actions sur un objet spécifique à un rôle, puis attribuez ce rôle à plusieurs utilisateurs. Les utilisateurs héritent des autorisations du rôle. Pour plus d'informations sur la création de rôles et leur attribution aux utilisateurs, consultez les rubriques Planification des rôles et Attribuer un rôle à un utilisateur. Remarque
Les rôles sont conçus pour une gestion efficace des utilisateurs. Évitez d'accorder les mêmes autorisations sur le même objet à plusieurs rôles. |
Prérequis
Avant d'utiliser le contrôle d'accès basé sur les ACL, assurez-vous de disposer des informations suivantes :
-
Le nom de compte ou le nom de rôle du destinataire. L'utilisateur ou le rôle doit être ajouté au projet MaxCompute. Les formats de compte sont les suivants : un compte Alibaba Cloud se présente sous la forme ALIYUN$<account_id>, un compte utilisateur RAM se présente sous la forme RAM$<account_id>:<RAM user UID>, et un rôle RAM se présente sous la forme
RAM$<account_id>:role/<RAM role name>.Vous pouvez exécuter la commande
list users;oulist roles;dans le client MaxCompute pour récupérer les noms de compte ou de rôle.Pour ajouter un utilisateur ou un rôle, consultez les rubriques Planification et gestion des utilisateurs ou Planification des rôles.
-
Le type d'objet, le nom de l'objet et les actions à accorder.
Pour plus d'informations sur les types d'objets et les actions, consultez la rubrique Autorisations MaxCompute.
Limites
Les limites suivantes s'appliquent au contrôle d'accès basé sur les ACL :
Vous ne pouvez accorder des autorisations qu'à des utilisateurs ou des rôles existants sur des objets existants. Cela évite les risques de sécurité liés à la suppression et à la recréation d'un objet portant le même nom.
Le contrôle d'accès basé sur les ACL ne prend pas en charge l'autorisation avec la clause
[with grant option]. Par exemple, si l'utilisateur A accorde à l'utilisateur B l'accès à un objet, l'utilisateur B ne peut pas ensuite accorder cette autorisation à l'utilisateur C.L'autorisation ACL utilise un modèle de liste d'autorisation et ne prend pas en charge le modèle de liste de blocage.
Remarques d'utilisation
Tenez compte des points suivants lorsque vous utilisez le contrôle d'accès basé sur les ACL :
Si vous supprimez un objet, MaxCompute révoque automatiquement toutes les autorisations ACL qui lui sont associées.
Lorsqu'un utilisateur est supprimé, ses autorisations sont conservées. Si l'utilisateur est ajouté ultérieurement au projet, ses autorisations précédentes sont automatiquement restaurées. Pour effacer définitivement les autorisations d'un utilisateur, consultez la rubrique Effacer les autorisations résiduelles d'un utilisateur supprimé.
Syntaxe
Les commandes de contrôle d'accès basées sur les ACL utilisent la syntaxe suivante :
-
Accorder des autorisations ACL
grant <actions> on <object_type> <object_name> [(<column_list>)] to <subject_type> <subject_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; -
Révoquer des autorisations ACL
revoke <actions> on <object_type> <object_name> [(<column_list>)] from <subject_type> <subject_name>; -
Contrôle d'accès au niveau des colonnes
grant <actions> on table <table_name> (<column_list>) to <subject_type> <subject_name>; revoke <actions> on table <table_name> (<column_list>) from <subject_type> <subject_name>;
Le tableau suivant décrit les paramètres.
|
Parameter |
Required |
Description |
|
|
actions |
Yes |
Les actions à accorder. Vous pouvez spécifier une ou plusieurs actions dans une seule instruction « grant ». Séparez les différentes actions par des virgules (,). Pour obtenir la liste des actions valides, consultez la rubrique MaxCompute permissions. |
|
|
object_type |
Yes |
Le type d'objet sur lequel les autorisations sont accordées. Une seule instruction ne peut contenir qu'un seul type d'objet. Pour obtenir la liste des types d'objets valides, consultez la rubrique MaxCompute permissions. |
|
|
object_name |
Yes |
Le nom de l'objet. Procédez comme suit pour trouver le nom :
Vous pouvez utiliser un astérisque () comme caractère générique dans un nom d'objet. Par exemple, Remarque
L'utilisation d'un caractère générique (*) n'est possible que lors de l'octroi d'autorisations à un ROLE. Les caractères génériques ne sont pas pris en charge lors de l'octroi d'autorisations à un USER. |
|
|
column_list |
No |
Ce paramètre est requis uniquement lorsque object_type est défini sur « table » et que vous souhaitez mettre en œuvre un contrôle d'accès au niveau des colonnes. Vous pouvez spécifier une ou plusieurs colonnes. Séparez les noms des différentes colonnes par des virgules (,). Remarque
Ce paramètre contrôle les autorisations Describe, Select, Alter, Update, Drop, ShowHistory et ALL sur les colonnes spécifiées. Si un niveau de sensibilité est configuré pour une colonne, vous pouvez utiliser le Label-based access control pour contrôler l'accès aux données sensibles en fonction des étiquettes de sensibilité. |
|
|
privilegeproperties |
conditions |
No |
Contrôle les autorisations en fonction d'attributs tels que la source de la requête et la méthode d'accès. Le format est |
|
days |
No |
Le nombre de jours avant l'expiration de l'autorisation. Si vous ne spécifiez pas ce paramètre, l'autorisation n'expire pas. Si vous spécifiez ce paramètre, MaxCompute supprime automatiquement l'enregistrement d'autorisation après son expiration. |
|
|
subject_type |
Yes |
Le type du destinataire de l'autorisation. Valeurs possibles :
|
|
|
subject_name |
Yes |
Le compte utilisateur ou le nom du rôle du destinataire de l'autorisation. Vous ne pouvez spécifier qu'un seul utilisateur ou rôle par octroi. Formats :
Exécutez la commande |
|
Conditions
Le tableau suivant répertorie les valeurs prises en charge pour les paramètres var_name et Operation des conditions.
|
var_name |
Type |
Operation |
Description |
|
acs:UserAgent |
STRING |
|
L'agent utilisateur (User-Agent) du client émettant la requête. |
|
acs:Referer |
STRING |
Le référent HTTP de la requête. |
|
|
acs:SourceIp |
Adresse IP |
|
L'adresse IP du client émettant la requête. |
|
acs:SecureTransport |
BOOLEAN |
|
Indique si la requête est envoyée via un canal sécurisé, tel que HTTPS. |
|
acs:CurrentTime |
DATEANDTIME |
|
L'heure à laquelle le serveur web reçoit la requête, au format ISO 8601 (par exemple, 2012-11-11T23:59:59Z). |
Exemples
Supposons que Bob@aliyun.com (ID de compte : 5527xxxxxxxx5788) soit le propriétaire du projet test_project_a, et qu'Allen (UID : 1652xxxxxxxxxx1538), Alice (UID : 2763xxxxxxxxxx1649) et Tom (UID : 3874xxxxxxxxxx1850) soient des utilisateurs RAM sous Bob@aliyun.com. Les exemples suivants illustrent des opérations d'autorisation à l'aide du client MaxCompute.
-
Exemple 1 : Accorder des autorisations à un utilisateur
Créez la table sale_detail dans le projet test_project_a et accordez à l'utilisateur Allen les autorisations Describe (lecture des métadonnées) et Select (lecture des données) sur cette table. Voici des exemples de commandes.
-- Bob switches to the test_project_a project. use test_project_a; --Create a partitioned table named sale_detail. create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); --Add the user Allen as a project member. add user RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --Grant permissions to Allen. grant Describe, Select on table sale_detail to USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --View the permissions granted to Allen. show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --The authorization result is as follows. Authorization Type: ACL [user/RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538] A projects/test_project_a/tables/sale_detail: Describe | Select -
Exemple 2 : Accorder des autorisations au niveau des colonnes à un utilisateur
En vous basant sur la table sale_detail créée dans l'exemple 1, accordez à l'utilisateur Alice toutes les autorisations sur les colonnes shop_name et customer_id de la table sale_detail. Voici des exemples de commandes.
-- Bob switches to the test_project_a project. use test_project_a; --Add user Alice as a project member. add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --Grant column-level permissions to Alice. grant All on table sale_detail (shop_name, customer_id) to USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --View the permissions granted to Alice. show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --The authorization result is as follows. Authorization Type: ACL [user/RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649] A projects/test_project_a/tables/sale_detail/customer_id: All A projects/test_project_a/tables/sale_detail/shop_name: All -
Exemple 3 : Révoquer les autorisations des utilisateurs
Sur la base des exemples 1 et 2, révoquez les autorisations des utilisateurs Allen et Alice. Voici des exemples de commandes.
-- Bob switches to the test_project_a project. use test_project_a; --Revoke the permissions from Allen. revoke Describe, Select on table sale_detail (shop_name, customer_id) from USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --Revoke the permissions from Alice. revoke All on table sale_detail (shop_name, customer_id) from USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --Check Allen's permissions after revocation. The Describe and Select permissions are removed from the permission list. show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --Check Alice's permissions after revocation. The All permission is removed from the permission list. show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; -
Exemple 4 : Accorder les mêmes autorisations à plusieurs utilisateurs à l'aide d'un rôle
Accordez à Alice, Tom et à un autre compte Alibaba Cloud, Lily@aliyun.com (ID de compte : 5638xxxxxxxx6899), les autorisations nécessaires pour créer des instances, des ressources, des fonctions et des tables, ainsi que pour répertorier tous les types d'objets dans le projet test_project_a. Voici des exemples de commandes.
-- Bob switches to the test_project_a project. use test_project_a; --Add the users Alice, Tom, and Lily@aliyun.com as project members. add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; add user RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; add user ALIYUN$5638xxxxxxxx6899; --Create the Worker role. create role Worker; --Assign the Worker role to the users. grant Worker TO RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; grant Worker TO RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; grant Worker TO ALIYUN$5638xxxxxxxx6899; --Grant the Worker role the permissions to create instances, resources, functions, and tables, and to list all object types in the test_project_a project. grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker; --View the permissions for the user Lily. show grants for ALIYUN$5638xxxxxxxx6899; --The following authorization result indicates that the user Lily has the specified permissions. [roles] worker Authorization Type: ACL [role/worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List -
Exemple 5 : Révoquer les mêmes autorisations basées sur un rôle pour plusieurs utilisateurs
Sur la base de l'exemple 4, révoquez les autorisations des utilisateurs Alice, Tom et Lily@aliyun.com. Voici des exemples de commandes.
-- Bob switches to the test_project_a project. use test_project_a; --Revoke the Worker role from the users Alice, Tom, and Lily@aliyun.com. revoke Worker from RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; revoke Worker from RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; revoke Worker from ALIYUN$5638xxxxxxxx6899; --Check Lily's permissions after revocation. The permission list no longer includes the Worker role. show grants for ALIYUN$5638xxxxxxxx6899;
Étapes suivantes
Une fois que vous avez compris le fonctionnement de l'autorisation ACL, vous pouvez gérer les autorisations en fonction de vos besoins métier :