授权策略和示例

消息服务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/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/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:*:*:*"
            }
        ]
    }