将 S3 的特定文件夹转换为可浏览的目录列表而不公开

将 S3 的特定文件夹转换为可浏览的目录列表而不公开

我有一个存储桶,我想使用类似以下的浏览器访问它http://data.openspending.org/ 并且我希望仅显示子文件夹。因此,如果 Bucket1 有多个文件夹,我只想显示并让用户下载 zipFiles 文件夹 (Bucket1/zipFiles/*) 的内容

接受指示https://github.com/rufuspollock/s3-bucket-listing我通过以下 5 处修改完成了此任务

  1. 禁用 公共访问阻止在存储桶权限中

  2. 添加存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::Bucket1/index.html",
                "arn:aws:s3:::Bucket1/zipFiles/*"
            ]
        },
        {
            "Sid": "AllowPublicList",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::Bucket1",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "zipFiles/*"
                }
            }
        }
    ]
}
  1. 添加 存储桶权限中的 CORS

  2. 在 bucket 的根目录中添加 index.html

<!DOCTYPE html>
<html>
<head>
  <title>S3 Bucket Listing Generator</title>
</head>
<body>
  <div id="navigation"></div>
  <div id="listing"></div>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
  var S3BL_IGNORE_PATH = false;
  // var BUCKET_NAME = 'Bucket1';
  var BUCKET_URL = 'https://Bucket1.s3-eu-west-1.amazonaws.com';
  // var S3B_ROOT_DIR = 'SUBDIR_L1/SUBDIR_L2/';
  // var S3B_SORT = 'DEFAULT';
  // var EXCLUDE_FILE = 'index.html';  // change to array to exclude multiple files, regexp also supported e.g. /^(.*\/)?index.html$/ to exclude all index.html
  // var AUTO_TITLE = true;
  // var S3_REGION = 's3-eu-west-1';
</script>
<script type="text/javascript" src="https://rufuspollock.github.io/s3-bucket-listing/list.js"></script>

</body>
</html>
  1. 启用静态网站托管

它可以限制对 zipFiles 文件夹的访问。我的问题是我不想公开这个网站。我想让它只对组织用户可见。我尝试了两种方法。第一种是通过 IP 地址进行限制。另一种是通过 vpc 进行限制。这两种方法都不起作用,因为 IP 地址不是与私有 IP 进行比较,而是与外部 IP 进行比较。而且 vpc 限制有依赖关系,我还没有完全弄清楚

有没有办法将 S3 文件夹内容公开为可浏览的目录结构(不是 xml 格式)而不公开?组织的 IP 范围与 aws 帐户对等,因此员工可以使用私有 IP 访问 ec2。S3 也可以这样做吗?或者,如果公开是唯一的方法,我该如何限制只有组织用户才能访问?

相关内容