Si necesita permitir que varios usuarios trabajen con objetos de MaxCompute, como proyectos y tablas, puede utilizar listas de control de acceso (ACL) para otorgar permisos específicos a usuarios o roles. Para gestionar de manera eficiente los permisos de múltiples usuarios, otorgue los permisos a un rol y luego asigne ese rol a los usuarios. Este tema describe los comandos de autorización ACL que admite MaxCompute y proporciona ejemplos.
Contexto
El control de acceso basado en ACL utiliza un modelo de autorización de lista de permitidos. Usted permite explícitamente que un usuario o rol realice acciones específicas sobre un objeto determinado. Esto hace que la autorización sea sencilla y precisa.
Después de crear un proyecto de MaxCompute, el control de acceso basado en ACL se habilita de forma predeterminada. El propietario del proyecto puede ejecutar el comando set CheckPermissionUsingACL=true|false; en el proyecto para habilitar o deshabilitar esta función.
El control de acceso basado en ACL aplica a los siguientes escenarios.
|
Escenario |
Descripción |
Otorgante |
Punto de entrada |
|
Otorgar permisos a un usuario |
Otorgue una o más acciones sobre un objeto específico directamente a un solo usuario. |
Consulte la columna Supported grantors en la lista de permisos. |
|
|
Otorgar permisos a usuarios basados en roles |
Otorgue una o más acciones sobre un objeto específico directamente a un rol y luego asigne ese rol a varios usuarios. Los usuarios heredan los permisos del rol. Para obtener más información sobre cómo crear roles y asignarlos a usuarios, consulte Role planning y Attach a role to a user. Nota
Los roles están diseñados para una gestión eficiente de usuarios. Evite otorgar los mismos permisos sobre el mismo objeto a múltiples roles. |
Requisitos previos
Antes de utilizar el control de acceso basado en ACL, asegúrese de contar con la siguiente información:
-
El nombre de la cuenta o el nombre del rol del receptor. El usuario o rol debe estar agregado al proyecto de MaxCompute. Los formatos de cuenta son los siguientes: una cuenta de Alibaba Cloud tiene el formato ALIYUN$<account_id>, una cuenta de usuario RAM tiene el formato RAM$<account_id>:<RAM user UID>, y un rol RAM tiene el formato
RAM$<account_id>:role/<RAM role name>.Puede ejecutar el comando
list users;olist roles;en MaxCompute client para obtener los nombres de cuentas o roles.Para agregar un usuario o rol, consulte User planning and management o Role planning.
-
El tipo de objeto, el nombre del objeto y las acciones por otorgar.
Para obtener más información sobre tipos de objetos y acciones, consulte MaxCompute permissions.
Límites
Los siguientes límites aplican al control de acceso basado en ACL:
Solo puede otorgar permisos a usuarios o roles existentes sobre objetos existentes. Esto evita riesgos de seguridad derivados de eliminar y volver a crear un objeto con el mismo nombre.
El control de acceso basado en ACL no admite la autorización con la cláusula
[with grant option]. Por ejemplo, si el usuario A otorga al usuario B acceso a un objeto, el usuario B no puede posteriormente otorgar ese permiso al usuario C.La autorización ACL utiliza un modelo de lista de permitidos y no admite un modelo de lista de bloqueados.
Notas de uso
Tenga en cuenta lo siguiente al utilizar el control de acceso basado en ACL:
Si elimina un objeto, MaxCompute revoca automáticamente todos los permisos ACL asociados a este.
Cuando se elimina un usuario, sus permisos se conservan. Si el usuario se vuelve a agregar al proyecto posteriormente, sus permisos anteriores se restauran automáticamente. Para borrar permanentemente los permisos de un usuario, consulte Clear residual permissions of a removed user.
Sintaxis
Los comandos de control de acceso basado en ACL utilizan la siguiente sintaxis:
-
Otorgar permisos ACL
grant <actions> on <object_type> <object_name> [(<column_list>)] to <subject_type> <subject_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; -
Revocar permisos ACL
revoke <actions> on <object_type> <object_name> [(<column_list>)] from <subject_type> <subject_name>; -
Control de acceso a nivel de columna
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>;
La siguiente tabla describe los parámetros.
|
Parámetro |
Obligatorio |
Descripción |
|
|
actions |
Sí |
Las acciones por otorgar. Puede especificar una o más acciones en una sola instrucción 'grant'. Separe múltiples acciones con comas (,). Para ver una lista de acciones válidas, consulte MaxCompute permissions. |
|
|
object_type |
Sí |
El tipo de objeto sobre el cual se otorgarán permisos. Solo puede especificar un tipo de objeto por instrucción. Para ver una lista de tipos de objetos válidos, consulte MaxCompute permissions. |
|
|
object_name |
Sí |
El nombre del objeto. Puede encontrar el nombre de la siguiente manera:
Puede usar un asterisco () como comodín en el nombre de un objeto. Por ejemplo, Nota
Solo puede usar un comodín (*) cuando otorga permisos a un ROLE. No se admiten comodines cuando otorga permisos a un USER. |
|
|
column_list |
No |
Este parámetro es obligatorio solo cuando object_type es tabla y desea implementar control de acceso a nivel de columna. Puede especificar una o más columnas. Separe múltiples nombres de columna con comas (,). Nota
Este parámetro controla los permisos Describe, Select, Alter, Update, Drop, ShowHistory y ALL en las columnas especificadas. Si se configura un nivel de sensibilidad para una columna, puede usar Label-based access control para controlar el acceso a datos sensibles según las etiquetas de sensibilidad. |
|
|
privilegeproperties |
conditions |
No |
Controla los permisos basándose en atributos como el origen de la solicitud y el método de acceso. El formato es |
|
days |
No |
El número de días antes de que expire el permiso. Si no especifica este parámetro, el permiso no caduca. Si especifica este parámetro, MaxCompute elimina automáticamente el registro del permiso después de su vencimiento. |
|
|
subject_type |
Sí |
El tipo de receptor. Valores válidos:
|
|
|
subject_name |
Sí |
La cuenta de usuario o el nombre del rol del receptor. Solo puede especificar un usuario o rol por cada otorgamiento. Formatos:
Puede ejecutar el comando |
|
Condiciones
La siguiente tabla enumera los valores admitidos de var_name y Operation para conditions.
|
var_name |
Tipo |
Operación |
Descripción |
|
acs:UserAgent |
STRING |
|
El User-Agent del cliente solicitante. |
|
acs:Referer |
STRING |
El Referer HTTP de la solicitud. |
|
|
acs:SourceIp |
Dirección IP |
|
La dirección IP del cliente solicitante. |
|
acs:SecureTransport |
BOOLEAN |
|
Indica si la solicitud se envía a través de un canal seguro, como HTTPS. |
|
acs:CurrentTime |
DATEANDTIME |
|
La hora en que el servidor web recibe la solicitud, en formato ISO 8601, como 2012-11-11T23:59:59Z. |
Ejemplos
Suponga que Bob@aliyun.com (ID de cuenta: 5527xxxxxxxx5788) es el propietario del proyecto test_project_a, y Allen (UID: 1652xxxxxxxxxx1538), Alice (UID: 2763xxxxxxxxxx1649) y Tom (UID: 3874xxxxxxxxxx1850) son usuarios RAM bajo Bob@aliyun.com. Los siguientes ejemplos demuestran operaciones de autorización mediante el cliente de MaxCompute.
-
Ejemplo 1: Otorgar permisos a un usuario
Cree la tabla sale_detail en el proyecto test_project_a y otorgue al usuario Allen los permisos Describe (leer metadatos) y Select (leer datos) sobre dicha tabla. A continuación se muestran comandos de ejemplo.
-- 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 -
Ejemplo 2: Otorgar permisos a nivel de columna a un usuario
Utilizando la tabla sale_detail creada en el Ejemplo 1, otorgue al usuario Alice todos los permisos sobre las columnas shop_name y customer_id en la tabla sale_detail. A continuación se muestran comandos de ejemplo.
-- 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 -
Ejemplo 3: Revocar permisos de usuarios
Con base en el Ejemplo 1 y el Ejemplo 2, revoque los permisos de los usuarios Allen y Alice. A continuación se muestran comandos de ejemplo.
-- 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; -
Ejemplo 4: Otorgar los mismos permisos a varios usuarios mediante un rol
Otorgue a Alice, Tom y otra cuenta de Alibaba Cloud Lily@aliyun.com (ID de cuenta: 5638xxxxxxxx6899) los permisos para crear instancias, recursos, funciones y tablas, así como para listar todos los tipos de objetos en el proyecto test_project_a. A continuación se muestran comandos de ejemplo.
-- 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 -
Ejemplo 5: Revocar los mismos permisos basados en roles de varios usuarios
Con base en el Ejemplo 4, revoque los permisos de los usuarios Alice, Tom y Lily@aliyun.com. A continuación se muestran comandos de ejemplo.
-- 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;
Siguientes pasos
Una vez que comprenda cómo funciona la autorización ACL, podrá gestionar los permisos según sus necesidades empresariales: