消息服务MNS的权限管理是通过阿里云的访问控制RAM(Resource Access Management)产品实现的。使用RAM可以让您避免与其他用户共享云账号密钥,即AccessKey(包含AccessKey ID和AccessKey Secret),按需为用户分配最小权限。本文介绍消息服务MNS在RAM中的权限策略和示例。

背景信息

在RAM中,权限策略是用权限策略语法和结构描述的一组权限的集合,可以精确地描述被授权的Resource(资源集)、Action(操作集)以及授权条件。更多信息,请参见权限策略语法和结构

消息服务MNS支持的RAM的权限策略有以下类型:

  • 系统策略

    系统策略统一由阿里云创建,您只能使用不能修改,策略的版本更新由阿里云维护。

  • 自定义策略

    自定义策略可由您自主创建、更新和删除,策略的版本更新由您自己维护。您需到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
SendMessageBatchSendMessage mns:SendMessage acs:mns:$region:$accountid:/queues/$queueName/messages
ReceiveMessageBatchReceiveMessage mns:ReceiveMessage acs:mns:$region:$accountid:/queues/$queueName/messages
DeleteMessage mns:DeleteMessage acs:mns:$region:$accountid:/queues/$queueName/messages
PeekMessageBatchPeekMessage mns:PeekMessage acs:mns:$region:$accountid:/queues/$queueName/messages
ChangeMessageVisibility mns:ChangeMessageVisibility acs:mns:$region:$accountid:/queues/$queueName/messsages
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/2442.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:*:*:*"
            }
        ]
    }