【问题标题】:Amazon s3 Pre-signed URL restricted by IP addressAmazon s3 预签名 URL 受 IP 地址限制
【发布时间】:2018-12-26 16:19:44
【问题描述】:

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

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

据我所知,只有 CloudFront 允许我这样做。

【问题讨论】:

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


    【解决方案1】:

    是的!

    首先,有必要解释一下预签名 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 实体(例如 IAM 用户),该实体有权访问具有 IP 地址限制的对象(或整个存储桶),并且
    • 使用该实体生成预签名 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 消息。

    【讨论】:

    • 但是如果我们要动态限制 IP 地址给发出请求的特定最终用户呢?
    • @openwonk 可能是通过以编程方式创建具有 ip 限制的用户并在切换用户后生成签名 url
    • @openwonk 不,这不是为用户的特定 IP 地址生成预签名 URL 的方法。预签名 URL 的目的是时间限制将授予用户对对象的临时访问权限。虽然该用户可以将 URL 发布到世界各地并且其他人将能够在该时间段内访问该对象,但该用户同样可以将文件分发给其他人。因此,假设时间限制足以保护大多数用例,而无需进一步将预签名 URL 限制为特定 IP 地址。
    • 澄清一下:我的提议不要求生成预签名 URL 的应用程序“在同一个 IP 中”。相反,生成预签名 URL 的应用程序只需要使用一组凭据,该凭据具有限制允许访问的内容的策略。尝试访问对象时,使用预签名 URL 的客户端将受到类似限制。 (在生成预签名 URL 时,应用可以使用一组特殊的受限凭据,这可能与应用在其其余操作中使用的身份不同。)
    • @jbooker 是的,我刚刚对其进行了测试,它适用于多个 IP 地址。要指定多个 IP 地址,请使用Cloudflare IP Range Whitelist to S3 bucket through CloudFront : aws 中所示的格式。我为 3 个 IP 地址创建了一个具有 S3 权限的用户,并创建了一个预签名 URL。它可以通过这些 IP 地址工作,但不能通过其他 IP 地址工作。
    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2021-12-26
    • 2017-09-28
    • 2013-03-20
    相关资源
    最近更新 更多