Para proteger os dados em um projeto do MaxCompute, o proprietário do projeto ou um usuário autorizado deve gerenciar o acesso dos membros seguindo o princípio do menor privilégio. Este tópico apresenta casos de uso comuns para gerenciamento de permissões.
Visão geral da prioridade de avaliação de permissões
A regra Deny tem precedência sobre a regra Allow.
O Project Owner e o Super_Administrator não estão sujeitos a restrições.
A autorização ACL e a autorização Policy são avaliadas de forma independente. Uma Condition restringe apenas a Policy à qual pertence.
Casos de uso de controle de acesso baseado em policy
Conceder permissões de função via policy
-
Caso de uso:
Conceder a um grupo de membros do projeto permissões para criar tabelas, fazer upload de resources, criar funções e executar tarefas. O acesso deve ser restrito a somente leitura para tabelas cujos nomes começam com o prefixo
t_app_. -
Procedimento:
Use the MaxCompute client
-
Crie uma nova função.
create role <role_name>;<role_name> é o nome da função.
-
No diretório
bindo cliente MaxCompute, crie um arquivo chamadopolicy_1.jsone cole o seguinte conteúdo nele:{ "Statement": [ { "Action": ["odps:List", "odps:CreateTable", "odps:CreateInstance", "odps:CreateResource", "odps:CreateFunction"], "Effect": "Allow", "Resource": ["acs:odps:*:projects/<project_name>"]}, { "Action": ["odps:*"], "Effect": "Allow", "Resource": [ "acs:odps:*:projects/<project_name>/tables/t_app_*", "acs:odps:*:projects/<project_name>/registration/functions/*", "acs:odps:*:projects/<project_name>/instances/*", "acs:odps:*:projects/<project_name>/resources/*"]}], "Version": "1"}<project_name> é o nome do projeto do MaxCompute.
-
Aplique a policy e conceda a função.
-- Attach the policy to the new role. put policy policy_1.json on role <role_name>; -- Grant the role to the target user. grant <role_name> to <user_name>;<user_name> é a conta de usuário de destino. Para uma conta Alibaba Cloud, use o formato
ALIYUN$<account_email>. Para um usuário RAM, use o formatoRAM$<parent_account_email>:<ram_user_name>.
Use the 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, clique em Manage na coluna Actions do projeto desejado.
Na página Project Settings, clique na aba Role Permissions.
Clique em Create Project-level Role para criar uma função de nível de projeto com as permissões necessárias do MaxCompute.
-
Na caixa de diálogo Create Role, crie uma função do tipo Resource, insira um Role Name e cole o conteúdo da policy.
{ "Statement": [ { "Action": ["odps:List", "odps:CreateTable", "odps:CreateInstance", "odps:CreateResource", "odps:CreateFunction"], "Effect": "Allow", "Resource": ["acs:odps:*:projects/<project_name>"]}, { "Action": ["odps:*"], "Effect": "Allow", "Resource": [ "acs:odps:*:projects/<project_name>/tables/t_app_*", "acs:odps:*:projects/<project_name>/registration/functions/*", "acs:odps:*:projects/<project_name>/instances/*", "acs:odps:*:projects/<project_name>/resources/*"]}], "Version": "1"} Selecione a função de nível de projeto desejada e clique em Manage Members na coluna Actions. Selecione a conta Alibaba Cloud ou o usuário RAM que você deseja autorizar e clique em OK. Caso não encontre a conta na primeira tentativa de concessão de permissões, adicione-a na seção Add Member Manually abaixo.
-
Negar permissões de função via policy
-
Caso de uso: Algumas tabelas são críticas para o negócio e devem ser protegidas contra exclusão acidental. É necessário impedir que usuários específicos excluam qualquer tabela cujo nome comece com o prefixo
tb_. -
Procedimento:
Use the MaxCompute client
-
Crie uma nova função.
create role <role_name>;<role_name> é o nome da função.
-
No diretório
bindo cliente MaxCompute, crie um arquivo chamadopolicy_2.jsone cole o seguinte conteúdo nele:{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" }] }<project_name> é o nome do projeto do MaxCompute.
-
Aplique a policy e conceda a função.
-- Attach the policy to the new role. put policy policy_2.json on role <role_name>; -- Grant the role to the target user. grant <role_name> to <user_name>;<user_name> é a conta de usuário de destino. Para uma conta Alibaba Cloud, use o formato
ALIYUN$<account_email>. Para um usuário RAM, use o formatoRAM$<parent_account_email>:<ram_user_name>.
Use the 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, clique em Manage na coluna Actions do projeto desejado.
Na página Project Settings, clique na aba Role Permissions.
-
Na caixa de diálogo Create Role, crie uma função do tipo Resource, insira um Role Name e cole o conteúdo da policy.
Insira o seguinte conteúdo de policy:
{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" }] } Selecione a função de nível de projeto desejada e clique em Manage Members na coluna Actions. Selecione a conta Alibaba Cloud ou o usuário RAM que você deseja autorizar e clique em OK. Caso não encontre a conta na primeira tentativa de concessão de permissões, adicione-a na seção Add Member Manually abaixo.
-
Conceder permissões condicionais via policy
Uma Condition em uma Policy restringe apenas as permissões concedidas por essa Policy específica. Ela não afeta permissões obtidas por meio de ACL (comandos GRANT) ou herança de funções.
Se um usuário também possuir outras fontes de permissão incondicionais (como a função admin ou concessões diretas de ACL), a restrição de IP na Condition não terá efeito.
-
Exemplo 1:
-
Caso de uso:
Conceder a um usuário (
a****@aliyunid.com) um conjunto de permissões com condições específicas. O usuário pode realizar as açõesCreateInstance,CreateTableeListno projeto test_project somente se a solicitação for feita antes das23:59:59 de 11 de novembro de 2026e originar-se do intervalo de endereços IP10.32.180.0/23. Além disso, deve-se negar ao usuário a permissão para excluir qualquer tabela nesse projeto. -
Procedimento:
Use the MaxCompute client
-
Crie uma nova função.
create role policy_3; -
No diretório
bindo cliente MaxCompute, crie um arquivo chamadopolicy_3.jsone cole o seguinte conteúdo nele:{ "Version": "1", "Statement": [{ "Effect":"Allow", "Action":["odps:CreateTable","odps:CreateInstance","odps:List"], "Resource":"acs:odps:*:projects/<project_name>", "Condition":{ "DateLessThan": { "acs:CurrentTime":"2026-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp":"10.32.180.0/23" } } }, { "Effect":"Deny", "Action":"odps:Drop", "Resource":"acs:odps:*:projects/<project_name>/tables/*" }] }<project_name> é o nome do projeto do MaxCompute.
-
Aplique a policy e conceda a função.
-- Attach the policy to the new role. put policy policy_3.json on role policy_3; -- Grant the role to the target user. grant policy_3 to ALIYUN$a****@aliyunid.com;
Use the 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, clique em Manage na coluna Actions do projeto desejado.
Na página Project Settings, clique na aba Role Permissions.
-
Na caixa de diálogo Create Role, crie uma função do tipo Resource, insira um Role Name e cole o conteúdo da policy.
Insira o seguinte conteúdo de policy:
{ "Version": "1", "Statement": [{ "Effect":"Allow", "Action":["odps:CreateTable","odps:CreateInstance","odps:List"], "Resource":"acs:odps:*:projects/<project_name>", "Condition":{ "DateLessThan": { "acs:CurrentTime":"2026-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp":"10.32.180.0/23" } } }, { "Effect":"Deny", "Action":"odps:Drop", "Resource":"acs:odps:*:projects/<project_name>/tables/*" }] } Selecione a função de nível de projeto desejada e clique em Manage Members na coluna Actions. Selecione a conta Alibaba Cloud ou o usuário RAM que você deseja autorizar e clique em OK. Caso não encontre a conta na primeira tentativa de concessão de permissões, adicione-a na seção Add Member Manually abaixo.
-
-
-
Exemplo 2: Impor controle de acesso por IP via Deny Policy
-
Caso de uso:
Restringir usuários específicos a acessar o projeto apenas a partir de um intervalo de IP designado, independentemente de como obtiveram suas permissões.
-
Abordagem principal:
Crie uma Deny Policy que rejeite todas as solicitações provenientes de endereços IP fora do intervalo designado. Como Deny tem precedência sobre
Allow, mesmo que o usuário tenha permissões via ACL ou outras funções, o acesso a partir de um endereço IP não designado será negado.
-
Conteúdo da policy:
{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:*", "Resource": "acs:odps:*:projects/<project_name>/*", "Condition": { "NotIpAddress": { "acs:SourceIp": "10.32.180.0/23" } } }] }
-
Casos de uso de autorização por package
Compartilhamento de recursos entre projetos via package
-
Caso de uso:
Um analista de negócios precisa visualizar dados em tabelas de produção sem ver o código das tarefas de produção, exigindo acesso a um subconjunto específico de tabelas de vários projetos de produção.
-
Solução:
Como o analista não deve ver as tarefas de produção, crie um projeto separado para análise. Em cada projeto de produção, crie um package contendo as tabelas a serem compartilhadas e permita que o projeto de análise o instale. Após a instalação, conceda permissões ao analista. Essa abordagem elimina a necessidade de adicionar o analista a todos os projetos de produção e garante que ele possa visualizar apenas as tabelas de produção compartilhadas dentro do projeto de análise.
Neste exemplo, um
packagechamadoPackage_testé criado em um projeto de produção (Project_a). Umatablede produção (table_a) é adicionada a estepackage. Opackageé então instalado em um projeto de análise (Project_analyze), e um usuário (A*@aliyunid.com) recebe permissão para consultar a tabela através do package. -
Procedimento:
-
No projeto de produção, crie um package.
USE Project_a; CREATE PACKAGE Package_test; -
No projeto de produção, adicione o recurso a ser compartilhado ao package.
ADD table table_a TO PACKAGE Package_test; -
No projeto de produção, permita que o projeto de análise instale o package.
ALLOW PROJECT Project_analyze TO INSTALL PACKAGE Package_test; -
No projeto de análise, instale o package.
USE Project_analyze; INSTALL PACKAGE Project_a.Package_test; -
Conceda ao analista permissão de leitura no package.
GRANT read on package Package_test TO USER ALIYUN$A*****@aliyunid.com; -
O analista agora pode consultar dados da tabela.
select * from Project_a.table_a;
-
Compartilhamento de recursos entre contas via package
-
Caso de uso
Dentro de uma única empresa, diferentes departamentos podem usar contas Alibaba Cloud separadas para gerenciar seus recursos do MaxCompute por motivos de faturamento ou organização. Quando esses departamentos precisam compartilhar dados, necessitam de um mecanismo de controle de acesso seguro e granular que permita aos usuários de uma conta ler apenas tabelas específicas de outra conta, aplicando o princípio do menor privilégio.
NotaUm usuário RAM de uma conta Alibaba Cloud não pode ser adicionado a um projeto do MaxCompute pertencente a outra conta. Por exemplo, a Conta A não pode adicionar um usuário RAM da Conta B a um projeto de sua propriedade.
Para conceder apenas permissões de leitura em uma tabela, recurso ou função, utilize um package para compartilhar o recurso entre projetos pertencentes a diferentes contas Alibaba Cloud.
-
Solução
Suponha que existam duas contas Alibaba Cloud, Conta A e Conta B. A Conta A possui um projeto chamado
Project_a, e a Conta B possui um projeto chamadoProject_b. Um usuário RAM da Conta B,b_user1, precisa de permissão de leitura nas tabelast1et2noProject_a. Outro usuário RAM da Conta B,b_user2, precisa de permissão de leitura na tabelat3noProject_a.ImportanteEmbora seja possível compartilhar dados entre diferentes contas Alibaba Cloud usando autorização, tarefas em workspaces do DataWorks pertencentes a contas distintas não podem se comunicar entre si. Isso significa que não é possível configurar dependências de agendamento entre essas tarefas.
-
Procedimento:
-
No
Project_a, use a Conta Alibaba Cloud A para criar um package chamadoa_to_b_pkge adicione as tabelast1,t2et3ao package.USE Project_a; CREATE PACKAGE a_to_b_pkg; ADD table t1 TO PACKAGE a_to_b_pkg; ADD table t2 TO PACKAGE a_to_b_pkg; ADD table t3 TO PACKAGE a_to_b_pkg; -
Permita que o projeto Project_b (de propriedade da Conta B) instale o package
a_to_b_pkg.ALLOW PROJECT Project_b TO INSTALL PACKAGE a_to_b_pkg; -
No projeto Project_b, use a Conta Alibaba Cloud B para instalar o package
a_to_b_pkg.INSTALL PACKAGE Project_a.a_to_b_pkg; -
Conceda aos usuários RAM da Conta B permissões nas tabelas do package.
add user ram$B:b_user1; add user ram$B:b_user2; GRANT Describe , Select ON TABLE t1 TO USER ram$B:b_user1 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");--Grant read permissions on table t1 to b_user1 GRANT Describe , Select ON TABLE t2 TO USER ram$B:b_user1 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");--Grant read permissions on table t2 to b_user1 GRANT Describe , Select ON TABLE t3 TO USER ram$B:b_user2 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");--Grant read permissions on table t3 to b_user2
-
Controle de acesso no nível de linha via package
-
Caso de uso:
Uma tabela chamada
table_orderno projetoProjectAcontém informações de pedidos de todos os comerciantes. Essa tabela deve ser compartilhada com os comerciantes, mas cada um deles deve conseguir ver apenas os pedidos correspondentes à sua própria loja. -
Solução:
A tabela
table_ordercontém uma coluna de ID do comerciante que pode ser usada para filtrar dados. Embora o MaxCompute não ofereça suporte direto ao controle de acesso no nível de linha, é possível alcançá-lo criando uma view separada para cada comerciante com base na tabelatable_ordere, em seguida, concedendo a cada comerciante permissões para sua view correspondente por meio de um package. -
Procedimento:
-
No ProjectA, crie uma view dedicada para cada comerciante.
CREATE VIEW <viewname> as select * from table_order WHERE sellerid='xxxx';<viewname> é o nome da view a ser criada.
-
No ProjectA, crie um package e compartilhe a view com o comerciante.
create package <packagename>; add table <viewname> to package <packagename>; allow project <Projectname_seller> to install package <packagename>;<packagename> é o nome do package. <Projectname_seller> é o nome do projeto do MaxCompute do comerciante.
-
O comerciante instala o package em seu projeto e consulta a view.
USE <Projectname_seller>; install package <ProjectA>.<packagename>; grant read on package <ProjectA>.<packagename> to user <username>; select * from <ProjectA>.<viewname>;<username> é o usuário no projeto do comerciante que precisa consultar a view.
-