閱讀434 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ECS實例RAM角色實踐

ECS實例RAM角色快速入門

概述

以往部署在ECS實例中的應用程序如果需要訪問阿裏雲其他雲產品的API,通常需要借助於AccessKeyId和AccessKeySecret(下文簡稱AK)來實現。AK是用戶訪問阿裏雲API的密鑰,具有相應賬戶的完整權限。但是為了方便應用程序對AK的管理,用戶通常需要將AK保存在應用程序的配置文件中或以其他方式保存在實例中。這在一定程度上增加了AK管理上的複雜性且降低了AK的保密性,尤其是對有多地域一致性部署需求的用戶,AK將隨著鏡像及鏡像創建的實例擴散出去。在需要更換AK時,也需要逐台實例(和鏡像)進行更新和重新部署。此外,使用AK雖然簡單,但AK的權限過大,無法做到精細的權限控製。

現在借助於ECS實例RAM角色,我們可以將RAM角色和ECS實例關聯起來,實例內部的應用程序則通過STS臨時憑證訪問其他雲產品的API。其中臨時憑證由係統自動生成和更新,應用程序可以通過訪問實例元數據的指定URL獲取臨時憑證,而無須特別的管理。同時借助於RAM,用戶可以通過對角色和授權策略的管理,達到不同實例對不同雲產品或相同雲產品具有各自訪問權限的目的。

本文接下來將詳細介紹ECS實例使用RAM角色的正確姿勢,為了方便讀者隨本篇樣例快速入門,全文將基於OpenAPI Explorer操作(OpenAPI Explorer將各產品的API及參數以可視化的方式展現出來,並能自動生成Java,Python等SDK的樣例代碼)。具體分為以下幾個步驟:

  1. 通過RAM創建角色,並配置授權策略
  2. 指定RAM角色創建ECS實例
  3. 在實例內部訪問實例元數據URL獲取STS臨時憑證
  4. 基於臨時憑證,使用Python SDK訪問OSS

注:OpenAPI Explorer通過已登錄用戶信息獲取當前賬號臨時AK,對當前賬號線上資源發起線上資源操作,請小心操作。同時創建實例操作也會產生一定的費用!操作完成後請及時釋放實例。

創建RAM角色&配置策略

  1. 創建RAM角色。找到OpenAPI Explorer RAM產品下CreateRole API。其中RoleName參數可以根據自己的需要填寫,如本文填“RamRoleTest”。AssumeRolePolicyDocument填如下內容,表示該角色為一個服務角色,受信雲服務(此處為ECS)可以扮演該角色:
    {
    "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ecs.aliyuncs.com"
        ]
      }
    }
    ],
    "Version": "1"
    }
    
    1.png
  2. 創建授權策略。找到CreatePolicy API。其中PolicyName本文填“RamRolePolicyTest”。PolicyDocument填以下內容,表示該角色具有OSS隻讀權限。
    {
    "Statement": [
    {
      "Action": [
        "oss:Get*",
        "oss:List*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
    ],
    "Version": "1"
    }
    
    當希望通過子賬號創建指定RAM角色的ECS實例時,還需要在上述“Statement”節點中額外增加ECS相關的權限和PassRole權限,如下所示。其中“...”需要替換成具體的ECS RAM Action,或替換成“ecs:*”表示所有Action。
    {
      "Action": ...,
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": "ram:PassRole",
      "Resource": "*",
      "Effect": "Allow"
    }
    
    2.png
  3. 為角色附加授權。找到AttachPolicyToRole API。其中PolicyType填“Custom”,PolicyName填第2步創建的“RamRolePolicyTest”,RoleName填第1步創建的“RamRoleTest”。 3.png

指定角色創建實例

  1. 創建實例。找到OpenAPI Explorer ECS產品下的CreateInstance API,參數可根據實際情況進行填寫,主要需要填寫的參數有:RegionId、ImageId、ecs.n1.tiny、VSwitchId和RamRoleName。由於ECS實例RAM角色目前隻支持VPC實例,所以VSwitchId是必須的,RamRoleName則填之前創建的RamRoleTest。 5.png
  2. 設置密碼和啟動實例。從ECS控製台“實例標簽頁”重置實例密碼,並啟動實例。

獲取STS臨時憑證

從ECS控製台遠程連接實例,並登陸到實例中。訪問https://100.100.100.200/latest/meta-data/ram/security-credentials/RamRoleTest獲取STS臨時憑證,其中路徑最後為實例名。
6.png

基於臨時憑證訪問OSS

  1. 命令行輸入pip install oss2安裝OSS python SDK
  2. 執行下述命令進行測試,其中oss2.StsAuth中的前三個參數分別對應於上述URL返回的AccessKeyId、AccessKeySecret和SecurityToken。
import oss2
from itertools import islice

auth = oss2.StsAuth(<AccessKeyId>, <AccessKeySecret>, <SecurityToken>)
bucket = oss2.Bucket(auth, "oss-cn-qingdao.aliyuncs.com", "bozhi-qd")

for b in islice(oss2.ObjectIterator(bucket), 10):
    print(b.key)

7.png

相關文檔

  1. 支持RAM的雲服務列表
  2. RAM產品文檔
  3. RAM中可對ECS資源進行授權的Action
  4. ECS實例元數據
  5. OSS STS授權訪問
  6. OSS python SDK管理文件

最後更新:2017-06-06 14:32:10

  上一篇:go  Java並發編程:線程池的使用
  下一篇:go  又不在狀態?來看看程序員保持動力的9種方法