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