[英]S3 Bucket Policy for Limiting Access to Cloudflare IP Addresses
我將使用 Cloudflare 作為 S3 網站存儲桶的代理,以確保用戶無法使用存儲桶 URL 直接訪問網站。
我用我的自定義域為 static 網站托管設置了一個 S3 存儲桶: www.mydomain.com
並上傳了我的index.html
文件。
我有一條CNAME
記錄,其中www.mydomain.com
-> www.mydomain.com.s3-website-us-west-1.amazonaws.com
Proxy
問題:我正在嘗試將存儲桶策略應用於Deny
訪問我的網站存儲桶,除非該請求源自一系列Cloudflare IP 地址。 我正在按照官方 AWS 文檔執行此操作,但每次嘗試訪問我的網站時,都會收到Forbidden 403 AccessDenied
錯誤。
這是我的存儲桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudflareGetObject",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::ACCOUNT_ID:user/Administrator",
"arn:aws:iam::ACCOUNT_ID:root"
]
},
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::www.mydomain.com/*",
"arn:aws:s3:::www.mydomain.com"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"2c0f:f248::/32",
"2a06:98c0::/29",
"2803:f800::/32",
"2606:4700::/32",
"2405:b500::/32",
"2405:8100::/32",
"2400:cb00::/32",
"198.41.128.0/17",
"197.234.240.0/22",
"190.93.240.0/20",
"188.114.96.0/20",
"173.245.48.0/20",
"172.64.0.0/13",
"162.158.0.0/15",
"141.101.64.0/18",
"131.0.72.0/22",
"108.162.192.0/18",
"104.16.0.0/12",
"103.31.4.0/22",
"103.22.200.0/22",
"103.21.244.0/22"
]
}
}
}
]
}
默認情況下,AWS 拒絕所有請求。 資源
您的策略本身不會授予管理員 [或任何其他用戶] 的訪問權限,它只會將他從被明確拒絕的委托人列表中省略。 為了允許他訪問資源,另一個策略聲明必須使用“Effect”顯式允許訪問:“Allow”。 資源
現在,我們必須創建兩個策略聲明:- 第一個是允許,第二個是拒絕。 然后,最好只對特定 IP 設置一個“允許”策略。
最好不要將簡單的事情復雜化,例如將 Deny 與 Not Principal 和 NotIPAddress 一起使用。 甚至 AWS 都說:
很少有場景需要使用 NotPrincipal,我們建議您在決定使用 NotPrincipal 之前探索其他授權選項。 資源
現在,問題出現在如何將 Cloudflare IP 列入白名單??? .
讓我們用一個簡單的方法 go。 以下是政策。 替換您的存儲桶名稱和 Cloudflare Ip。 我已經測試過它並且它正在運行。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFlareIP",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:getObject",
"Resource": [
"arn:aws:s3:::my-poc-bucket",
"arn:aws:s3:::my-poc-bucket/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"IP1/32",
"IP2/32"
]
}
}
}
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.