699
財經資訊
進階使用 STS__授權管理_阿裏雲物聯網套件-阿裏雲
進階使用 STS
上麵章節隻用到了 RAM 的子賬號功能,這些子賬號都是可以長期正常使用的,發生泄露後如果無法及時解除權限,會非常危險。
當用戶的數據很多時,要求能夠安全的授權給眾多iot的子帳戶,並且多個子帳戶的存儲隔離。
類似這種場景需要臨時訪問權限,應該使用 STS 來完成。STS 可以指定複雜的策略來對特定的用戶進行限製,僅提供最小的權限。
創建角色
之前已經解釋過了角色的一些概念,本節將會給出使用角色的實際示例。請先創建一個名為 ram_test_iot 的子賬號,再進行角色創建並授予其權限。這裏創建兩個角色,一個用於用戶讀取等操作,一個用於用戶讀寫的操作。操作步驟如下:
使用主賬號登錄訪問控製 RAM 的管理控製台。(默認已開通訪問控製服務)
單擊頁麵左側的用戶管理,進入用戶管理頁麵。
單擊右上角的新建用戶,進入創建用戶的頁麵,創建一個擁有和主賬號一樣完全訪問表格存儲權限的子賬號。
填寫賬號信息並勾選“為該用戶自動生成 AccessKey”,然後單擊確定。示例中使用的用戶名稱是 ram_test_iot。
創建賬號的最後一步會生成該賬號的 AccessKey,單擊保存 AK 信息。
注意:這是該賬號的 AccessKey 可供下載的唯一機會,請及時保存。
創建完成後自動跳轉至用戶管理頁麵,名為 ram_test_iot 的賬號會出現在該頁麵上。不需要賦予其任何權限,因為在扮演角色的時候會自動獲得被扮演角色的所有權限。
單擊頁麵左側的角色管理,進入角色管理頁麵。
單擊新建角色,進入創建角色頁麵。
選中用戶角色,即直接進入填寫角色類型信息頁麵。
由於角色本身是被阿裏雲賬號使用過的,因此選擇默認的即可。然後單擊下一步。
輸入角色名稱(示例中使用 RamTestIotReadOnly),若有必要可填加備注,然後單擊創建和關閉,完成角色創建。
單擊頁麵左側的策略管理,進入策略管理頁麵。
單擊頁麵右側的新建授權策略按鈕,進入創建授權策略的頁麵。
選中“空白模板”,進入創建自定義授權策略的頁麵。
填寫授權策略名稱(示例中使用 ram-test-iot-readonly),並將如下內容填寫至策略內容欄,這裏表示對 ram-test-iot 擁有隻讀權限。
{
"Version": "1",
"Statement": [
{
"Action": [
"rds:DescribeDBInstances",
"rds:DescribeDatabases",
"rds:DescribeAccounts",
"rds:DescribeDBInstanceNetInfo"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:ListRoles",
"Effect": "Allow",
"Resource": "*"
},
{
"Action":[
"mns:ListTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"dhs:ListProject",
"dhs:ListTopic",
"dhs:GetTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ots:ListInstance",
"ots:ListTable",
"ots:DescribeTable"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action":[
"log:ListShards",
"log:ListLogStores",
"log:ListProject"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"iot:Query*",
"iot:List*",
"iot:Get*",
"iot:BatchGet*"
],
"Resource": "*"
}
]
}
- 單擊頁麵左側的角色管理,進入角色管理頁麵。
單擊 RamTestIotReadOnly 右側操作欄中的授權按鈕,進入“編輯角色授權策略”頁麵。
搜索“ram-test-iot-readonly”,選中後單擊 > 以將該權限添加至“已選擇授權策略名稱”欄中,最後單擊確定,完成給該角色賦予對 ram-test-iot 擁有隻讀的權限。
按照上述同樣的方法,建立一個 RamTestIotWrite 的角色,並賦予該角色寫 ram-test-iot 的自定義授權,授權策略如下。
{
"Version": "1",
"Statement": [
{
"Action": [
"rds:DescribeDBInstances",
"rds:DescribeDatabases",
"rds:DescribeAccounts",
"rds:DescribeDBInstanceNetInfo"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:ListRoles",
"Effect": "Allow",
"Resource": "*"
},
{
"Action":[
"mns:ListTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"dhs:ListProject",
"dhs:ListTopic",
"dhs:GetTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ots:ListInstance",
"ots:ListTable",
"ots:DescribeTable"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action":[
"log:ListShards",
"log:ListLogStores",
"log:ListProject"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
在角色管理頁麵,可以看到已經新建好了 RamTestIOTReadOnly 和 RamTestIOTWrite 兩個角色,分別表示了對於 ram-test-iot 的讀寫權限。
臨時授權訪問
創建角色後,就可以使用臨時授權來訪問物聯網套件接口了。
準備工作
在使用 STS 來授權訪問前,需要先對子賬號進行需扮演角色的授權。若任意子賬號都可以扮演這些角色,會帶來不可預估的風險,因此有扮演對應角色需求的子賬號需要被賦予相應的配置權限。在授權管理策略中新建兩個自定義的授權策略並將其賦予 ram_test_app 這個子賬號,操作步驟如下:
單擊頁麵左側的策略管理,進入策略管理頁麵。
單擊頁麵右側的新建授權策略按鈕,進入創建授權策略的頁麵。
選中“空白模板”,進入創建自定義授權策略的頁麵。
填寫授權策略名稱,並將如下內容填寫至策略內容欄。兩個授權策略的內容分別為:
(注意:下文中 Resource 後麵填寫的內容表示某個角色 ID,角色的 ID 可以在角色管理頁麵,單擊管理按鈕進入角色詳情的頁麵中找到。)
- AliyunIOTReadOnly
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:QueryProduct",
"Resource": "*"
}
]
}
上述的兩個授權策略都建成後,單擊頁麵左側的用戶管理,進入用戶管理頁麵。
單擊 ram_test_app 右側操作欄中的授權按鈕,進入“編輯個人授權策略”頁麵。
搜索“AliyunIOTReadOnly”,選中後單擊 > 以將該權限添加至“已選擇授權策略名稱”欄中,最後單擊確定,完成將這兩個授權賦給 ram_test_app 這個賬號的操作。
使用 STS
上述準備工作完成後,就可以正式使用 STS 來進行授權訪問。這裏需要使用 STS 的 Python 命令行工具,該工具安裝包的下載地址如下:
- 點擊下載:sts.py
具體的調用方法如下,更詳細的參數解釋可以參考STS 幫助文檔。
$python ./sts.py AssumeRole RoleArn=acs:ram::1872177966808743:role/iotstsrole RoleSessionName=iotreadonlyrole Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":"iot:*","Resource":"*"}]}' DurationSeconds=1000 --id=id --secret=secret
參數說明:
RoleArn:指需要扮演的角色 ID。角色的 ID 可以在角色管理頁麵,單擊管理按鈕進入角色詳情的頁麵中找到。
RoleSessionName:指臨時憑證的名稱,一般來說建議使用不同的應用程序用戶來區分。
Policy:指在扮演角色時額外加上的一個權限限製。
(注意:這裏傳入的 Policy 是用來限製扮演角色之後的臨時憑證的權限。最後臨時憑證獲得的權限是角色的權限和這裏傳入的 Policy 的交集。在扮演角色時傳入 Policy 是為了靈活性,比如上傳文件時可以根據不同的用戶添加對於上傳文件路徑的限製,這點會在下麵的例子展示。)
DurationSeconds:指臨時憑證的有效期。單位是秒,最小為 900,最大為 3600。
id 和 secret:指需要扮演角色的子賬號的 AccessKey 的 Access Key ID 和 Access Key Secret。
使用臨時授權調用 JAVA SDK
請參考下麵方式創建 IAcsClient 對象,傳入 STS Token 的 AccessKeyId、AccessKeySecret 和 Token 等參數。
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", AccessKeyId,AccessSecret);
RpcAcsRequest request.putQueryParameter("SecurityToken", Token);
IAcsClient client = new DefaultAcsClient(profile);
AcsResponse response = client.getAcsResponse(request);
總結
本章主要介紹了如何使用 STS ,在典型的移動開發場景中,通過使用 STS,不同的用戶擁有不同的權限,主賬戶擁有絕對的用戶控製管理權限,子賬號 AccessKey 泄露時不會其他賬戶影響,可以通過主賬號管理該賬戶及時的對該用戶進行權限控製,因此大大降低了泄露子賬號信息的危害。在獲取臨時授權的時候,可以根據 用戶的不同,傳入不同的授權策略來限製用戶的訪問權限,從而達到隔離出不同用戶擁有不同訪問接口的目的。
最後更新:2016-11-24 16:11:19
上一篇:
設備數據共享__共享中心_控製台使用手冊_阿裏雲物聯網套件-阿裏雲
下一篇:
自定義權限__授權管理_阿裏雲物聯網套件-阿裏雲
免密碼訪問__用戶指南_雲數據庫 Memcache 版-阿裏雲
Notification操作__主題接口規範_API使用手冊_消息服務-阿裏雲
負載均衡__產品使用手冊_雲解析-阿裏雲
GetUser__用戶管理接口_RAM API文檔_訪問控製-阿裏雲
LogSearch-查詢__Getting-Started_日誌服務-阿裏雲
IP黑名單__訪問控製_用戶指南_CDN-阿裏雲
CapacityUnit__DataType_API 參考_表格存儲-阿裏雲
開放API接入API網關__分步詳解_API 網關-阿裏雲
Sqoop 作業配置__作業_用戶指南_E-MapReduce-阿裏雲
PostObject__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