只能从我的 ElasticBeanStalk 实例访问 AWS S3 存储桶

Posted

技术标签:

【中文标题】只能从我的 ElasticBeanStalk 实例访问 AWS S3 存储桶【英文标题】:AWS S3 Bucket Accessible from my ElasticBeanStalk Instance only 【发布时间】:2015-08-30 07:32:40 【问题描述】:

我有 1 个 s3 存储桶,1 个 elasticbeanstalk 实例。目前我的 s3bucket 是公开的,因此可以从任何域访问它,甚至可以从我的本地主机访问。 我希望只有在我的 APP 托管/运行的地方才能从我的 EBS 实例访问我的所有 s3 存储桶资源。我的应用程序应该能够查看这些资源并将新图像/资源上传到此存储桶。 我敢肯定没有人这样做过。

【问题讨论】:

【参考方案1】:

控制对 S3 的访问有多种方法。使某些内容可私有访问的最佳做法是:不在存储桶策略中授予访问您的 S3 存储桶/文件的任何权限。

但是,您应该创建一个 IAM 角色,该角色具有对 S3 的完全访问权限,或对某些操作、某些存储桶的有限访问权限。

对于每个 EC2 实例以及每个 Elastic Beanstalk 环境,您都可以附加一个 IAM 角色。此角色将通过实例元数据自动提供给您的实例。这是为您的实例授予特殊权限的安全方式。

(注意:这是 AWS 安全最佳实践,因为 AWS 将处理您的 EC2 机器上的密钥轮换。)

【讨论】:

我理解 IAM 的意义,但要通过 url 访问 S3 资源,例如>/my-images/imagefile.jpg ...来自我在 EBS 上托管的应用程序。可以像 www.xyz.com .. 现在在这个应用程序中我有 >/my-images/imagefile.jpg " /> .. 那么 IAM 的作用在哪里?在这里.. 还是我需要一些 CORS 设置? 问题是,你的问题问的是完全不同的事情。如果您使用 IMG 标记向用户发送 html,则该文件将由浏览器下载。如果它是直接 S3 链接,那么它将直接转到 S3,而不是通过您的实例。 (这就是使用 S3 的重点。)在 S3 上限制公共访问的最佳做法是签名 URL-s。这将为每个用户提供临时 URL。但是对大量文件使用签名的 URL-s 可能会花费您大量的金钱/资源。 嗨,Adam,您能否建议一个策略示例,其中只能从我部署在 EBS 上的应用访问存储桶图像。 @user3112954 您可以配置到 s3 存储桶和符号链接的驱动器映射。

以上是关于只能从我的 ElasticBeanStalk 实例访问 AWS S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 DNS 指向 AWS ElasticBeanstalk 实例?

如何在 Elastic beanstalk 上从我的 PHP 按需运行 python 脚本?

我可以从我的 Elastic Beanstalk 部署中删除 S3 存储桶吗?

为 Elasticbeanstalk 单实例乘客配置 SSL

AWS Elasticbeanstalk 单实例强制 SSL 重定向循环

AWS ElasticBeanstalk - S3。拒绝访问