閱讀699 返回首頁    go 財經資訊


進階使用 STS__授權管理_阿裏雲物聯網套件-阿裏雲

進階使用 STS

上麵章節隻用到了 RAM 的子賬號功能,這些子賬號都是可以長期正常使用的,發生泄露後如果無法及時解除權限,會非常危險。

當用戶的數據很多時,要求能夠安全的授權給眾多iot的子帳戶,並且多個子帳戶的存儲隔離。

類似這種場景需要臨時訪問權限,應該使用 STS 來完成。STS 可以指定複雜的策略來對特定的用戶進行限製,僅提供最小的權限。

創建角色

之前已經解釋過了角色的一些概念,本節將會給出使用角色的實際示例。請先創建一個名為 ram_test_iot 的子賬號,再進行角色創建並授予其權限。這裏創建兩個角色,一個用於用戶讀取等操作,一個用於用戶讀寫的操作。操作步驟如下:

  1. 使用主賬號登錄訪問控製 RAM 的管理控製台。(默認已開通訪問控製服務)

  2. 單擊頁麵左側的用戶管理,進入用戶管理頁麵。

  3. 單擊右上角的新建用戶,進入創建用戶的頁麵,創建一個擁有和主賬號一樣完全訪問表格存儲權限的子賬號。

  4. 填寫賬號信息並勾選“為該用戶自動生成 AccessKey”,然後單擊確定。示例中使用的用戶名稱是 ram_test_iot。

  5. 創建賬號的最後一步會生成該賬號的 AccessKey,單擊保存 AK 信息

    注意:這是該賬號的 AccessKey 可供下載的唯一機會,請及時保存。

  6. 創建完成後自動跳轉至用戶管理頁麵,名為 ram_test_iot 的賬號會出現在該頁麵上。不需要賦予其任何權限,因為在扮演角色的時候會自動獲得被扮演角色的所有權限。

  7. 單擊頁麵左側的角色管理,進入角色管理頁麵。

  8. 單擊新建角色,進入創建角色頁麵。

  9. 選中用戶角色,即直接進入填寫角色類型信息頁麵。

  10. 由於角色本身是被阿裏雲賬號使用過的,因此選擇默認的即可。然後單擊下一步。

  11. 輸入角色名稱(示例中使用 RamTestIotReadOnly),若有必要可填加備注,然後單擊創建關閉,完成角色創建。

  12. 單擊頁麵左側的策略管理,進入策略管理頁麵。

  13. 單擊頁麵右側的新建授權策略按鈕,進入創建授權策略的頁麵。

  14. 選中“空白模板”,進入創建自定義授權策略的頁麵。

  15. 填寫授權策略名稱(示例中使用 ram-test-iot-readonly),並將如下內容填寫至策略內容欄,這裏表示對 ram-test-iot 擁有隻讀權限。

    1. {
    2. "Version": "1",
    3. "Statement": [
    4. {
    5. "Action": [
    6. "rds:DescribeDBInstances",
    7. "rds:DescribeDatabases",
    8. "rds:DescribeAccounts",
    9. "rds:DescribeDBInstanceNetInfo"
    10. ],
    11. "Resource": "*",
    12. "Effect": "Allow"
    13. },
    14. {
    15. "Action": "ram:ListRoles",
    16. "Effect": "Allow",
    17. "Resource": "*"
    18. },
    19. {
    20. "Action":[
    21. "mns:ListTopic"
    22. ],
    23. "Resource": "*",
    24. "Effect": "Allow"
    25. },
    26. {
    27. "Action": [
    28. "dhs:ListProject",
    29. "dhs:ListTopic",
    30. "dhs:GetTopic"
    31. ],
    32. "Resource": "*",
    33. "Effect": "Allow"
    34. },
    35. {
    36. "Action": [
    37. "ots:ListInstance",
    38. "ots:ListTable",
    39. "ots:DescribeTable"
    40. ],
    41. "Resource": "*",
    42. "Effect": "Allow"
    43. },
    44. {
    45. "Action":[
    46. "log:ListShards",
    47. "log:ListLogStores",
    48. "log:ListProject"
    49. ],
    50. "Resource": "*",
    51. "Effect": "Allow"
    52. },
    53. {
    54. "Effect": "Allow",
    55. "Action": [
    56. "iot:Query*",
    57. "iot:List*",
    58. "iot:Get*",
    59. "iot:BatchGet*"
    60. ],
    61. "Resource": "*"
    62. }
    63. ]
    64. }
  16. 單擊頁麵左側的角色管理,進入角色管理頁麵。
  17. 單擊 RamTestIotReadOnly 右側操作欄中的授權按鈕,進入“編輯角色授權策略”頁麵。

  18. 搜索“ram-test-iot-readonly”,選中後單擊 > 以將該權限添加至“已選擇授權策略名稱”欄中,最後單擊確定,完成給該角色賦予對 ram-test-iot 擁有隻讀的權限。

