利用阿里雲存取控制(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)策略:
優先處理拒絕:RAM在評估一個操作請求時,會檢查所有相關的策略。任何一條Deny策略的規則被匹配,該操作就會被立即拒絕,無論是否存在其他Allow策略。
精確條件約束: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的安全基準。
確定需要約束的關鍵操作和條件
首先,識別出希望強制執行的安全規則,並找到對應的RAM Action和Condition Key。Condition Key是雲端服務API暴露給RAM用於判斷的參數。可在具體服務的API文檔中找到它們。例如,建立ECS執行個體(ecs:RunInstances)這個Action,可以在RunInstances文檔的“授權資訊”部分找到所有支援的Condition Key。
編寫帶條件的Deny權限原則
登入RAM控制台,在左側導覽列,選擇。
在權限原則頁面,單擊建立權限原則。
在建立權限原則頁面,單擊指令碼編輯頁簽。輸入以下權限原則內容,然後單擊確定。
以下是一些經過驗證的常用權限原則樣本:
輸入策略名稱稱和備忘,單擊確定,完成安全驗證。
綁定權限原則
建立好策略後,將其附加到希望約束的RAM使用者、使用者組或角色上。
登入RAM控制台,在左側導覽列,選擇。
在使用者頁面,單擊目標RAM使用者操作列的添加許可權。
在新增授權面板,選擇權限原則後,單擊確認新增授權。