【发布时间】:2018-12-26 16:19:44
【问题描述】:
客户端应用程序请求 S3 的预签名 URL。目前我们限制了 URL 的有效时间,但也希望将其限制为客户端的 IP 地址。
是否可以创建限制为特定 IP 地址的 S3 预签名 URL?
据我所知,只有 CloudFront 允许我这样做。
【问题讨论】:
标签: amazon-web-services amazon-s3 ip-address pre-signed-url
客户端应用程序请求 S3 的预签名 URL。目前我们限制了 URL 的有效时间,但也希望将其限制为客户端的 IP 地址。
是否可以创建限制为特定 IP 地址的 S3 预签名 URL?
据我所知,只有 CloudFront 允许我这样做。
【问题讨论】:
标签: amazon-web-services amazon-s3 ip-address pre-signed-url
是的!
首先,有必要解释一下预签名 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* 特定的访问密钥,我授权临时访问直到 *this* 时间,这是我计算的签名以证明它是我”。
在使用预签名 URL 时,它暂时使用签名实体的权限来获得对对象的访问权限。这意味着我可以为我被允许访问的对象生成一个有效的预签名 URL,但如果我通常不被允许访问该对象,预签名 URL 将不起作用。
因此,要“创建限制为特定 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,但随后被 S3 拒绝,因为不满足 IP 地址限制。用户将收到 Access Denied 消息。
【讨论】: