JCC*_*CCS 7 amazon-s3 amazon-web-services cloudflare
我将使用 Cloudflare 作为我的 S3 网站存储桶的代理,以确保用户无法使用存储桶 URL 直接访问网站。
我使用我的自定义域设置了一个用于静态网站托管的 S3 存储桶:www.mydomain.com
并已上传我的index.html
文件。
我有一条启用了->和 CloudflareCNAME
的记录。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"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
小智 3
默认情况下,AWS 拒绝所有请求。来源
您的策略本身不会授予管理员[或任何其他用户]访问权限,它只是将其从明确拒绝的主体列表中删除。为了允许他访问资源,另一个策略声明必须使用“Effect”:“Allow”显式允许访问。 来源
现在,我们必须创建两个策略声明:- 第一个是允许,第二个是拒绝。那么,最好只有一项策略“仅允许”特定 IP。
最好不要使简单的事情复杂化,例如将 Deny 与 Not Primary 和 NotIPAddress 一起使用。甚至 AWS 也表示:
很少有场景需要使用 NotPrincipal,我们建议您在决定使用 NotPrincipal 之前探索其他授权选项。来源
现在,问题来了如何将 Cloudflare IP 列入白名单???。
让我们采用一个简单的方法。以下是政策。替换您的存储桶名称和 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"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2214 次 |
最近记录: |