托管静态网站的 S3 存储桶策略

S3 Bucket Policy for Hosted Static Website

我有一个用于托管静态网站的 S3 存储桶。 This example 显示授予 每个人 访问指定存储桶中对象的策略(即使网站 public):

{
  "Version":"2012-10-17",
  "Statement":[{
     "Sid":"PublicReadGetObject",
     "Effect":"Allow",
     "Principal": "*",
     "Action":["s3:GetObject"],
     "Resource":["arn:aws:s3:::example-bucket/*"]
  }]
}

但是,我想让该网站仅供特定的亚马逊用户访问。所以在 this documentation 之后,我在 Principal 中指定了这些用户:

{
  "Version":"2012-10-17",
  "Statement":[{
     "Sid":"PublicReadGetObject",
     "Effect":"Allow",
     "Principal": {
        "AWS": "arn:aws:iam::Account-ID:user/Dave"
     },
     "Action":["s3:GetObject"],
     "Resource":["arn:aws:s3:::example-bucket/*"]
  }]
}

虽然这正确地为谁可以通过 S3 控制台访问资源启用了权限,但它会导致 每个人 尝试访问托管网站时返回 403。

是否可以使用用户级权限来限制对托管存储桶的访问?

不可以,无法将用户级权限应用于 S3 中的静态网站存储桶。来自 Permissions Required for Website Access:

When you configure a bucket as a website, you must make the objects that you want to serve publicly readable.