【问题标题】:S3 Bucket policy does not work when request is redirected to S3 bucket via servlet当请求通过 servlet 重定向到 S3 存储桶时,S3 存储桶策略不起作用
【发布时间】:2020-04-10 19:22:08
【问题描述】:
  1. 我们有一个 java servlet 应用程序,它将请求重定向到 s3 bucket html 文件,例如,
String htmlURL = "https://s3_bucket.s3.amazonaws.com/118/vtour/tour.html";
resp.sendRedirect(url);
  1. servlet 应用程序部署在 tomcat 服务器上,所有这些网络配置都通过 nginx 代理通道维护。 nginx 在不同的机器上运行。 Nginx 配置为:
    location /JavaServletApp {
         proxy_pass  http://ip_address_of_tomcat_server:8080;
    }

在 s3 上,我们添加了桶策略以仅允许特定 IP 地址访问,如下所示:(理想情况下,我们希望将 sourceIP 设置为仅 nginx 服务器的源IP)。 Tomcat 服务器不可公开访问)

{
    "Version": "2012-10-17",
    "Id": "Policy1576643187337",
    "Statement": [
        {
            "Sid": "Stmt1576643184762",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::s3_bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "nginx_server_ip",
                        "tomcat_server_public_ip",
                        "tomcat_server_private_ip",
                    ]
                }
            }
        }
    ]
}

注意:S3 存储桶是公开的。

如果我们尝试通过https://nginx/JavaServlet 应用程序渲染 s3 html 文件,则会出现“拒绝访问”错误。但是,如果我们通过 curl 从 nginx 服务器直接(没有 servlet 应用程序)访问 s3 存储桶 html 文件,那么html 文件被渲染。

如果我们将本地笔记本电脑的 ip 地址(公共网关 IP)添加到 s3 存储桶策略中,那么如果我们点击https://nginx/JavaServlet app,则会呈现 S3 上的 html。但这不是一个可行的解决方案。

另外,尝试将Referer设置为nginx-host,在nginx配置中,我们仍然无法通过https://nginx/JavaServlet app访问S3上的html。

【问题讨论】:

  • 你也可以尝试 IAM 策略来允许你的 IP
  • 如果您重定向到存储桶,那么(当然)浏览器的 IP 地址就是 S3 将看到的 IP 地址,因为浏览器直接连接到存储桶。对我来说,不清楚您实际上试图通过访问控制公共存储桶来完成什么,为什么?

标签: java nginx amazon-s3 servlets


【解决方案1】:

正如@Michel 所说,既然你使用:

resp.sendRedirect(url);

存储桶会收到来自客户端浏览器的请求,因此您无法为其应用好的策略。

AWS 处理这种情况的方法是使用GeneratePresignedURL 并将客户端重定向到生成的 URL。

【讨论】:

    猜你喜欢
    • 2016-08-05
    • 2021-01-19
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2017-10-14
    • 2023-03-31
    相关资源
    最近更新 更多