O MaxCompute oferece controle de acesso baseado em políticas para configurações de permissão complexas e flexíveis, sendo ideal para grandes empresas e cenários que exigem controle refinado. Diferentemente da autorização por lista de controle de acesso (ACL), o controle de acesso baseado em políticas também suporta lista de bloqueios. Isso permite 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 você associar a 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 realizar operações específicas em objetos determinados.
Esse método de controle de acesso resolve problemas de autorização que não podem ser solucionados com o controle de acesso baseado em ACL. Por exemplo, se um usuário receber a função de desenvolvedor, ele terá, por padrão, permissão para excluir tabelas. Caso você precise impedir que essa função exclua tabelas, 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 |
Conceder 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. | |
Usar uma função personalizada para autorização refinada de um usuário com função integrada | Se um usuário já possui uma função integrada e você precisa de um controle mais refinado 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 executar operações em objetos do projeto e associá-la ao usuário para um gerenciamento de permissões detalhado. |
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 garanta que ela tenha sido adicionada ao projeto MaxCompute. Execute o comando
list roles;na [MaxCompute client](t12112.dita#concept_dvj_dzw_5db) para obter informações sobre as funções. Para criar uma nova função, consulte [Role planning](t12096.xdita#concept_r4v_qzz_vdb).-
O tipo de objeto, o nome do objeto e as ações a serem concedidas.
Para obter mais informações sobre tipos de objetos e ações, consulte [MaxCompute permissions](t12097.dita#concept_ubm_4yz_vdb).
-
Precauções:
Caso haja configurações de autorização por lista de permissões e lista de bloqueios simultaneamente, a lista de bloqueios tem precedência.
O controle de acesso baseado em políticas 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 que podem surgir ao excluir e recriar um objeto com o mesmo nome.
Quando um usuário é removido, suas permissões são mantidas. Se o usuário for adicionado novamente 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](t2159763.dita#section_anq_bwq_qzt).
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>"]); -
Revogar 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 ação a ser concedida. É possível especificar várias ações em um único comando. Ao especificar múltiplas ações, separe-as por vírgulas (,). Para obter mais informações sobre os valores válidos, consulte MaxCompute permissions. | |
object_type | Sim | O tipo do objeto no qual as permissões serão concedidas. Apenas um tipo de objeto pode ser especificado por comando. Para obter mais informações sobre os valores válidos, consulte MaxCompute permissions. | |
object_name | Sim | O nome do objeto no qual as permissões serão concedidas. Você pode obter o nome das seguintes formas:
É possível usar um asterisco () como caractere curinga no nome do objeto. Por exemplo, Nota
O uso de caractere curinga (*) é permitido apenas ao conceder permissões a uma ROLE. Caracteres curinga não são suportados ao conceder permissões a um USER. | |
role_name | Sim | O 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 que o método de controle de acesso baseado em políticas está sendo utilizado. |
allow | Obrigatório para autorização por lista de permissões | O mecanismo de autorização. Valores válidos:
| |
conditions | Não | Controla permissões com base em dimensões como a origem da mensagem de solicitação e o método de acesso. Para obter 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) sob a conta Bob@aliyun.com. Allen possui a função Admin para o projeto test_project_a. Os exemplos demonstram como executar operações de autorização no cliente MaxCompute:
-
Exemplo 1: Conceder permissões a um usuário com base em uma função (lista de bloqueios)
Negue ao usuário Tom a exclusão de tabelas que começam com
tb_.-
O exemplo a seguir mostra como implementar a autorização por política usando 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 mostra como implementar a autorização por política no console:
Faça login no 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:
Na aba Role Permissions, localize a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Tomà função.
-
-
Exemplo 2: Revogar autorização por política (lista de bloqueios)
Com base no Exemplo 1, revogue a autorização do usuário Tom.
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" } -
Exemplo 3: Conceder permissões a um usuário com base em uma função (lista de permissões)
Permita que Tom atualize dados em tabelas que começam com
tb_.-
O exemplo a seguir mostra como implementar a autorização por política usando comandos:
-- 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; -
O exemplo a seguir mostra como implementar a autorização por política no console:
Faça login no 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:
-- 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 Na aba Role Permissions, localize a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Tomà função.
-
-
Exemplo 4: Revogar autorização por política (lista de permissões)
Com base no Exemplo 3, revogue a autorização do usuário Tom.
-
Exemplo 5: Realizar autorização refinada para um usuário com função integrada
Negue ao usuário Allen a exclusão de todas as tabelas no projeto test_project_a.
-
O exemplo a seguir mostra como implementar a autorização por política usando comandos:
{ "Statement":[ { "Action":[ "odps:Update" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" } -
O exemplo a seguir mostra como implementar a autorização por política no console:
Faça login no 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:
-- 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; Na aba Role Permissions, localize a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Allenà função.
-
-
Exemplo 6: Revogar autorização para um usuário com função integrada
Com base no Exemplo 5, revogue a autorização do usuário Allen. O comando a seguir serve como exemplo.
-- 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;-- 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 -
Exemplo 7: Conceder a um usuário (Tom) a permissão para consultar todas as tabelas com base em uma função (lista de permissões)
-
O exemplo a seguir mostra como implementar a autorização por política usando 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 a seguir mostra como implementar a autorização por política no console:
Faça login no 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" }{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" } Na aba Role Permissions, localize a nova função, clique em Manage Members na coluna Actions e adicione
RAM$Bob@aliyun.com:Tomà função.
-
Próximos passos
Após configurar o controle de acesso baseado em políticas, você pode executar as seguintes operações conforme necessário:
[Project-level role authorization](t2159759.xdita#concept_2159759)
[Manage user permissions using commands](t2159763.xdita#concept_2159763)
[Query the permission information of a user, role, or object](t12098.dita#concept_dqq_xf1_wdb)
Para obter mais informações sobre o controle de acesso baseado em políticas, consulte os seguintes tópicos:
Para práticas de autorização do controle de acesso baseado em políticas, consulte [Policy-based access control practices](t2492256.xdita#64e5e90047mft).
Para gerenciar permissões de operação de forma mais granular para usuários com funções integradas, consulte [Manage permissions for users with built-in roles based on policies](t2136310.xdita#).
Para perguntas frequentes sobre gerenciamento de permissões no MaxCompute, consulte [FAQ about permission management](t2144472.xdita#).