您可以建立自訂權限原則,實現精微調權限管理。
背景資訊
許可權指在特定條件下 ,允許(Allow)或拒絕(Deny)對指定資源執行的相關操作。許可權的載體是授權策略。自訂許可權,即在自訂授權策略時定義某些許可權。
建立自訂權限原則方式,請參見建立方式。本文介紹通過指令碼編輯模式建立自訂權限原則的操作步驟。
操作步驟
使用Resource Access Management員登入RAM控制台。
在左側導覽列,選擇 。
在權限原則頁面,單擊建立權限原則。
在建立權限原則頁面,單擊指令碼編輯頁簽。
輸入權限原則內容,然後單擊繼續編輯基本資料。
關於權限原則文法結構的詳情,請參見權限原則文法和結構。
權限原則中包含參數如下:
Action:表示要授權的操作。IoT操作都以
iot:
開頭。定義方式和樣本,請參見本文檔中Action定義。Effect : 表示授與類型,取值:Allow(允許)、Deny(拒絕)。
Resource :表示要授權的資源。
如果為RAM使用者授予訪問您的所有物聯網平台資源的許可權,取值為
*
。Condition :表示鑒權條件,請參見本文檔中Condition定義。
關於權限原則元素的詳情,請參見權限原則基本元素。
輸入權限原則名稱和備忘。
檢查並最佳化權限原則內容。
基礎權限原則最佳化
系統會對您添加的權限原則語句自動進行基礎最佳化。基礎權限原則最佳化會完成以下任務:
刪除不必要的條件。
刪除不必要的數組。
可選:進階權限原則最佳化
您可以將滑鼠懸浮在可選:進階策略最佳化上,單擊執行,對權限原則內容進行進階最佳化。進階權限原則最佳化功能會完成以下任務:
拆分不相容操作的資源或條件。
收縮資源到更小範圍。
去重或合并語句。
單擊確定。
Action 定義
Action是API的名稱。在建立IoT授權策略時,每個Action首碼均為iot:
,多個Action以英文逗號(,)分隔,支援使用星號(*)萬用字元。IoT API名稱定義,請參見IoT授權映射表。
下面介紹一些典型的Action定義樣本。
定義單個API。
"Action": "iot:CreateProduct"
定義多個API。
"Action": [ "iot:UpdateProduct", "iot:QueryProduct" ]
定義所有隻讀API,包含規則引擎資料流轉目標產品的許可權。
{ "Version": "1", "Statement": [ { "Action": [ "iot:Query*", "iot:List*", "iot:Get*", "iot:BatchGet*", "iot:Check*" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "rds:DescribeDBInstances", "rds:DescribeDatabases", "rds:DescribeAccounts", "rds:DescribeDBInstanceNetInfo" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:ListRoles", "Resource": "*", "Effect": "Allow" }, { "Action": [ "mns:ListTopic", "mns:GetTopicRef" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ots:ListInstance", "ots:GetInstance", "ots:ListTable", "ots:DescribeTable" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "fc:ListServices", "fc:GetService", "fc:GetFunction", "fc:ListFunctions" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "log:ListShards", "log:ListLogStores", "log:ListProject" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "cms:QueryMetricList" ], "Resource": "*", "Effect": "Allow" } ] }
定義所有讀寫API,包含規則引擎資料流轉目標產品的許可權。
{ "Version": "1", "Statement": [ { "Action": "iot:*", "Resource": "*", "Effect": "Allow" }, { "Action": [ "rds:DescribeDBInstances", "rds:DescribeDatabases", "rds:DescribeAccounts", "rds:DescribeDBInstanceNetInfo", "rds:ModifySecurityIps" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:ListRoles", "Resource": "*", "Effect": "Allow" }, { "Action": [ "mns:ListTopic", "mns:GetTopicRef" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ots:ListInstance", "ots:ListTable", "ots:DescribeTable", "ots:GetInstance" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "fc:ListServices", "fc:GetService", "fc:GetFunction", "fc:ListFunctions" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "log:ListShards", "log:ListLogStores", "log:ListProject" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:PassRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "acs:Service": "iot.aliyuncs.com" } } }, { "Action": [ "cms:QueryMetricList" ], "Resource": "*", "Effect": "Allow" } ] }
Condition定義
目前RAM使用者授權策略支援訪問IP限制、是否通過HTTPS訪問、是否通過MFA(多因素認證)訪問、訪問時間限制等多種鑒權條件。物聯網平台的所有API均支援上述條件。
訪問IP限制。
存取控制可以限制訪問IoT的源IP地址,並且支援根據網段進行過濾。以下是典型的使用情境樣本。
限制單個IP地址和IP網段。例如,只允許IP地址為192.0.2.1或198.51.100.0/24網段的請求訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "192.0.2.1", "198.51.100.0/24" ] } } } ], "Version": "1" }
限制多個IP地址。例如,只允許IP地址為192.0.2.1和198.51.100.1的請求訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "192.0.2.1", "198.51.100.1" ] } } } ], "Version": "1" }
HTTPS訪問限制。
存取控制可以限制是否通過HTTPS訪問。
樣本:限制必須通過HTTPS請求訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "Bool": { "acs:SecureTransport": "true" } } } ], "Version": "1" }
MFA訪問限制。
存取控制可以限制是否通過MFA(多因素認證)訪問。MFA訪問適用於控制台登入,使用API訪問無需MFA碼。
樣本:限制必須通過MFA請求訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "Bool": { "acs:MFAPresent ": "true" } } } ], "Version": "1" }
訪問時間限制。
存取控制可以限制請求的訪問時間,即只允許或拒絕在某個時間點範圍之前的請求。
樣本:使用者可以在北京時間2019年01月01日淩晨之前訪問,之後則不能訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "DateLessThan": { "acs:CurrentTime": "2019-01-01T00:00:00+08:00" } } } ], "Version": "1" }
典型使用情境
結合以上對Action、Resource和Condition的定義,下面介紹一些典型使用情境的授權策略定義和授權方法。
允許訪問的授權策略樣本。
情境:定義訪問IP地址為192.0.2.1/24網段的使用者訪問IoT的許可權,且要求只能在2019-01-01 00:00:00之前訪問和通過HTTPS訪問。
{ "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "192.0.2.1/24" ] }, "DateLessThan": { "acs:CurrentTime": "2019-01-01T00:00:00+08:00" }, "Bool": { "acs:SecureTransport": "true" } } } ], "Version": "1" }
拒絕訪問的授權策略樣本。
情境:拒絕訪問IP地址為198.51.100.1的使用者對IoT執行讀操作。
{ "Statement": [ { "Effect": "Deny", "Action": [ "iot:Query*", "iot:List*", "iot:Get*", "iot:BatchGet*" ], "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "198.51.100.1" ] } } } ], "Version": "1" }
授權策略建立成功後,將此許可權授予RAM使用者,獲得授權的RAM使用者就可以進行許可權中定義的操作。建立RAM使用者和授權操作,請參見RAM使用者訪問。