我试图通过 aws s3 中的策略允许访问以 111.222 开头的多个 ipv4 ip 地址,我已经尝试了以下所有但无法使其工作 -
{
"Version": "2012-10-17",
"Id": "AllowAccess",
"Statement": [
{
"Sid": "AddAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"111.222.0.0",
"111.222.*.*",
"111.222.."
]
}
}
}
}
可以这样做吗?我希望 111.222.1.2 和 111.222.99.6 等 ip 地址可以访问。
存储桶正在托管一个不允许公开访问的静态网站。
如果我输入完整的 IP 地址,它就可以工作,例如- 111.222.1.2 但有数百个 ip 地址,所以想使用通配符。
您可以使用 CIDR 作为 ip 地址。
{
"Version": "2012-10-17",
"Id": "AllowAccess",
"Statement": [
{
"Sid": "AddAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"111.222.0.0/16"
]
}
}
}
}
来自这个文档,
IP 地址条件运算符允许您构造条件元素,这些元素基于将密钥与 IPv4 或 IPv6 地址或 IP 地址范围进行比较来限制访问。您将这些与 aws:SourceIp 键一起使用。该值必须采用标准 CIDR 格式(例如,203.0.113.0/24 或 2001:DB8:1234:5678::/64)。如果您指定没有关联路由前缀的 IP 地址,IAM 将使用默认前缀值 /32。
在这些条件中不使用通配符,而是使用 Cidr 表示法。从你的意思来看,你想要的通配符似乎是
111.222.*.*
其中 *
可以是任何数字 0-255。这是 CIDR 111.222.0.0/16
.
两个示例都完美运行,感谢您的帮助!