O MaxCompute oferece controle de acesso baseado em políticas para definições de permissão complexas e flexíveis, ideal para grandes empresas e cenários que exigem controle refinado. Diferentemente da autorização por lista de controle de acesso (ACL), esse mecanismo também suporta lista de bloqueios, permitindo criar políticas que concedem ou negam a uma função a permissão para executar operações específicas em objetos específicos. As permissões entram em vigor após a associação da função a um usuário.
Contexto
O controle de acesso baseado em políticas suporta autorização por lista de permissões e lista de bloqueios. É possível conceder (lista de permissões) ou negar (lista de bloqueios) a uma função a permissão para executar operações específicas em objetos determinados.
Esse método resolve problemas de autorização que o controle de acesso baseado em ACL não consegue atender. Por exemplo, se um usuário recebe a função de desenvolvedor e possui, por padrão, permissão para excluir tabelas, mas você precisa impedir essa ação, utilize este método de controle de acesso.
Após a criação de um projeto MaxCompute, o controle de acesso baseado em políticas é ativado por padrão. O proprietário do projeto pode executar o comando set CheckPermissionUsingPolicy=true|false; no projeto MaxCompute para ativar ou desativar esse recurso.
O controle de acesso baseado em políticas aplica-se aos seguintes cenários.
Cenário | Descrição | Autorizador | Endpoint de autorização |
Concessão de permissões a usuários com base em funções | Conceda a uma função a permissão para permitir ou negar uma ou mais operações em um objeto específico. Em seguida, associe a função a vários usuários. Os usuários herdam as permissões da função. | Consulte a coluna Authorizer em permissões do MaxCompute. | |
Uso de função personalizada para autorização refinada de usuário com função integrada | Se um usuário já possui uma função integrada e você precisa de um controle mais granular sobre suas permissões, a autorização por ACL não é suficiente. Nesse caso, use o controle de acesso baseado em políticas para criar uma nova função. Assim, é possível conceder ou negar à função a permissão para operar em objetos do projeto e associá-la ao usuário para um gerenciamento detalhado de permissões. |
Observações de uso
Antes de utilizar o controle de acesso baseado em políticas, observe os seguintes pré-requisitos e precauções.
-
Pré-requisitos:
O controle de acesso baseado em políticas suporta autorização apenas para funções existentes. Confirme o nome da função a ser autorizada e certifique-se de que ela foi adicionada ao projeto MaxCompute. Execute o comando
list roles;no MaxCompute client para obter informações sobre as funções. Para criar uma nova função, consulte Role planning.-
Tipo de objeto, nome do objeto e ações a serem concedidas.
Para mais informações sobre tipos de objetos e ações, consulte MaxCompute permissions.
-
Precauções:
Caso haja configurações simultâneas de lista de permissões e lista de bloqueios, a lista de bloqueios tem precedência.
Este mecanismo permite conceder permissões em objetos inexistentes. Ao excluir um objeto, as informações de autorização por política associadas não são removidas. O autorizador deve estar ciente dos riscos de segurança decorrentes da exclusão e recriação de um objeto com o mesmo nome.
Quando um usuário é removido, suas permissões são mantidas. Se ele for readicionado ao projeto posteriormente, suas permissões anteriores serão restauradas automaticamente. Para limpar permanentemente as permissões de um usuário, consulte Clear residual permissions of a removed user.
Sintaxe
Os comandos de controle de acesso baseado em políticas seguem o formato abaixo:
-
Autorização por política
GRANT <actions> ON <object_type> <object_name> TO ROLE <role_name> PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>"]); -
Revogação de autorização por política
REVOKE <actions> ON <object_type> <object_name> FROM ROLE <role_name> PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}");
A tabela a seguir descreve os parâmetros.
Parâmetro | Obrigatório | Descrição | |
actions | Sim | Ação a ser concedida. É possível especificar múltiplas ações em um único comando. Ao especificar várias ações, separe-as por vírgulas (,). Para mais informações sobre os valores válidos, consulte MaxCompute permissions. | |
object_type | Sim | Tipo do objeto sobre o qual as permissões serão concedidas. Apenas um tipo de objeto pode ser especificado por comando. Para mais informações sobre os valores válidos, consulte MaxCompute permissions. | |
object_name | Sim | Nome do objeto alvo da concessão de permissões. Obtenha o nome de uma das seguintes formas:
É possível usar um asterisco () como curinga no nome do objeto. Por exemplo, Nota
O uso de curinga (*) é permitido apenas ao conceder permissões a uma ROLE. Curingas não são suportados na concessão de permissões a um USER. | |
role_name | Sim | Nome da função a ser autorizada. Apenas uma função pode ser especificada por comando. Execute o comando | |
privilegeproperties | policy | Sim | Defina o valor como true. Isso indica o uso do método de controle de acesso baseado em políticas. |
allow | Obrigatório para autorização por lista de permissões | Mecanismo de autorização. Valores válidos:
| |
conditions | Não | Controla permissões com base em dimensões como origem da mensagem de solicitação e método de acesso. Para mais informações sobre os valores válidos, consulte Conditions. | |
Exemplos de controle de acesso baseado em políticas
Nos exemplos a seguir, Bob@aliyun.com é o proprietário do projeto test_project_a, enquanto Allen e Tom são usuários do Resource Access Management (RAM) vinculados à conta Bob@aliyun.com. Allen possui a função Admin no projeto test_project_a. Os exemplos demonstram como realizar operações de autorização no MaxCompute client:
-
Exemplo 1: Concessão de permissões a um usuário com base em função (lista de bloqueios)
Negue ao usuário Tom a permissão para excluir tabelas que começam com
tb_.-
O exemplo abaixo mostra como implementar a autorização por política via comandos:
-- Bob enters the test_project_a project. USE test_project_a; -- Create the Worker role. CREATE ROLE Worker; -- Add the user Tom as a project member. ADD USER RAM$Bob@aliyun.com:Tom; -- Attach the Worker role to the user Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Deny the Worker role from deleting tables that start with tb_ in the test_project_a project. GRANT Drop ON TABLE tb_* TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="false"); -- View the authorization result for the user Tom. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -- The following authorization result is returned. D indicates Deny. Deleting tables that start with tb_ is denied. Authorization Type: Policy [role/worker] D projects/test_project_a/tables/tb_*: Drop -
O exemplo a seguir ilustra a implementação da autorização por política no console:
Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.
Na aba Role Permissions, clique em Create Project-level Role.
-
Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.
Segue um exemplo de política:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" } Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Tomà função.
-
-
Exemplo 2: Revogação de autorização por política (lista de bloqueios)
Com base no Exemplo 1, revogue a autorização do usuário Tom.
-- Bob enters the test_project_a project. USE test_project_a; -- Revoke the Worker role from the user Tom. REVOKE Worker FROM RAM$Bob@aliyun.com:Tom; -- View the authorization result for the user Tom. The permission list does not contain the Drop permission information. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -
Exemplo 3: Concessão de permissões a um usuário com base em função (lista de permissões)
Permita que Tom atualize dados em tabelas que começam com
tb_.-
O exemplo abaixo demonstra a implementação da autorização por política via comandos:
-- Bob enters the test_project_a project. USE test_project_a; -- Create the Worker role. CREATE ROLE Worker; -- Add the user Tom as a project member. ADD USER RAM$Bob@aliyun.com:Tom; -- Attach the Worker role to the user Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Allow the Worker role to update data in tables that start with tb_ in the test_project_a project. GRANT Update ON TABLE tb_* TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="true"); -- View the authorization result for the user Tom. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -- The following authorization result is returned. A indicates Allow. You can update data in tables that start with tb_. Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Update -
O exemplo a seguir mostra como configurar a autorização por política no console:
Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.
Na aba Role Permissions, clique em Create Project-level Role.
-
Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.
Segue um exemplo de política:
{ "Statement":[ { "Action":[ "odps:Update" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" } Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Tomà função.
-
-
Exemplo 4: Revogação de autorização por política (lista de permissões)
Com base no Exemplo 3, revogue a autorização do usuário Tom.
-- Bob enters the test_project_a project. USE test_project_a; -- Revoke the Worker role from the user Tom. REVOKE Worker FROM RAM$Bob@aliyun.com:Tom; -- View the authorization result for the user Tom. The permission list does not contain the Update permission information. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -
Exemplo 5: Autorização refinada para usuário com função integrada
Negue ao usuário Allen a permissão para excluir todas as tabelas do projeto test_project_a.
-
O exemplo abaixo apresenta a implementação da autorização por política utilizando comandos:
-- Bob enters the test_project_a project. USE test_project_a; -- Create the Worker role. CREATE ROLE Worker; -- Attach the Worker role to the user Allen. GRANT Worker TO RAM$Bob@aliyun.com:Allen; -- Deny the Worker role from deleting all tables in the test_project_a project. GRANT Drop ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="false"); -- View the authorization result for the user Allen. SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen; -- The following authorization result is returned. Deleting all tables is denied. [roles] role_project_admin, worker Authorization Type: Policy [role/role_project_admin] A projects/test_project_a: * A projects/test_project_a/instances/*: * A projects/test_project_a/jobs/*: * A projects/test_project_a/offlinemodels/*: * A projects/test_project_a/packages/*: * A projects/test_project_a/registration/functions/*: * A projects/test_project_a/resources/*: * A projects/test_project_a/tables/*: * A projects/test_project_a/volumes/*: * [role/worker] A projects/test_project_a/tables/tb_*: Update D projects/test_project_a/tables/*: Drop -- A in AG indicates Allow. G in AG indicates With Grant Option, which lets you grant permissions on the object. Authorization Type: ObjectCreator AG projects/test_project_a/tables/local_test: All AG projects/test_project_a/tables/mr_multiinout_out1: All AG projects/test_project_a/tables/mr_multiinout_out2: All AG projects/test_project_a/tables/ramtest: All AG projects/test_project_a/tables/wc_in: All AG projects/test_project_a/tables/wc_in1: All AG projects/test_project_a/tables/wc_in2: All AG projects/test_project_a/tables/wc_out: All -
O exemplo a seguir detalha a configuração da autorização por política no console:
Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.
Na aba Role Permissions, clique em Create Project-level Role.
-
Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.
Segue um exemplo de política:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" } Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Allenà função.
-
-
Exemplo 6: Revogação de autorização para usuário com função integrada
Com base no Exemplo 5, revogue a autorização do usuário Allen. O comando abaixo serve como referência.
-- Bob enters the test_project_a project. USE test_project_a; -- Revoke the Worker role from the user Allen. REVOKE Worker FROM RAM$Bob@aliyun.com:Allen; -- View the authorization result for the user Allen. The permission list does not contain the Drop permission information. SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen; -
Exemplo 7: Concessão de permissão de consulta em todas as tabelas a um usuário (Tom) com base em função (lista de permissões)
-
O exemplo a seguir demonstra a aplicação da autorização por política através de comandos:
-- Bob enters the test_project_a project. USE test_project_a; -- Create the Worker role. CREATE ROLE Worker; -- Add the user Tom as a project member. ADD USER RAM$Bob@aliyun.com:Tom; -- Attach the Worker role to the user Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Allow the Worker role to query all tables in the test_project_a project. GRANT Describe,Select ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="true"); -- View the authorization result for the user Tom. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -- The following authorization result is returned. A indicates Allow. You can query all tables in the test_project_a project. Authorization Type: Policy [role/worker] A projects/test_project_a/tables/*: Describe | Select -
O exemplo abaixo ilustra como realizar a autorização por política no console:
Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.
Na aba Role Permissions, clique em Create Project-level Role.
-
Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.
Segue um exemplo de política:
{ "Statement":[ { "Action":[ "odps:Describe", "odps:Select" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" } Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Tomà função.
-
Para práticas de autorização com controle de acesso baseado em políticas, visualize Policy-based access control practices.
Para gerenciar permissões operacionais de forma mais granular em usuários com funções integradas, consulte Manage permissions for users with built-in roles based on policies.
Para perguntas frequentes sobre gerenciamento de permissões no MaxCompute, acesse 权限管理常见问题.
Próximos passos
Após configurar o controle de acesso baseado em políticas, realize as operações abaixo conforme necessário:
Para mais detalhes sobre o controle de acesso baseado em políticas, consulte os tópicos a seguir: