Se as políticas de sistema predefinidas do ApsaraMQ for RocketMQ não atenderem aos seus requisitos de controle de acesso, crie políticas personalizadas do Resource Access Management (RAM) para aplicar o princípio de menor privilégio no nível de instância, tópico ou grupo.
Políticas de sistema versus políticas personalizadas
As políticas do RAM dividem-se em duas categorias:
|
Tipo |
Criado por |
Editável |
Controle de versão |
|
Políticas de sistema |
Alibaba Cloud |
Não |
Não |
|
Políticas personalizadas |
Você |
Sim |
Sim, por meio do gerenciamento de versões do RAM |
Após criar uma política personalizada, anexe-a a um usuário RAM, grupo de usuários RAM ou função RAM para conceder as permissões especificadas. É possível excluir diretamente uma política personalizada que não esteja anexada a nenhum principal. Para excluir uma política personalizada anexada a um principal, desanexe-a primeiro.
Ações e escopo de recursos
A tabela a seguir lista as ações disponíveis para políticas personalizadas do ApsaraMQ for RocketMQ e os tipos de recurso aos quais cada ação se aplica.
|
Ação |
Descrição |
Tipos de recurso aplicáveis |
|
|
Consultar detalhes da instância |
Instância |
|
|
Publicar mensagens em um tópico |
Tópico |
|
|
Inscrever-se para receber mensagens de um tópico ou grupo |
Tópico, Grupo |
|
|
Todas as ações |
Todos |
Formatos de ARN de recurso
O ApsaraMQ for RocketMQ oferece suporte a dois modelos de escopo de recurso, dependendo se a instância utiliza namespaces. A hierarquia de escopo, do mais amplo ao mais restrito, é: Instância > Tópico/Grupo.
Com namespaces: tópicos e grupos têm escopo definido na instância. O ID da instância faz parte do ARN do tópico e do grupo.
Sem namespaces: tópicos e grupos possuem escopo global. O ARN contém apenas o nome do tópico ou do grupo.
|
Recurso |
ARN (com namespace) |
ARN (sem namespace) |
|
Instância |
|
|
|
Tópico |
|
|
|
Grupo |
|
|
|
Todos os recursos em uma instância |
|
N/A |
Antes de conceder permissões em um tópico ou grupo, conceda a permissão mq:QueryInstanceBaseInfo na instância correspondente.
Criar e aplicar uma política personalizada
Crie uma política personalizada no console do RAM. Para obter etapas detalhadas, consulte Criar uma política personalizada.
Anexe a política a um usuário RAM, grupo de usuários RAM ou função RAM.
Verifique se o principal acessa apenas os recursos pretendidos.
Para utilizar uma política personalizada, compreenda os requisitos de gerenciamento de permissões do seu negócio e as informações de autorização do ApsaraMQ for RocketMQ. Para a lista completa de ações e definições de recursos, consulte Autorização do RAM.
Exemplos de políticas
Os exemplos JSON abaixo contêm comentários // apenas para fins explicativos. Remova todos os comentários antes de usar o código. O JSON não suporta comentários em linha.
Conceder permissões de publicação e assinatura em um tópico e grupo específicos
Esta política concede a um usuário RAM permissão para publicar mensagens e se inscrever para receber mensagens de um tópico e grupo específicos em uma única instância.
Substitua os seguintes espaços reservados pelos seus valores:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
ID da instância RocketMQ |
MQ_INST_abc123 |
|
|
Nome do tópico |
order-topic |
|
|
ID do grupo de consumidores |
GID_order-consumer |
Instâncias com namespaces:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mq:QueryInstanceBaseInfo"
],
"Resource": [
"acs:mq:*:*:{instanceId}"
]
},
{
"Effect": "Allow",
"Action": [
"mq:PUB",
"mq:SUB"
],
"Resource": [
"acs:mq:*:*:{instanceId}%{topic}"
]
},
{
"Effect": "Allow",
"Action": [
"mq:SUB"
],
"Resource": [
"acs:mq:*:*:{instanceId}%{groupId}"
]
}
]
}
A política contém três instruções:
Instrução 1: concede
mq:QueryInstanceBaseInfona instância. Obrigatória antes de conceder permissões no nível de tópico ou grupo.Instrução 2: concede
mq:PUBemq:SUBem um tópico específico, com escopo limitado à instância pelo formato de ARN{instanceId}%{topic}.Instrução 3: concede
mq:SUBem um grupo específico.
Instâncias sem namespaces:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mq:QueryInstanceBaseInfo"
],
"Resource": [
"acs:mq:*:*:{instanceId}"
]
},
{
"Effect": "Allow",
"Action": [
"mq:PUB",
"mq:SUB"
],
"Resource": [
"acs:mq:*:*:{topic}"
]
},
{
"Effect": "Allow",
"Action": [
"mq:SUB"
],
"Resource": [
"acs:mq:*:*:{groupId}"
]
}
]
}
Diferença: os ARNs de tópico e grupo não incluem o prefixo do ID da instância. O campo de recurso usa acs:mq:*:*:{topic} em vez de acs:mq:*:*:{instanceId}%{topic}.
Conceder permissões totais em todos os recursos de uma instância
Esta política concede todas as permissões em cada recurso (tópicos, grupos) dentro de uma única instância. Aplica-se apenas a instâncias com namespaces.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mq:*"
],
"Resource": [
"acs:mq:*:*:{instanceId}*"
]
}
]
}
O caractere curinga * após {instanceId} corresponde a todos os tópicos e grupos nessa instância. Substitua {instanceId} pelo ID da sua instância.