amazon-web-services - 无法从 VPC 内访问托管在 S3 存储桶上的静态网站

标签 amazon-web-services amazon-s3 amazon-vpc static-web-apps

我希望使用 S3 存储桶在 AWS 上托管静态网站。

我关注了these步骤。

该站点是一个带有子目录的普通目录:

app
│   index.html   
└───scripts
│   │   things.js
│   │   stuff.js
└───images
    │   img1.png
    │   img2.jpg

我想让网站只供在我们 VPC 内 的人访问。我将以下类型的策略附加到保存站点文件的存储桶(添加我的特定存储桶名称和 VPC id):

{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
    {
        "Sid": "Access-to-specific-VPCE-only",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::my_bucket*",
        "Condition": {
            "StringEquals": {
                "aws:sourceVpce": "vpce-blahblahblah"
            }
        }
    }
]
}

我还设置了一个 VPC 端点,端点 ID 设置为存储桶策略中 aws:sourceVpce 的值。

我在 these 之后设置了 VPC 端点步骤。

但我仍然无法在我的浏览器上访问该站点(我假设因为我正在使用相同的浏览器访问 AWS 控制台,AWS 知道我在 VPC 内)。

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>blahblahblah</RequestId>
    <HostId>blahblahblah</HostId>
</Error>

最佳答案

S3 静态网站需要公共(public)访问权限。 VPC 中没有私有(private) S3 网站或只能通过 VPC 端点访问。

要使您的 S3 网站正常运行,您必须将存储桶设置为公开,或使用也只能通过互联网访问的 CloudFront。但至少当您使用 CloudFront(尽管不是网站本身)时,您的存储桶可以是私有(private)的

关于amazon-web-services - 无法从 VPC 内访问托管在 S3 存储桶上的静态网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69760662/

相关文章:

swift - 解析 REST API key 破坏客户端 key 身份验证

php - 执行 POST 请求时不会设置 Amazon S3 内容类型

android - 403 禁止。我们计算的请求签名与您提供的签名不匹配。检查从 Android 到 Amazon S3 的 key 和签名方法

postgresql - AWS DMS 与 RDS 上的 Postgresql 的连接问题

amazon-web-services - 使用 Athena 查询 s3 中的 AWS firehose 数据 - 无法查询批处理

amazon-web-services - 无服务器云信息 : cast environment variable to number

mysql - 使用 AWS RDS 在 Heroku App 上获取 Mysql2::Error(SSL 连接错误:ASN:错误的其他签名确认)

node.js - AWS S3 Node.js - 设置对象的内容处置

amazon-web-services - CodeBuild 找不到目标 Internet 网关的 0.0.0.0/0 目的地

amazon-web-services - AWS Redis 安全组示例