Si les stratégies système prédéfinies pour ApsaraMQ for RocketMQ ne satisfont pas vos exigences de contrôle d'accès, créez des stratégies personnalisées Resource Access Management (RAM) afin d'appliquer le principe du moindre privilège au niveau de l'instance, du topic ou du groupe.
Stratégies système et stratégies personnalisées
Les stratégies RAM se divisent en deux catégories :
| Type | Créateur | Modifiable | Gestion des versions |
|---|---|---|---|
| Stratégies système | Alibaba Cloud | Non | Non |
| Stratégies personnalisées | Vous | Oui | Oui, via la gestion des versions RAM |
Après avoir créé une stratégie personnalisée, attachez-la à un utilisateur RAM, à un groupe d'utilisateurs RAM ou à un rôle RAM pour accorder les autorisations spécifiées. Vous pouvez supprimer directement une stratégie personnalisée non attachée à un principal. Pour supprimer une stratégie personnalisée attachée à un principal, détachez-la au préalable.
Actions et étendue des ressources
Le tableau suivant répertorie les actions disponibles pour les stratégies personnalisées ApsaraMQ for RocketMQ ainsi que les types de ressources auxquels chaque action s'applique.
| Action | Description | Types de ressources applicables |
|---|---|---|
mq:QueryInstanceBaseInfo |
Interroger les détails de l'instance | Instance |
mq:PUB |
Publier des messages dans un topic | Topic |
mq:SUB |
S'abonner aux messages d'un topic ou d'un groupe | Topic, Group |
mq:* |
Toutes les actions | Tout |
Formats ARN des ressources
ApsaraMQ for RocketMQ prend en charge deux modèles d'étendue des ressources selon que votre instance utilise ou non des namespaces. La hiérarchie d'étendue, de la plus large à la plus étroite, est la suivante : Instance > Topic/Group.
Avec namespaces -- Les topics et les groupes sont limités à une instance. L'ID de l'instance fait partie de l'ARN du topic et du groupe.
Sans namespaces -- Les topics et les groupes ont une étendue globale. L'ARN contient uniquement le nom du topic ou du groupe.
| Ressource | ARN (avec namespace) | ARN (sans namespace) |
|---|---|---|
| Instance | acs:mq:*:*:{instanceId} |
acs:mq:*:*:{instanceId} |
| Topic | acs:mq:*:*:{instanceId}%{topic} |
acs:mq:*:*:{topic} |
| Group | acs:mq:*:*:{instanceId}%{groupId} |
acs:mq:*:*:{groupId} |
| Toutes les ressources d'une instance | acs:mq:*:*:{instanceId}* |
N/A |
Avant d'accorder des autorisations sur un topic ou un groupe, accordez mq:QueryInstanceBaseInfo sur l'instance correspondante.
Créer et appliquer une stratégie personnalisée
Créez une stratégie personnalisée dans la console RAM. Pour obtenir des instructions détaillées, consultez la rubrique Create a custom policy.
Attachez la stratégie à un utilisateur RAM, à un groupe d'utilisateurs RAM ou à un rôle RAM.
Vérifiez que le principal peut accéder uniquement aux ressources prévues.
Pour utiliser une stratégie personnalisée, vous devez comprendre les exigences de gestion des autorisations de votre activité ainsi que les informations d'autorisation relatives à ApsaraMQ for RocketMQ. Pour la liste complète des actions et des définitions de ressources, consultez la rubrique Autorisation RAM.
Exemples de stratégies
Les exemples JSON ci-dessous contiennent des commentaires // à titre explicatif uniquement. Supprimez tous les commentaires avant d'utiliser le code. JSON ne prend pas en charge les commentaires en ligne.
Accorder des autorisations de publication et d'abonnement sur un topic et un groupe spécifiques
Cette stratégie accorde à un utilisateur RAM l'autorisation de publier des messages dans un topic spécifique et de s'abonner aux messages de ce topic et d'un groupe spécifique sur une seule instance.
Remplacez les espaces réservés suivants par vos valeurs :
| Espace réservé | Description | Exemple |
|---|---|---|
{instanceId} |
ID de l'instance RocketMQ | MQ_INST_abc123 |
{topic} |
Nom du topic | order-topic |
{groupId} |
ID du groupe de consommateurs | GID_order-consumer |
Instances avec 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}"
]
}
]
}
La stratégie comprend trois instructions :
Instruction 1 -- Accorde
mq:QueryInstanceBaseInfosur l'instance. Cette étape est requise avant d'accorder des autorisations au niveau du topic ou du groupe.Instruction 2 -- Accorde
mq:PUBetmq:SUBsur un topic spécifique, limité à l'instance par le format ARN{instanceId}%{topic}.Instruction 3 -- Accorde
mq:SUBsur un groupe spécifique.
Instances sans 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}"
]
}
]
}
La différence réside dans le fait que les ARN des topics et des groupes n'incluent pas le préfixe d'ID d'instance. Le champ resource utilise acs:mq:*:*:{topic} au lieu de acs:mq:*:*:{instanceId}%{topic}.
Accorder toutes les autorisations sur toutes les ressources d'une instance
Cette stratégie accorde toutes les autorisations sur chaque ressource (topics, groupes) au sein d'une seule instance. Elle s'applique uniquement aux instances utilisant des namespaces.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mq:*"
],
"Resource": [
"acs:mq:*:*:{instanceId}*"
]
}
]
}
Le caractère générique * placé après {instanceId} correspond à tous les topics et groupes de cette instance. Remplacez {instanceId} par l'ID de votre instance.