Les stratégies Resource Access Management (RAM) déterminent qui peut accéder à vos ressources ApsaraMQ for RocketMQ et quelles actions sont autorisées. Si les stratégies système intégrées sont trop permissives pour vos besoins, créez des stratégies personnalisées afin d'appliquer le principe du moindre privilège.
Quand utiliser des stratégies personnalisées
Les stratégies système accordent des ensembles prédéfinis d'autorisations. Utilisez une stratégie personnalisée lorsque vous devez :
Restreindre l'accès à une instance, un topic ou un groupe de consommateurs spécifique
Autoriser uniquement certaines actions, telles que la création d'instances ou la suppression de topics
Combiner plusieurs étendues d'autorisation dans une seule stratégie
Fonctionnement des stratégies personnalisées
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.
Gardez ces règles à l'esprit :
Détachez avant de supprimer. Vous ne pouvez supprimer qu'une stratégie non attachée à un principal. Si la stratégie est attachée à un principal, détachez-la au préalable.
Utilisez le contrôle de version. Les stratégies personnalisées prennent en charge le versioning. Gérez les versions de stratégie personnalisée via le mécanisme de gestion des versions fourni par RAM.
Format ARN de ressource
Chaque champ Resource d'une stratégie utilise un nom de ressource Alibaba Cloud (ARN) pour identifier la cible. Le format ARN pour ApsaraMQ for RocketMQ est le suivant :
acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}/topic/{TopicName}
| Segment | Description |
|---|---|
{regionId} |
Région où réside l'instance. Consultez la rubrique Endpoints. |
{accountId} |
Votre ID de compte Alibaba Cloud. |
{InstanceId} |
ID de l'instance ApsaraMQ for RocketMQ. |
{TopicName} |
Nom du topic. |
{ConsumerGroupId} |
ID du groupe de consommateurs. |
Utilisez des caractères génériques pour élargir l'étendue :
| Modèle | Étendue |
|---|---|
instance/* |
Toutes les instances du compte dans la région spécifiée |
instance/{InstanceId}* |
Une instance spécifique et toutes ses ressources enfants (topics, groupes de consommateurs) |
*:{#accountId}:*/* |
Toutes les ressources du compte dans toutes les régions |
Exemples de stratégies
Remplacez les valeurs d'espace réservé dans les exemples suivants par vos identifiants de ressource réels avant d'appliquer la stratégie.
Accorder un accès complet à une instance spécifique
Cette stratégie accorde toutes les autorisations ApsaraMQ for RocketMQ sur une seule instance et ses ressources enfants. Elle comprend trois instructions car différentes étendues de ressources sont requises pour lister les instances, agir sur une instance spécifique et interroger les diagnostics.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:ListInstances"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:*"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:ListAnalyticsQuery"
],
"Resource": [
"acs:rocketmq:*:{#accountId}:*/*"
]
}
]
}
Les trois instructions servent des objectifs différents :
Lister les instances -- L'action
rocketmq:ListInstancessur toutes les instances (instance/*) permet à l'utilisateur de parcourir et de localiser l'instance cible dans la console.Accès complet à l'instance -- L'action
rocketmq:*sur l'instance spécifique (instance/{InstanceId}*). Le caractère générique final couvre toutes les ressources enfants.Accès aux diagnostics -- L'action
rocketmq:ListAnalyticsQueryactive les requêtes de diagnostic. La région avec caractère générique (*) permet les requêtes inter-régions.
Accorder l'autorisation de créer des instances
Cette stratégie permet à un utilisateur RAM de créer des instances ApsaraMQ for RocketMQ dans une région spécifique. La ressource utilise instance/* car l'ID de l'instance n'est pas encore connu au moment de la création.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:CreateInstance"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/*"
]
}
]
}
Accorder l'autorisation de supprimer un topic spécifique
Cette stratégie restreint l'action DeleteTopic à un seul topic sur une instance spécifique. Utilisez ce modèle pour déléguer le nettoyage des topics sans accorder d'autorisations plus larges.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:DeleteTopic"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}/topic/{TopicName}"
]
}
]
}
Accorder un accès complet aux diagnostics de l'instance
Cette stratégie accorde toutes les autorisations liées aux diagnostics : soumission, liste et récupération des requêtes analytiques. La région et le modèle de ressource avec caractères génériques permettent l'accès aux diagnostics pour toutes les instances et régions du compte.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:GetAnalyticsQuery",
"rocketmq:SubmitAnalyticsQuery",
"rocketmq:ListAnalyticsQuery"
],
"Resource": [
"acs:rocketmq:*:{#accountId}:*/*"
]
}
]
}
Accorder à un utilisateur RAM les autorisations pour afficher la liste des instances et exploiter une instance spécifiée
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:ListInstances",
"rocketmq:GetUserTags"
],
"Resource": [
"acs:rocketmq:*:*:instance/*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:*"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*"
]
}
]
}
Cet exemple illustre la différence de configuration du champ Resource entre les actions de type liste et les actions spécifiques à une instance :
Actions de type liste (par exemple,
rocketmq:ListInstancesetrocketmq:GetUserTags) : Le champ Resource doit utiliser le format avec caractère génériqueacs:rocketmq:*:*:instance/*. Vous ne pouvez pas restreindre le champ Resource à un ARN d'instance spécifique pour les actions de type liste. Dans le cas contraire, l'action échoue.Actions de lecture/écriture sur l'instance (par exemple,
rocketmq:*) : Vous pouvez restreindre le champ Resource à un ARN d'instance spécifique, tel queacs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*.
Si vous accordez à un utilisateur RAM des autorisations uniquement pour une instance spécifique sans inclure les autorisations d'actions de type liste, l'utilisateur RAM reçoit une erreur NoPermission ou ne peut pas afficher la liste des instances dans la console ou lors de l'appel d'API.
Étapes suivantes
FAQ
Q : Pourquoi reçoi-je une erreur « valid resource owner failed » ou « AccessDenied (OwnerId forbidden) » lors de l'accès à ApsaraMQ for RocketMQ via HTTP ?
Cause : Cette erreur se produit généralement pour l'une des raisons suivantes :
Erreur de construction de signature : La signature de la requête HTTP n'est pas conforme à la spécification HMAC-SHA256 V4. Les problèmes courants incluent une Canonical String incorrectement construite ou un en-tête
Authorizationmal formé.Incompatibilité de ressource dans la stratégie RAM : Le champ
Resourcede votre stratégie RAM ne correspond pas exactement au topic ou à l'instance cible. Les noms de topics dans ApsaraMQ for RocketMQ sont sensibles à la casse. Le formatResourcecorrect pour la publication de messages via le protocole HTTP estacs:mq:*:*:instance/{InstanceId}/topic/{TopicName}.Autorisations insuffisantes : La paire AccessKey ou les informations d'identification STS utilisées pour la requête ne disposent pas des autorisations requises, telles que
mq:PUBpour la publication de messages.
Résolution :
Vérifiez que la signature de votre requête HTTP suit strictement la spécification HMAC-SHA256 V4, y compris le format correct de la Canonical String, des en-têtes signés et de l'en-tête
Authorization.Vérifiez que le champ
Resourcede votre stratégie RAM correspond exactement aux noms réels du topic et de l'instance. Faites particulièrement attention à la sensibilité à la casse.Confirmez que la paire AccessKey ou les informations d'identification STS disposent des autorisations nécessaires pour l'opération que vous effectuez (par exemple,
mq:PUBpour la publication de messages).
Recommandation : Pour éviter la complexité de l'authentification HTTP et les erreurs de signature potentielles, utilisez le SDK RocketMQ officiel, qui gère automatiquement la signature des requêtes.
Q : Puis-je utiliser un RequestId pour interroger la raison spécifique de l'échec de la vérification des autorisations ApsaraMQ for RocketMQ ?
Non. Actuellement, Alibaba Cloud ne prend pas en charge l'interrogation des détails granulaires de la décision d'authentification IAM (Identity and Access Management) à l'aide d'un RequestId. Lorsqu'une vérification d'autorisation échoue, le backend renvoie uniquement une erreur générique AccessDenied sans exposer les détails spécifiques de l'évaluation de la stratégie, tels que la stratégie ayant refusé la requête ou la condition non satisfaite.
Pour résoudre les échecs de vérification des autorisations, utilisez les approches en libre-service suivantes :
Vérifiez vos stratégies d'autorisation : Examinez les stratégies attachées à l'utilisateur ou au rôle RAM et vérifiez que toutes les actions requises sont explicitement autorisées.
Vérifiez la correspondance des ARN de ressource : Confirmez que le champ
Resourcede vos stratégies correspond aux ARN de ressource réels, y compris l'ID de région correct, l'ID de compte, l'ID d'instance et le nom du topic ou du groupe de consommateurs.Vérifiez votre logique de signature : Si vous utilisez le protocole HTTP pour accéder à ApsaraMQ for RocketMQ, vérifiez que votre logique de signature de requête est correcte.
Examinez les limites d'autorisation et les stratégies de confiance : Si l'utilisateur ou le rôle RAM est soumis à une limite d'autorisation ou à une stratégie de confiance, vérifiez que ces configurations ne restreignent pas les actions requises.
Q : Comment accorder à un utilisateur RAM les autorisations Cloud Monitor requises pour configurer les alertes ApsaraMQ for RocketMQ ?
Les stratégies d'autorisation personnalisées ApsaraMQ for RocketMQ contrôlent uniquement l'accès aux ressources ApsaraMQ for RocketMQ et n'incluent pas les autorisations Cloud Monitor. Pour permettre à un utilisateur RAM de configurer des alertes ApsaraMQ for RocketMQ dans Cloud Monitor, vous devez accorder séparément les autorisations Cloud Monitor à l'utilisateur RAM.
Pour accorder les autorisations en lecture seule requises pour Cloud Monitor :
Connectez-vous à la console RAM en utilisant un compte Alibaba Cloud ou un compte administrateur RAM.
Dans le volet de navigation de gauche, sélectionnez Identities > Users.
Sur la page Users, trouvez l'utilisateur RAM cible et cliquez sur Add Permissions dans la colonne Actions.
-
Dans le panneau Add Permissions, configurez les paramètres suivants :
Définissez Authorization Scope selon vos besoins.
Définissez Policy Type sur System Policy.
Dans la zone de recherche, saisissez
AliyunCloudMonitorReadOnlyAccesset sélectionnez la stratégie dans les résultats de recherche.Cliquez sur OK pour enregistrer l'octroi d'autorisation.
Une fois l'autorisation accordée, l'utilisateur RAM peut afficher les métriques Cloud Monitor et configurer des règles d'alerte pour les instances ApsaraMQ for RocketMQ.
Q : Dois-je utiliser des stratégies personnalisées RAM ou ACL pour contrôler les autorisations d'envoi de messages dans un environnement de développement ApsaraMQ for RocketMQ 5.0 ?
Pour contrôler les autorisations d'envoi et de réception de messages dans un environnement de développement ou de test, utilisez ACL (Access Control List) plutôt que des stratégies personnalisées RAM.
ACL : Conçue pour le contrôle des autorisations d'envoi et de réception de messages au niveau de l'application. ACL vous permet d'accorder à des utilisateurs ou applications spécifiques les autorisations de publier vers ou de s'abonner à des topics spécifiques au sein d'une instance. Cela rend ACL bien adaptée aux scénarios de développement et de test où vous devez simuler des flux de messages ou contrôler quelles applications peuvent interagir avec des topics spécifiques.
Stratégies personnalisées RAM : Conçues pour la gestion des ressources au niveau du compte Alibaba Cloud. Les stratégies RAM contrôlent les opérations sur les ressources cloud, telles que la création, la modification ou la suppression d'instances, de topics et de groupes de consommateurs ApsaraMQ for RocketMQ. Les stratégies RAM régissent qui peut gérer les ressources ApsaraMQ for RocketMQ, et non qui peut envoyer ou recevoir des messages via ces ressources.
En résumé :
|
Scénario |
Méthode recommandée |
|
Contrôler quelles applications peuvent envoyer ou recevoir des messages au sein d'une instance |
ACL |
|
Contrôler qui peut créer, modifier ou supprimer des ressources ApsaraMQ for RocketMQ (instances, topics, groupes de consommateurs) |
Stratégies personnalisées RAM |