全部產品
Search
文件中心

Elastic Compute Service:約束OpenAPI調用來源IP合法範圍

更新時間:Oct 31, 2025

訪問OpenAPI時,建議配置RAM Policy規則限制訪問源端IP地址合法範圍,防止在憑據泄露的情況下,攻擊者可以從網路任意位置使用該憑據非法操控或訪問雲資源。

安全風險

預設情況下,任何擁有合法AccessKey (AK)憑證的實體,可以從互連網的任意角落髮起對雲資源的OpenAPI調用。這意味著,一旦AK憑證因配置不當、代碼寫入程式碼或員工離職等原因泄露,攻擊者便獲得了直接操控雲資源的“鑰匙”,其風險是全域性的,可能導致資料被竊、資源被惡意刪除或產生高額費用。

最佳實務

通過RAM Policy規則限制訪問源端IP地址,即使AK憑證泄露,攻擊者也必須從預設的、受信任的IP地址(如公司出口IP、BastionhostIP)發起攻擊才能成功。

控制台

  1. 建立RAM使用者(阿里雲主帳號無法通過RAM Policy限制訪問源IP)

    1. 使用阿里雲帳號(主帳號)或Resource Access Management員登入RAM控制台

    2. 在左側導覽列,選擇身份管理 > 使用者

    3. 使用者頁面,單擊建立使用者,根據提示完成資訊填寫,單擊確定,完成安全驗證。

  2. 建立自訂權限原則

    1. 使用Resource Access Management員登入RAM控制台。在左側導覽列,選擇許可權管理 > 權限原則

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

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

      {
        "Version": "1",
        "Statement": [
          {
            "Action": "ecs:*",  // ecs下所有OpenAPI,如果是雲上所有OpenAPI則配置為*
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
              "IpAddress": {
                "acs:SourceIp": [
                  "200.1.xxx.xxx/24",  // 替換為允許的 IP 位址範圍
                  "213.1.xxx.xxx"      // 替換為允許的單個 IP 位址
                ]
              }
            }
          }
        ]
      }
    4. 輸入策略名稱稱備忘,單擊確定,完成安全驗證。

  3. 為RAM使用者綁定權限原則

    1. 使用Resource Access Management員登入RAM控制台

    2. 在左側導覽列,選擇身份管理 > 使用者

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

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

API

  1. 調用CreateUser介面建立RAM使用者:

    • UserName:RAM使用者的登入名稱稱。

    • DisplayName:RAM使用者的顯示名稱。

  2. 調用CreatePolicy介面建立RAM Policy:

    • PolicyName:策略名稱稱,建議具有可讀性(如 RestrictIPAccess)。

    • PolicyDocument:策略內容,JSON 格式,指定允許的 IP 位址範圍。

  3. 調用AttachPolicyToUser介面為RAM使用者繫結原則:

    • PolicyType:策略類型,固定為 "Custom"

    • PolicyName:策略名稱稱(如 RestrictIPAccess)。

    • UserName:RAM 使用者名稱稱(如 TestUser)。

說明

通過 RAM Policy 限制源 IP 無法直接限制從 VPC 訪問 OpenAPI 的源 IP,因為acs:SourceIp 實際上是基於調用 OpenAPI 請求的公網出口 IP 或 NAT Gateway出口 IP,而不是 VPC 內部的私人 IP 位址。

合規能力

檢查:是否存在RAM使用者沒有繫結來源IP限制策略

使用阿里雲CLI工具,運行以下指令碼,遍曆所有 RAM 使用者並檢查是否綁定了 IP限制策略:

#!/bin/bash

# 定義策略ARN(Aliyun Resource Name)
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"  #替換成自己的Policy Arn

# 擷取所有RAM使用者列表
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')

# 遍曆每個使用者並檢查是否綁定了指定策略
for USER in $USER_LIST; do
  # 擷取使用者綁定的策略列表
  POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyArn')

  # 檢查策略是否包含目標策略ARN
  if ! echo "$POLICIES" | grep -q "$POLICY_ARN"; then
    echo "使用者 $USER 未繫結原則 $POLICY_ARN"
  fi
done

修複:批量給RAM使用者繫結來源IP限制策略

使用阿里雲CLI工具,運行以下指令碼,遍曆所有 RAM 使用者並為沒有繫結原則的使用者繫結原則:

#!/bin/bash

# 定義策略ARN(Aliyun Resource Name)
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"   #替換成自己的Policy Arn

# 擷取所有RAM使用者列表
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')

# 遍曆每個使用者並檢查是否綁定了指定策略
for USER in $USER_LIST; do
  # 擷取使用者綁定的策略列表
  POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyArn')

  # 檢查策略是否包含目標策略ARN
  if ! echo "$POLICIES" | grep -q "$POLICY_ARN"; then
    echo "使用者 $USER 未繫結原則 $POLICY_ARN"
    
    # 為使用者繫結原則
    echo "正在為使用者 $USER 繫結原則 $POLICY_ARN ..."
    aliyun ram AttachPolicyToUser \
      --PolicyType Custom \
      --PolicyName RestrictIPAccess \
      --UserName $USER
    
    if [ $? -eq 0 ]; then
      echo "策略 $POLICY_ARN 已成功綁定到使用者 $USER"
    else
      echo "策略 $POLICY_ARN 綁定失敗,請檢查許可權或策略是否存在"
    fi
  fi
done