當企業購買阿里云服務后,應用程序通過訪問控制(RAM)可以獲取RAM角色的臨時安全令牌,從而訪問阿里云。

背景信息

企業A購買了ECS實例,并計劃在ECS實例中部署企業的應用程序。這些應用程序需要使用訪問密鑰(AccessKey)訪問其它云服務API。

有兩種做法:

  • 將訪問密鑰直接嵌入在代碼里。
  • 將訪問密鑰保存在應用程序的配置文件中。

這樣會帶來兩個問題:

  • 保密性問題:如果訪問密鑰以明文形式存在于ECS實例中,可能會隨著快照、鏡像及鏡像創建出來的實例泄露。
  • 難運維問題:由于訪問密鑰存在于實例中,如果要更換訪問密鑰(例如:周期性輪轉或切換用戶身份),那么需要對每個實例和鏡像進行更新并重新部署,這會增加對實例和鏡像管理的復雜性。

解決方案

ECS結合RAM提供的訪問控制能力,允許給每一個ECS實例配置一個擁有合適權限的RAM角色身份。應用程序通過獲取該RAM角色的臨時安全令牌來訪問云API。

操作流程

  1. 使用阿里云賬號創建一個RAM角色(MyApplicationRole)。
    說明 創建RAM角色時受信實體選擇阿里云服務,受信服務選擇云服務器,即允許ECS扮演該RAM角色來訪問阿里云資源。

    具體操作,請參見創建可信實體為阿里云服務的RAM角色

  2. 為RAM角色授權。

    具體操作,請參見為RAM角色授權

    說明 如果臨時安全令牌權限不足時,您可以根據需要為RAM角色添加相應的權限。權限更新后立即生效,無需重新啟動ECS實例。
  3. 使用阿里云賬號創建一個RAM用戶。

    具體操作,請參見創建RAM用戶

  4. 為RAM用戶授權。
    • 若管理員和操作員是同一人,需要授權RAM用戶管理員權限:AdministratorAccess
    • 若管理員與操作員職責分離,需要創建以下自定義策略,將其授權給RAM用戶。
      {
         "Statement": [
          {
            "Effect": "Allow",
            "Action": "ram:PassRole",
            "Resource": "acs:ram:*:*:role/MyApplicationRole" //替換MyApplicationRole為自己的RAM角色名稱
          }
        ],
        "Version": "1"
      }                
      說明
      • 只有被授權的RAM用戶才能為ECS實例配置RAM角色,避免RAM角色權限被濫用。
      • 如果RAM用戶沒有管理員權限,僅有管理ECS的權限。在創建ECS實例并配置RAM角色時,ECS會強制檢查當前RAM用戶是否擁有指定RAM角色的ram:PassRole 權限,否則將無法成功創建ECS實例。

    具體操作,請參見為RAM用戶授權

  5. 使用步驟3創建的RAM用戶,為目標ECS實例配置步驟1創建的RAM角色。
    具體操作,請參見步驟三:為實例授予RAM角色
  6. ECS將通過實例元數據將臨時安全令牌傳遞給ECS實例中的應用程序。
    • 若在Linux系統中,通過實例元數據可以獲取臨時安全令牌及過期時間等信息。請參見使用實例RAM角色訪問其他云產品

      請求示例

      curl http://100.100.100.200/latest/meta-data/ram/security-credentials/MyApplicationRole

      返回示例

      {
          "AccessKeyId": "STS.J8XXXXXXXXXX4",
          "AccessKeySecret": "9PjfXXXXXXXXXBf2XAW",
          "Expiration": "2017-06-09T09:17:19Z",
          "SecurityToken": "CAIXXXXXXXXXXXwmBkleCTkyI+",
          "LastUpdated": "2017-06-09T08:17:19Z",
          "Code": "Success"
      }
    • 若應用程序使用了阿里云SDK,無需在SDK中配置任何訪問密鑰相關的信息,阿里云SDK將會自動從ECS實例元數據中獲取臨時安全令牌。
      說明 臨時安全令牌過期時間通常為1小時,有效期內應用程序都能正常訪問阿里云API,過期之前ECS會自動刷新臨時安全令牌。
  7. 應用程序使用臨時安全令牌訪問阿里云API。
說明 除ECS外,阿里云其它計算類服務(例如:函數計算、MaxCompute)也提供了類似的RAM角色訪問能力,以幫助用戶解決云上應用的動態身份管理與授權的問題。