Amazon s3预签名URL受IP地址限制

时间:2018-07-18 16:48:23

标签: amazon-web-services amazon-s3 ip-address pre-signed-url

客户端应用程序请求S3的预签名URL。目前,我们限制URL的有效时间,但也希望将其限制为客户端的IP地址。

是否可以创建限制为特定IP地址的S3预签名URL?

据我所知,只有CloudFront可以让我这样做。

1 个答案:

答案 0 :(得分:8)

是的!

首先,值得解释一下预签名URL的概念。

Amazon S3中的对象默认为私有。因此,如果有人尝试在不提供凭据的情况下访问它,则访问将被拒绝。

例如,这不适用于私有对象:

https://my-bucket.s3.amazonaws.com/foo.json

要授予对该对象临时访问权限,可以生成一个预签名URL 。它看起来类似于:

https://my-bucket.s3.amazonaws.com/x.json?AWSAccessKeyId=AKIAIVJQM12345CY3A3Q&Expires=1531965074&Signature=g7Jz%2B%2FYyqc%2FDeL1rzo7WM61RusM%3D

URL上显示“我是*这个*特定的访问密钥,并且我授权临时访问直到* this *这段时间,这是我计算出的签名以证明是我”。

使用“预签名URL”时,它临时使用签名实体的权限来获得对该对象的访问权限。这意味着我可以为被允许访问的对象生成一个有效的预签名URL,但是如果通常不允许我访问该对象,则该预签名URL将起作用。 / p>

因此,要“创建限制为特定IP地址的S3预签名URL”,您应该:

  • 创建一个可以访问具有IP地址限制的对象(或整个存储桶)的IAM实体(例如IAM用户),并且
  • 使用该实体生成预先签名的URL

以下是IAM用户的示例策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "54.22.33.44/32"
                }
            }
        }
    ]
}

结果将是一个预签名URL,该URL可成功访问对象,但由于不满足IP地址限制,因此被S3拒绝。用户将收到一条拒绝访问消息。