今天要來談論 IAM 身份與權限管理最後一點: Allow / Deny 怎麼判斷?
先只記住這 3 種情況
假設想查看 EC2,AWS 會問:「SS C 可以執行 ec2:DescribeInstances 嗎?」
情況一:有 Allow → ✅ 可以
Policy 寫:
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
意思是
SS C 想查看 EC2
↓
AWS 檢查 Policy
↓
找到 Allow
所以可以看到 EC2 清單。
情況二:什麼都沒寫 → ❌ 不可以
假設 Policy 只有:Allow IAM Read
完全沒有提到 EC2,還是代表沒有權限。
AWS 的邏輯是:
沒有 Allow
↓
預設拒絕
↓
❌
這叫做:Implicit Deny(隱含拒絕)
也就是沒有說你可以 = 不可以。
情況三:同時有 Allow 和 Deny → ❌ Deny 贏
假設有兩個 Policy:
Policy A
Allow EC2
Policy B
Deny EC2
AWS 最後會判斷:
Allow EC2
VS
Deny EC2
↓
❌ Deny
這叫 Explicit Deny(明確拒絕)
只要有符合條件的 Explicit Deny,通常就會把 Allow 蓋掉。
所以結論就是:
1.Deny 會覆蓋掉 Allow -> Explicit Deny
2.沒有該權限代表沒有權限 -> Implicit Deny
3.有 Allow 表示有該權限
4.Implicit Deny = 沒給你權限,所以不能做。
Explicit Deny = 明確規定你不准做。
| Policy 狀況 | 最終結果 |
|---|---|
| 沒有任何設定 | ❌ Deny |
| Allow | ✅ Allow |
| Deny | ❌ Deny |
| Allow + Deny | ❌ Deny |