我有一个存储桶策略,该策略将我的IP范围列入AWS的白名单。我有一台运行Packer构建作业的EC2服务器,该服务器试图从我的存储桶中拉出一个对象,并且出现403 Forbidden
错误,即使运行该作业的EC2服务器的IP显然在白名单范围内。即使从wget
范围内的计算机运行CIDR
,我也会遇到相同的错误。我很困惑为什么会这样。该政策似乎还不错。以下是我的存储桶策略,服务器的IP和错误:
Bucket Policy:
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::xxxxxxx",
"arn:aws:s3:::xxxxxxx/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"10.x.x.x/12"
]
}
}
}
]
}
Server IP:
10.x.x.x/32
Error:
ui,message, amazon-ebs: "msg": "Error downloading
https://s3.amazonaws.com/xxxxx/yyyy.zip to C:\\temp\\xxx.zip Exception
calling \"DownloadFile\" with \"2\" argument(s): \"The remote server
returned an error: (403) Forbidden.\""
答案 0 :(得分:3)
Amazon S3位于Internet上。
因此,当与S3通信时,您的系统将使用公共IP地址。
但是,您的策略仅包含私有IP地址。这就是为什么它不起作用。
您的选择是:
答案 1 :(得分:1)
aws:sourceIp
需要一个 public IP地址。根据定义,专用地址是不明确的,并且10.x.x.x/12
是专用(RFC-1918)地址,因此它永远不会匹配。
如果您不使用S3 VPC端点,则可以将NAT网关的公共IP地址列入白名单(假设所有有权访问该网关的实例都可以访问该存储桶)。
如果使用的是S3 VPC端点,则无法按IP列入白名单:
您不能在IAM策略中使用aws:SourceIp条件通过VPC终端节点向Amazon S3发出请求。这适用于用户和角色的IAM策略以及所有存储桶策略。如果语句包含aws:SourceIp条件,则该值无法匹配任何提供的IP地址或范围。
https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html
还有,这是
注意:最好不要使用
aws:SourceIp
条件键。https://aws.amazon.com/premiumsupport/knowledge-center/iam-restrict-calls-ip-addresses/