全部產品
Search
文件中心

Elastic Compute Service:使用RAM Policy約束雲上操作

更新時間:Nov 01, 2025

利用阿里雲存取控制(RAM)的策略(Policy)的條件(Condition)和拒絕(Deny)機制,將安全規範和合規要求轉化為可被雲平台自動強制執行的安全基準。通過這種方式,可以從源頭上約束不安全的雲資源建立和配置行為,例如禁止為ECS執行個體分配公網IP、強制使用金鑰組登入、限制安全性群組開放高危連接埠等,從而構建一個預設安全的雲環境。

安全風險

標準的RAM權限原則通常採用允許(Allow)模式,即授予“可以做什麼”的許可權,例如,允許建立ECS執行個體 ecs:RunInstances

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",  #允許
      "Resource": "acs:ecs:*:*:instance/*", #資源範圍
      "Action": [   #OpenAPI操作
        "ecs:RunInstances"
        ]
    }
}

這種模式雖然直觀,但卻隱藏著風險:它授予了許可權範圍內的“完全自由”。可能會導致建立出不符合安全規範的資源,例如:

  • 暴露攻擊面:作為一台本應僅對內服務的資料庫伺服器,錯誤地綁定了Elastic IP Address(EIP)。

  • 使用弱憑證:建立ECS執行個體時,仍然選擇使用易被暴力破解的密碼登入方式。

  • 違反合規性:建立資源時未使用經過安全強化的公司標準鏡像。

最佳實務

核心原理

在允許的基礎上,增加一層帶有條件的拒絕(Deny)策略:

  1. 優先處理拒絕:RAM在評估一個操作請求時,會檢查所有相關的策略。任何一條Deny策略的規則被匹配,該操作就會被立即拒絕,無論是否存在其他Allow策略。

  2. 精確條件約束:Deny策略可以綁定一個Condition(條件)塊。只有當使用者的操作行為同時滿足Action(操作)、Resource(資源)和Condition(條件)時,Deny才會生效。

例如,建立執行個體(ecs:RunInstances)時,對於任何執行個體資源(acs:ecs:*:*:instance/*),只要綁定了公網IP("ecs:AssociatePublicIpAddress": "true"),則拒絕操作("Effect": "Deny")。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",  #拒絕
      "Resource": "acs:ecs:*:*:instance/*", #資源範圍
      "Action": [   #OpenAPI操作
        "ecs:RunInstances"
      ],
      "Condition": {  #條件規則
        "Bool": {
            "ecs:AssociatePublicIpAddress": "true"   #條件關鍵字斷言
        }
      }
    }
}

這種“Allow + Deny with Condition”的組合,先授予一個相對寬泛的允許(Allow)操作許可權,再像設定安全護欄一樣,精確地拒絕(Deny)其中不符合安全基準的特定行為。例如,“允許建立ECS執行個體,但如果建立時試圖綁定公網IP,則拒絕此次操作”。這使得安全性原則不僅是規範,更是可被平台強制執行的紀律。

操作步驟

被約束的主體必須同時擁有一個允許其操作的Allow策略(如AliyunECSFullAccess)和我們建立的Deny策略。當使用者操作時,Allow策略使其有權嘗試,而Deny策略則作為安全審查員,拒絕掉任何違規的嘗試。以下步驟將指導如何建立並實施一套基於RAM Policy的安全基準。

  1. 確定需要約束的關鍵操作和條件

    首先,識別出希望強制執行的安全規則,並找到對應的RAM Action和Condition Key。Condition Key是雲端服務API暴露給RAM用於判斷的參數。可在具體服務的API文檔中找到它們。例如,建立ECS執行個體(ecs:RunInstances)這個Action,可以在RunInstances文檔的“授權資訊”部分找到所有支援的Condition Key。

  2. 編寫帶條件的Deny權限原則

    1. 登入RAM控制台,在左側導覽列,選擇許可權管理 > 權限原則

    2. 在權限原則頁面,單擊建立權限原則

    3. 建立權限原則頁面,單擊指令碼編輯頁簽。輸入以下權限原則內容,然後單擊確定

      以下是一些經過驗證的常用權限原則樣本:

      樣本1:禁止建立ECS執行個體時綁定公網IP

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Deny",
            "Action": "ecs:RunInstances",
            "Resource": "acs:ecs:*:*:instance/*",
            "Condition": {
              "Bool": {
                "ecs:AssociatePublicIpAddress": "true"
              }
            }
          }
        ]
      }

      樣本2:強制建立ECS執行個體時使用SSH金鑰組登入

      "Null": {"ecs:KeyPairName": "true"}的含義是,如果ecs:KeyPairName這個參數為空白(即使用者沒有選擇金鑰組),則條件成立,拒絕(Deny)生效。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "ecs:RunInstances",
                  "Effect": "Deny",
                  "Resource": "acs:ecs:*:*:instance/*",
                  "Condition": {
                      "Null": {
                          "ecs:KeyPairName": "true"
                      }
                  }
              }
          ]
      }

      樣本3:禁止安全性群組規則向公用互連網(0.0.0.0/0)開放高危連接埠

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "ecs:AuthorizeSecurityGroup",
                  "Effect": "Deny",
                  "Resource": "acs:ecs:*:*:securitygroup/*",
                  "Condition": {
                      "StringEquals": {
                          "ecs:SourceCidrIp": "0.0.0.0/0"
                      },
                      "ForAnyValue:StringEquals": {
                          "ecs:PortRange": [
                              "22/22",
                              "3389/3389",
                              "3306/3306",
                              "6379/6379",
                              "27017/27017"
                          ]
                      }
                  }
              }
          ]
      }

      說明:ForAnyValue:StringEquals表示只要使用者試圖開放的連接埠範圍與列表中的任何一個匹配,條件即成立。

    4. 輸入策略名稱稱備忘,單擊確定,完成安全驗證。

  3. 綁定權限原則

    建立好策略後,將其附加到希望約束的RAM使用者、使用者組或角色上。

    1. 登入RAM控制台,在左側導覽列,選擇身份管理 > 使用者

    2. 使用者頁面,單擊目標RAM使用者操作列的添加許可權

    3. 新增授權面板,選擇權限原則後,單擊確認新增授權