訪問OpenAPI時,建議配置RAM Policy規則限制訪問源端IP地址合法範圍,防止在憑據泄露的情況下,攻擊者可以從網路任意位置使用該憑據非法操控或訪問雲資源。
安全風險
預設情況下,任何擁有合法AccessKey (AK)憑證的實體,可以從互連網的任意角落髮起對雲資源的OpenAPI調用。這意味著,一旦AK憑證因配置不當、代碼寫入程式碼或員工離職等原因泄露,攻擊者便獲得了直接操控雲資源的“鑰匙”,其風險是全域性的,可能導致資料被竊、資源被惡意刪除或產生高額費用。
最佳實務
通過RAM Policy規則限制訪問源端IP地址,即使AK憑證泄露,攻擊者也必須從預設的、受信任的IP地址(如公司出口IP、BastionhostIP)發起攻擊才能成功。
控制台
建立RAM使用者(阿里雲主帳號無法通過RAM Policy限制訪問源IP)
使用阿里雲帳號(主帳號)或Resource Access Management員登入RAM控制台。
在左側導覽列,選擇。
在使用者頁面,單擊建立使用者,根據提示完成資訊填寫,單擊確定,完成安全驗證。
建立自訂權限原則
使用Resource Access Management員登入RAM控制台。在左側導覽列,選擇。
在權限原則頁面,單擊建立權限原則。
在建立權限原則頁面,單擊指令碼編輯頁簽。輸入以下權限原則內容,然後單擊確定。
{ "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 位址 ] } } } ] }輸入策略名稱稱和備忘,單擊確定,完成安全驗證。
為RAM使用者綁定權限原則
使用Resource Access Management員登入RAM控制台。
在左側導覽列,選擇。
在使用者頁面,單擊目標RAM使用者操作列的添加許可權。
在新增授權面板,選擇權限原則後,單擊確認新增授權。
API
調用CreateUser介面建立RAM使用者:
UserName:RAM使用者的登入名稱稱。
DisplayName:RAM使用者的顯示名稱。
調用CreatePolicy介面建立RAM Policy:
PolicyName:策略名稱稱,建議具有可讀性(如RestrictIPAccess)。PolicyDocument:策略內容,JSON 格式,指定允許的 IP 位址範圍。
調用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