Resource Access Management (RAM) fournit des politiques système couvrant les scénarios courants de contrôle d'accès. Lorsque ces politiques ne permettent pas une granularité suffisante, créez des politiques personnalisées afin d'appliquer le principe du moindre privilège aux ressources ApsaraMQ for RabbitMQ.
Profils d'autorisations courants
Avant de rédiger une politique depuis zéro, identifiez le modèle d'accès correspondant à votre cas d'utilisation.
| Modèle d'accès | Étendue | Exemple de politique |
|---|---|---|
| Publication uniquement | Un seul vhost | Exemple 2 : Publier des messages |
| Consommation uniquement | Un seul vhost | Exemple 3 : Consommer des messages |
| Publication et consommation | Un seul vhost | Exemple 4 : Publier et consommer des messages |
| Messagerie complète | Un seul vhost (incluant la gestion des identifiants) | Exemple 1 : Accès complet à la messagerie sur un vhost |
| Gestion des identifiants | Une seule instance | Exemple 5 : Gérer les identifiants de compte statique |
| Création d'instance | À l'échelle du compte | Exemple 6 : Créer des instances |
| Création d'instance restreinte | À l'échelle du compte, avec conditions | Exemple 7 : Créer des instances Platinum Edition sans accès Internet |
| Administration complète de l'instance | Une seule instance | Exemple 8 : Accès complet à une seule instance |
Principes de base des politiques personnalisées
Contrairement aux politiques système gérées par Alibaba Cloud, la création et la maintenance des politiques personnalisées relèvent de votre responsabilité.
Attachement : Attachez une politique personnalisée à un utilisateur RAM, un groupe d'utilisateurs ou un rôle RAM pour que les autorisations prennent effet.
Suppression : Détachez une politique de toutes les entités avant de la supprimer. Les politiques non attachées peuvent être supprimées directement.
Gestion des versions : RAM propose un contrôle de version pour les politiques personnalisées. Gérez les versions via la console RAM ou l'API.
Opérations connexes
Format ARN des ressources
Toutes les ressources ApsaraMQ for RabbitMQ utilisent le format de nom de ressource Alibaba Cloud (ARN) suivant :
acs:amqp:$region:$accountid:/instances/$instanceId/...
| Variable | Description | Exemple |
|---|---|---|
$region |
Région où se trouve la ressource. Utilisez * pour toutes les régions. |
cn-hangzhou |
$accountid |
ID du compte Alibaba Cloud. Utilisez * pour n'importe quel compte. |
1234567890 |
$instanceId |
ID de l'instance ApsaraMQ for RabbitMQ | amqp-cn-xxxxx |
$vhostName |
Nom du vhost | my-vhost |
$exchangeName |
Nom de l'exchange | my-exchange |
$queueName |
Nom de la queue | my-queue |
Hiérarchie des ressources
instances/
├── $instanceId/
│ ├── vhosts/
│ │ └── $vhostName/
│ │ ├── exchanges/
│ │ │ └── $exchangeName/
│ │ │ └── messages/*
│ │ └── queues/
│ │ └── $queueName/
│ │ └── messages/*
│ └── staticAccount/*
Pour obtenir la liste des régions prises en charge, consultez la rubrique Endpoints.
Référence des actions
Les actions ApsaraMQ for RabbitMQ se divisent en deux catégories : les actions API client pour les opérations du protocole AMQP, et les actions Console et OpenAPI pour les opérations de gestion via la console et l'API.
Actions API client
| API client | Action | Ressource | Description |
|---|---|---|---|
| exchange.declare (passive=false) | amqp:CreateExchange |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* |
Déclare un exchange. Crée l'exchange s'il n'existe pas. Si l'exchange existe, valide ses propriétés et renvoie une erreur en cas de discordance. |
| exchange.declare (passive=true) | amqp:GetExchange |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName |
Vérifie si un exchange existe. Renvoie une erreur si l'exchange n'existe pas. |
| exchange.bind | amqp:GetExchange (source) |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (source) |
Lie un exchange source à un exchange de destination. |
amqp:CreateExchange (destination) |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (destination) |
||
| exchange.unbind | amqp:GetExchange (source) |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (source) |
Dissocie un exchange source d'un exchange de destination. |
amqp:CreateExchange (destination) |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (destination) |
||
| queue.declare (passive=false) | amqp:CreateQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* |
Déclare une queue. Crée la queue si elle n'existe pas. Si la queue existe, valide ses propriétés et renvoie une erreur en cas de discordance. |
| queue.declare (passive=true) | amqp:GetQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName |
Vérifie si une queue existe. Renvoie une erreur si la queue n'existe pas. |
| queue.declare (avec dead-letter exchange) | amqp:CreateQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* |
Déclare une queue liée à un dead-letter exchange. |
amqp:GetQueue |
acs:amqp:$region:$accountid:/vhosts/$vhostName/queues/$queueName |
||
amqp:CreateExchange (dead-letter) |
acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName (dead-letter) |
||
| queue.bind | amqp:CreateQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* |
Lie une queue à un exchange. |
amqp:GetExchange |
acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName |
||
| queue.unbind | amqp:CreateQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* |
Dissocie une queue d'un exchange. |
amqp:GetExchange |
acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName |
||
| BasicRecover | amqp:BasicRecover |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* |
Redistribue les messages non acquittés à un consommateur. |
| BasicCancel | amqp:BasicCancel |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Annule l'abonnement d'un consommateur. |
| BasicPublish | amqp:BasicPublish |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName/messages/* |
Publie un message dans un exchange. |
| BasicConsume | amqp:BasicConsume |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Démarre un consommateur sur une queue. |
| BasicAck | amqp:BasicAck |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Acquitter un ou plusieurs messages. |
| BasicNack | amqp:BasicNack |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Rejette un ou plusieurs messages. |
| BasicReject | amqp:BasicReject |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Rejette un seul message. |
| BasicGet | amqp:BasicGet |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Accède directement aux messages dans une queue. |
Actions Console et OpenAPI
| Opération API | Action | Ressource | Description |
|---|---|---|---|
| ListInstances | amqp:ListInstance |
acs:amqp:$region:$accountid:/instances/* |
Interroge la liste des instances. |
| CreateInstance | amqp:CreateInstance |
acs:amqp:$region:$accountid:/instances/* |
Crée une instance. Prend en charge les clés de condition. |
| DeleteInstance | amqp:DeleteInstance |
acs:amqp:$region:$accountid:/instances/$instanceId |
Supprime une instance. |
| GetInstance | amqp:GetInstance |
acs:amqp:$region:$accountid:/instances/$instanceId |
Consulte une instance. |
| ListVhost | amqp:ListVhost |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/* |
Interroge la liste des vhosts. |
| CreateVhost | amqp:CreateVhost |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/* |
Crée un vhost. |
| DeleteVhost | amqp:DeleteVhost |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName |
Supprime un vhost. Nécessite également amqp:GetInstance sur l'instance. |
| ListExchange | amqp:ListExchange |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* |
Interroge la liste des exchanges. Nécessite également amqp:GetInstance sur l'instance. |
| CreateExchange | amqp:CreateExchange |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* |
Crée un exchange. |
| DeleteExchange | amqp:DeleteExchange |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName |
Supprime un exchange. |
| ListQueue | amqp:ListQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* |
Interroge la liste des queues. Nécessite également amqp:GetInstance sur l'instance. |
| CreateQueue | amqp:CreateQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* |
Crée une queue. |
| DeleteQueue | amqp:DeleteQueue |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName |
Supprime une queue. |
| QueuePurge | amqp:QueuePurge |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Vide une queue. |
| ListStaticAccounts | amqp:ListStaticAccounts |
acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* |
Affiche le nom d'utilisateur et le mot de passe. Nécessite également amqp:GetInstance sur l'instance. |
| FetchStaticAccount | amqp:FetchStaticAccount |
acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* |
Crée un nom d'utilisateur et un mot de passe. Nécessite également amqp:GetInstance sur l'instance. |
| DeleteStaticAccount | amqp:DeleteStaticAccount |
acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* |
Supprime le nom d'utilisateur et le mot de passe. |
| Query messages by queue | amqp:BasicGet |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Accède aux messages dans une queue. |
| Query messages by message ID | amqp:BasicGet |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Accède aux messages dans une queue. |
| Resend messages | amqp:BasicGet, amqp:BasicPublish |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Renvoie des messages. |
| Send messages | amqp:BasicPublish |
acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* |
Envoie des messages. |
Clés de condition pour CreateInstance
L'action CreateInstance prend en charge les clés de condition suivantes pour restreindre la création d'instance. Pour plus d'informations, consultez la section Condition.
| Clé de condition | Type | Valeurs valides | Description |
|---|---|---|---|
amqp:InstanceType |
String | enterprise (Enterprise Edition), vip (Platinum Edition) |
Restreint les éditions d'instance qu'une identité RAM peut créer. |
amqp:SupportEIP |
String | true, false |
Restreint la prise en charge de l'accès Internet par l'instance. |
Exemples de politiques
Remplacez les variables d'espace réservé dans les exemples suivants par vos valeurs réelles. Pour plus de détails sur chaque variable, consultez la section Format ARN des ressources.
Exemple 1 : Accès complet à la messagerie sur un vhost
Accorde les autorisations nécessaires pour publier, consommer et gérer les exchanges, les queues et les identifiants de compte statique au sein d'un vhost spécifique.
{
"Version": "1",
"Statement": [
{
"Action": [
"amqp:GetInstance",
"amqp:ListVhost",
"amqp:GetVhost"
],
"Resource": [
"acs:amqp:*:*:/instances/$instanceId",
"acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName",
"acs:amqp:*:*:/instances/$instanceId/vhosts/*"
],
"Effect": "Allow"
},
{
"Action": [
"amqp:ListExchange",
"amqp:CreateExchange",
"amqp:DeleteExchange",
"amqp:ListQueue",
"amqp:DeleteQueue",
"amqp:CreateQueue",
"amqp:BasicRecover",
"amqp:BasicCancel",
"amqp:BasicPublish",
"amqp:BasicConsume",
"amqp:BasicAck",
"amqp:BasicNack",
"amqp:BasicReject",
"amqp:QueuePurge",
"amqp:BasicGet",
"amqp:GetExchange",
"amqp:GetQueue"
],
"Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*",
"Effect": "Allow"
},
{
"Action": [
"amqp:ListStaticAccounts",
"amqp:FetchStaticAccount",
"amqp:DeleteStaticAccount"
],
"Resource": "acs:amqp:*:*:/instances/$instanceId/staticAccount/*",
"Effect": "Allow"
}
]
}
Exemple 2 : Publier des messages
Accorde les autorisations minimales permettant à un client producteur de publier des messages dans les exchanges d'un vhost spécifique : déclarer des exchanges et des queues, publier des messages et acquitter la livraison.
{
"Version": "1",
"Statement": [
{
"Action": [
"amqp:GetInstance"
],
"Resource": [
"acs:amqp:*:*:/instances/$instanceId",
"acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName"
],
"Effect": "Allow"
},
{
"Action": [
"amqp:CreateExchange",
"amqp:CreateQueue",
"amqp:BasicRecover",
"amqp:BasicPublish",
"amqp:BasicAck",
"amqp:BasicNack",
"amqp:GetExchange",
"amqp:GetQueue"
],
"Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*",
"Effect": "Allow"
}
]
}
Exemple 3 : Consommer des messages
Accorde les autorisations minimales permettant à un client consommateur de consommer des messages depuis les queues d'un vhost spécifique : déclarer des exchanges et des queues, consommer des messages et gérer les acquittements.
{
"Version": "1",
"Statement": [
{
"Action": [
"amqp:GetInstance",
"amqp:GetVhost"
],
"Resource": [
"acs:amqp:*:*:/instances/$instanceId",
"acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName"
],
"Effect": "Allow"
},
{
"Action": [
"amqp:CreateExchange",
"amqp:CreateQueue",
"amqp:BasicRecover",
"amqp:BasicCancel",
"amqp:BasicConsume",
"amqp:BasicAck",
"amqp:BasicNack",
"amqp:BasicReject",
"amqp:QueuePurge",
"amqp:BasicGet",
"amqp:GetExchange",
"amqp:GetQueue"
],
"Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*",
"Effect": "Allow"
}
]
}
Exemple 4 : Publier et consommer des messages
Accorde les autorisations nécessaires pour publier et consommer des messages au sein d'un vhost spécifique. Combine les actions de l'Exemple 2 et de l'Exemple 3.
{
"Version": "1",
"Statement": [
{
"Action": [
"amqp:GetInstance",
"amqp:GetVhost"
],
"Resource": [
"acs:amqp:*:*:/instances/$instanceId",
"acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName"
],
"Effect": "Allow"
},
{
"Action": [
"amqp:ListExchange",
"amqp:CreateExchange",
"amqp:DeleteExchange",
"amqp:ListQueue",
"amqp:DeleteQueue",
"amqp:CreateQueue",
"amqp:BasicRecover",
"amqp:BasicCancel",
"amqp:BasicPublish",
"amqp:BasicConsume",
"amqp:BasicAck",
"amqp:BasicNack",
"amqp:BasicReject",
"amqp:QueuePurge",
"amqp:BasicGet",
"amqp:GetExchange",
"amqp:GetQueue"
],
"Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*",
"Effect": "Allow"
}
]
}
Exemple 5 : Gérer les identifiants de compte statique
Accorde les autorisations nécessaires pour lister, créer et supprimer les identifiants de compte statique (paires nom d'utilisateur/mot de passe) pour une instance spécifique.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"amqp:ListStaticAccounts",
"amqp:FetchStaticAccount",
"amqp:DeleteStaticAccount"
],
"Resource": "acs:amqp:*:*:/instances/$instanceId/staticAccount/*"
},
{
"Effect": "Allow",
"Action": "amqp:GetInstance",
"Resource": "acs:amqp:*:*:/instances/$instanceId"
}
]
}
Exemple 6 : Créer des instances
Accorde les autorisations nécessaires pour créer des instances ApsaraMQ for RabbitMQ de n'importe quelle édition dans n'importe quelle région.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "amqp:CreateInstance",
"Resource": "acs:amqp:*:$accountid:/instances/*"
}
]
}
Exemple 7 : Créer des instances Platinum Edition sans accès Internet
Utilise des clés de condition pour restreindre la création d'instance aux instances Platinum Edition (vip) qui ne prennent pas en charge l'accès Internet (SupportEIP: false).
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "amqp:CreateInstance",
"Resource": "acs:amqp:*:$accountid:/instances/*",
"Condition": {
"StringEquals": {
"amqp:InstanceType": [
"vip"
],
"amqp:SupportEIP": [
"false"
]
}
}
}
]
}
Exemple 8 : Accès complet à une seule instance
Accorde toutes les autorisations ApsaraMQ for RabbitMQ sur une seule instance, y compris la gestion des vhosts, les opérations de messagerie et la gestion des comptes statiques. L'action amqp:ListInstance est étendue à toutes les instances afin que l'instance cible apparaisse dans la liste des instances de la console.
{
"Version": "1",
"Statement": [
{
"Action": "amqp:ListInstance",
"Resource": "acs:amqp:*:*:/instances/*",
"Effect": "Allow"
},
{
"Action": "amqp:*",
"Resource": [
"acs:amqp:*:*:/instances/$instanceId",
"acs:amqp:*:*:/instances/$instanceId/vhosts/*"
],
"Effect": "Allow"
},
{
"Action": [
"amqp:ListStaticAccounts",
"amqp:FetchStaticAccount",
"amqp:DeleteStaticAccount"
],
"Resource": "acs:amqp:*:*:/instances/$instanceId/staticAccount/*",
"Effect": "Allow"
}
]
}