消息服务MNS的权限管理是通过阿里云的访问控制RAM(Resource Access Management)产品实现的。使用RAM可以让您避免与其他用户共享云账号密钥,即AccessKey(包含AccessKey ID和AccessKey Secret),按需为用户分配最小权限。本文介绍消息服务MNS在RAM中的权限策略和示例。
背景信息
在RAM中,权限策略是用权限策略语法和结构描述的一组权限的集合,可以精确地描述被授权的Resource(资源集)、Action(操作集)以及授权条件。更多信息,请参见权限策略语法和结构。
消息服务MNS支持的RAM的权限策略有以下类型:
系统策略
消息服务MNS提供以下系统默认的权限策略。
权限策略名称 | 说明 |
AliyunMNSFullAccess | 消息服务MNS的管理权限,等同于阿里云账号的权限,被授予该权限的RAM用户具有所有消息收发权限和控制台所有功能操作权限。 |
AliyunMNSReadOnlyAccess | 消息服务MNS的只读权限,被授予该权限的RAM用户仅有通过访问控制台或调用API读取资源信息的权限。 |
自定义策略
自定义权限策略可以满足您更细粒度的授权需求。消息服务MNS提供以下自定义权限策略。
API | Action | Resource |
OpenService | mns:OpenService | acs:mns:$region:$accountid:/commonbuy/openservice |
ListQueue | mns:ListQueue | acs:mns:$region:$accountid:/queues |
CreateQueue | mns:CreateQueue | acs:mns:$region:$accountid:/queues/$queueName |
DeleteQueue | mns:DeleteQueue | acs:mns:$region:$accountid:/queues/$queueName |
SetQueueAttributes | mns:SetQueueAttributes | acs:mns:$region:$accountid:/queues/$queueName |
GetQueueAttributes | mns:GetQueueAttributes | acs:mns:$region:$accountid:/queues/$queueName |
SendMessage或BatchSendMessage | mns:SendMessage | acs:mns:$region:$accountid:/queues/$queueName/messages |
ReceiveMessage或BatchReceiveMessage | mns:ReceiveMessage | acs:mns:$region:$accountid:/queues/$queueName/messages |
DeleteMessage | mns:DeleteMessage | acs:mns:$region:$accountid:/queues/$queueName/messages |
PeekMessage或BatchPeekMessage | mns:PeekMessage | acs:mns:$region:$accountid:/queues/$queueName/messages |
ChangeMessageVisibility | mns:ChangeMessageVisibility | acs:mns:$region:$accountid:/queues/$queueName/messages |
ListTopic | mns:ListTopic | acs:mns:$region:$accountid:/topics |
CreateTopic | mns:CreateTopic | acs:mns:$region:$accountid:/topics/$topicName |
DeleteTopic | mns:DeleteTopic | acs:mns:$region:$accountid:/topics/$topicName |
SetTopicAttributes | mns:SetTopicAttributes | acs:mns:$region:$accountid:/topics/$topicName |
GetTopicAttributes | mns:GetTopicAttributes | acs:mns:$region:$accountid:/topics/$topicName |
ListSubscriptionByTopic | mns:ListSubscriptionByTopic | acs:mns:$region:$accountid:/topics/$topicName/subscriptions |
Subscribe | mns:Subscribe | acs:mns:$region:$accountid:/topics/$topicName/subscriptions/$subscriptionName |
Unsubscribe | mns:Unsubscribe | acs:mns:$region:$accountid:/topics/$topicName/subscriptions/$subscriptionName |
SetSubscriptionAttributes | mns:SetSubscriptionAttributes | acs:mns:$region:$accountid:/topics/$topicName/subscriptions/$subscriptionName |
GetSubscriptionAttributes | mns:GetSubscriptionAttributes | acs:mns:$region:$accountid:/topics/$topicName/subscriptions/$subscriptionName |
PublishMessage | mns:PublishMessage | acs:mns:$region:$accountid:/topics/$topicName/messages |
自定义权限策略示例
示例一:在Allow授权中增加IP限制
允许通过42.120.88.0/24,42.120.66.0/24两个IP段访问消息服务MNS。
{ "Version": "1", "Statement": [ { "Action": "mns:*", "Effect": "Allow", "Resource": "acs:mns:*:*:*", "Condition":{ "IpAddress": { "acs:SourceIp": ["42.120.88.0/24", "42.120.66.0/24"] } } } ] }
示例二:在Deny授权中增加IP限制
如果源IP不在42.120.88.0/24中,则禁止对消息服务MNS执行任何操作。
{ "Version":"1", "Statement":[ { "Action":"mns:*", "Effect":"Deny", "Resource":"acs:mns:*:*:*", "Condition":{ "NotIpAddress":{ "acs:SourceIp":[ "42.120.88.0/24" ] } } } ] }
重要因为Policy的鉴权规则是Deny优先(即如果您的访问操作命中任意一条Deny规则,则禁止访问),所以访问者从42.120.88.0/24以外的IP地址访问时,消息服务MNS会通知没有权限。
示例三:授予RAM用户队列、主题的可读权限
授予查看队列、主题、队列属性和主题属性的权限,请按以下示例设置。
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":[ "mns:ListQueue", "mns:ListTopic", "mns:GetQueueAttributes", "mns:GetTopicAttributes" ], "Resource":"acs:mns:*:*:*" } ] }