我查看了AWS的官方文檔,其中描述了如何創(chuàng)建一個(gè)策略,該策略僅在SourceIP位于特定CIDR內(nèi)時(shí)才允許請求。
我想解決的問題是,為什么你需要ALLOW和DENY?既然資源策略應(yīng)該定義權(quán)限邊界,那么DENY就不夠了嗎?
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:region:account-id:*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:region:account-id:*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "123.4.5.6/24"
}
}
}
]
}
這樣的東西不夠嗎(選項(xiàng)1)?
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:region:account-id:api-id:*",
"Condition": {
"IpAddress": {
"aws:SourceIp": ["123.4.5.6/24" ]
}
}
}
]
}
或者(選項(xiàng)2)只有一個(gè)拒絕,除了:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:region:account-id:api-id:*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": ["123.4.5.6/24" ]
}
}
}
]
}
當(dāng)有人試圖訪問API時(shí):
因此,您的選項(xiàng)2不起作用,因?yàn)闆]有適用的ALLOW政策。
您的選項(xiàng)1確實(shí)允許您想要的訪問,但其他策略也可能允許在各種條件下訪問各種主體。
文檔中的版本確保只向具有給定范圍內(nèi)的sourceIP的主體提供訪問權(quán)限,無論應(yīng)用何種其他策略,因?yàn)槭紫葯z查DENY策略。