按照上述同樣的方法,建立一個 RamTestIotWrite 的角色,並賦予該角色寫 ram-test-iot 的自定義授權,授權策略如下。

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Action": [
  6. "rds:DescribeDBInstances",
  7. "rds:DescribeDatabases",
  8. "rds:DescribeAccounts",
  9. "rds:DescribeDBInstanceNetInfo"
  10. ],
  11. "Resource": "*",
  12. "Effect": "Allow"
  13. },
  14. {
  15. "Action": "ram:ListRoles",
  16. "Effect": "Allow",
  17. "Resource": "*"
  18. },
  19. {
  20. "Action":[
  21. "mns:ListTopic"
  22. ],
  23. "Resource": "*",
  24. "Effect": "Allow"
  25. },
  26. {
  27. "Action": [
  28. "dhs:ListProject",
  29. "dhs:ListTopic",
  30. "dhs:GetTopic"
  31. ],
  32. "Resource": "*",
  33. "Effect": "Allow"
  34. },
  35. {
  36. "Action": [
  37. "ots:ListInstance",
  38. "ots:ListTable",
  39. "ots:DescribeTable"
  40. ],
  41. "Resource": "*",
  42. "Effect": "Allow"
  43. },
  44. {
  45. "Action":[
  46. "log:ListShards",
  47. "log:ListLogStores",
  48. "log:ListProject"
  49. ],
  50. "Resource": "*",
  51. "Effect": "Allow"
  52. },
  53. {
  54. "Effect": "Allow",
  55. "Action": "iot:*",
  56. "Resource": "*"
  57. }
  58. ]
  59. }

在角色管理頁麵,可以看到已經新建好了 RamTestIOTReadOnly 和 RamTestIOTWrite 兩個角色,分別表示了對於 ram-test-iot 的讀寫權限。

臨時授權訪問

創建角色後,就可以使用臨時授權來訪問物聯網套件接口了。

準備工作

在使用 STS 來授權訪問前,需要先對子賬號進行需扮演角色的授權。若任意子賬號都可以扮演這些角色,會帶來不可預估的風險,因此有扮演對應角色需求的子賬號需要被賦予相應的配置權限。在授權管理策略中新建兩個自定義的授權策略並將其賦予 ram_test_app 這個子賬號,操作步驟如下:

  1. 單擊頁麵左側的策略管理,進入策略管理頁麵。

  2. 單擊頁麵右側的新建授權策略按鈕,進入創建授權策略的頁麵。

  3. 選中“空白模板”,進入創建自定義授權策略的頁麵。

  4. 填寫授權策略名稱,並將如下內容填寫至策略內容欄。兩個授權策略的內容分別為:

    (注意:下文中 Resource 後麵填寫的內容表示某個角色 ID,角色的 ID 可以在角色管理頁麵,單擊管理按鈕進入角色詳情的頁麵中找到。)

  • AliyunIOTReadOnly
  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": "iot:QueryProduct",
  7. "Resource": "*"
  8. }
  9. ]
  10. }
  1. 上述的兩個授權策略都建成後,單擊頁麵左側的用戶管理,進入用戶管理頁麵。

  2. 單擊 ram_test_app 右側操作欄中的授權按鈕,進入“編輯個人授權策略”頁麵。

  3. 搜索“AliyunIOTReadOnly”,選中後單擊 > 以將該權限添加至“已選擇授權策略名稱”欄中,最後單擊確定,完成將這兩個授權賦給 ram_test_app 這個賬號的操作。

使用 STS

上述準備工作完成後,就可以正式使用 STS 來進行授權訪問。這裏需要使用 STS 的 Python 命令行工具,該工具安裝包的下載地址如下:

具體的調用方法如下,更詳細的參數解釋可以參考STS 幫助文檔

  1. $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 等參數。

  1. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", AccessKeyId,AccessSecret);
  2. RpcAcsRequest request.putQueryParameter("SecurityToken", Token);
  3. IAcsClient client = new DefaultAcsClient(profile);
  4. AcsResponse response = client.getAcsResponse(request);

總結

本章主要介紹了如何使用 STS ,在典型的移動開發場景中,通過使用 STS,不同的用戶擁有不同的權限,主賬戶擁有絕對的用戶控製管理權限,子賬號 AccessKey 泄露時不會其他賬戶影響,可以通過主賬號管理該賬戶及時的對該用戶進行權限控製,因此大大降低了泄露子賬號信息的危害。在獲取臨時授權的時候,可以根據 用戶的不同,傳入不同的授權策略來限製用戶的訪問權限,從而達到隔離出不同用戶擁有不同訪問接口的目的。

最後更新:2016-11-24 16:11:19

  上一篇:go 設備數據共享__共享中心_控製台使用手冊_阿裏雲物聯網套件-阿裏雲
  下一篇:go 自定義權限__授權管理_阿裏雲物聯網套件-阿裏雲