O MaxCompute oferece um método de controle de acesso baseado em políticas para definições de permissão complexas e flexíveis. Esse método é ideal para grandes empresas e cenários complexos 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. Esse recurso 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. Após anexar a função a um usuário, as permissões entram em vigor. Este tópico descreve os comandos de autorização por política compatíveis com o MaxCompute e fornece exemplos de autorização.
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 específicos.
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, anexe a função a vários usuários. Os usuários herdam as permissões da função. | Consulte a coluna Autorizador 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 atribuída 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. Você pode então conceder ou negar à função a permissão para executar operações em objetos do projeto e anexar a função ao usuário para um gerenciamento de permissões refinado. |
Observações de uso
Antes de usar o recurso de controle de acesso baseado em políticas, observe seus pré-requisitos, limites 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;no cliente MaxCompute para recuperar informações sobre as funções. Para criar uma nova função, consulte Planejamento de funções.-
Tipo de objeto, nome do objeto e ações a serem concedidas.
Para obter mais informações sobre tipos de objetos e ações, consulte Permissões do MaxCompute.
-
Precauções:
Se ambas as autorizações de lista de permissões e lista de bloqueios estiverem configuradas, a lista de bloqueios terá 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 excluídas. 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 retidas. 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 Limpar permissões residuais de um usuário removido.
Sintaxe
Os comandos de controle de acesso baseado em políticas seguem o seguinte formato:
-
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. Se você especificar várias ações, separe-as por vírgulas (,). Para obter mais informações sobre os valores válidos, consulte Permissões do MaxCompute. | |
object_type | Sim | O tipo do objeto a receber a concessão. Apenas um tipo de objeto pode ser especificado por comando. Para obter mais informações sobre os valores válidos, consulte Permissões do MaxCompute. | |
object_name | Sim | O nome do objeto a receber a concessão. Obtenha o nome de uma das seguintes maneiras:
Use 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 | O nome da função a ser autorizada. Especifique apenas uma função 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 | Especifica 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 Condições. | |
Exemplos de controle de acesso baseado em políticas
Suponha que Bob@aliyun.com seja o proprietário do projeto test_project_a, e Allen e Tom sejam usuários do Resource Access Management (RAM) sob a conta Bob@aliyun.com. Allen recebeu a função Admin do projeto test_project_a. Os exemplos a seguir mostram como realizar 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 a 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 console MaxCompute 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.
Veja abaixo 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, clique em Manage Members na coluna Actions da nova função 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.
-- 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: 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; -- 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 implementar a autorização por política no console:
Faça login no console MaxCompute 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.
Veja abaixo 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, clique em Manage Members na coluna Actions da nova função 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.
-- 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: Realizar autorização refinada para um usuário com função integrada
Negue a 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:
-- 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 mostra como implementar a autorização por política no console:
Faça login no console MaxCompute 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 e especifique o Role Name e a política de autorização.
Veja abaixo 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, clique em Manage Members na coluna Actions da nova função 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. Veja abaixo um exemplo de comando.
-- 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: 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 console MaxCompute 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, defina Role Type como Resource, especifique o Role Name e defina Authorization Method como Policy.
Veja abaixo 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, clique em Manage Members na coluna Actions da nova função e adicione
RAM$Bob@aliyun.com:Tomà função.
-
Para práticas de autorização de controle de acesso baseado em políticas, consulte Práticas de controle de acesso baseado em políticas.
Para gerenciar permissões de operação de usuários com funções integradas de forma mais refinada, consulte Gerenciar permissões para usuários com funções integradas com base em políticas.
Para perguntas frequentes sobre gerenciamento de permissões no MaxCompute, consulte FAQ sobre gerenciamento de permissões.
Próximos passos
Após compreender o mecanismo de autorização por política, realize as seguintes operações de autorização conforme necessário:
Para obter mais informações sobre o mecanismo de autorização por política, consulte os seguintes tópicos: