客户端应用程序请求S3的预签名URL。目前,我们限制URL的有效时间,但也希望将其限制为客户端的IP地址。
是否可以创建限制为特定IP地址的S3预签名URL?
据我所知,只有CloudFront可以让我这样做。
答案 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”,您应该:
以下是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拒绝。用户将收到一条拒绝访问消息。