在没有凭证的情况下从特定IP授予对AWS S3存储桶的访问权限

时间:2018-08-29 07:52:18

标签: amazon-web-services amazon-s3

我不想公开访问我的S3存储桶。但是我希望它可以从本地组织网络访问而无需AWS CLI或任何凭证。我该如何实现?

我尝试使用主体为*且源IP为组织网络的公共IP的存储桶策略。

2 个答案:

答案 0 :(得分:1)

是的,那是正确的方法。

来自Bucket Policy Examples - Amazon Simple Storage Service

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      } 
    } 
  ]
}

答案 1 :(得分:0)

如果打算授予对特定CIDR范围的匿名访问权限,同时还允许IAM策略向特定人员(例如管理员)授予其他访问权限,那么这将是不合适的。 >

如果您要遵循AWS documentation提出的初始示例-您将得到一个看起来可能与此类似的政策。

{
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::examplebucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "x.x.x.x/xx"
                }
            }
        }
    ]
}

在桌子上敲了几次头后,您会发现此政策无效。 S3存储桶似乎没有隐含的拒绝规则(类似于如何设置IAM访问策略)。

默认情况下,除非已通过策略授予默认帐户访问权限,否则它们将无法访问S3。 但是,S3默认情况下被设计为允许任何IP地址访问。因此,要阻止IP,您必须在策略中明确指定拒绝,而不是允许。

一旦您了解了这一点,该政策就很容易调整。您只需将策略从允许仅从我的IP地址访问变为拒绝从任何不是我的IP地址访问。

{
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPDeny",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::examplebucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "xxx.x.x/xx"
                }
            }
        }
    ] }

希望这会有所帮助!