我试图让EC2实例访问S3桶。我宁愿使用实例的IP地址来允许访问S3,而不是假设。
在桶策略中,我尝试允许实例的公共和私有IP,但试图访问任何资源给出<Code>AccessDenied</Code><Message>Access Denied</Message>
我能够使用IAM角色和aws cli访问S3桶,但我需要使用普通的HTTP地址访问S3桶,如http://s3.amazonaws.com/somebucket/somefile.txt
。我还测试了非云服务器(我自己的笔记本电脑和其他服务器),允许这些服务器的公共IP将成功地让我访问S3资源,只有当我对EC2实例做同样的事情时才不工作。
我试着查看访问日志,我看到EC2实例的私有IP被记录,并给出403访问拒绝。
我的桶策略是这样的:
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::test-bucket1/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"EC2-public-ip-address/32",
"EC2-private-ip-address/32"
]
}
}
},
我看到一个网关端点与EC2实例所在的VPC相关联
这就是为什么它使用私有IP。S3网关端点enableprivate无需访问internet,即可从VPC访问S3。因此,在这种情况下只使用私有IP。
您要么只能解决私有IP,要么修改您的VPC和S3网关设置以允许互联网连接到S3。这可能是安全问题,因为S3网关端点更安全(没有internet)。