amazon-web-services - AWS S3 - 为存储桶分配有限权限并创建只能访问该存储桶的 IAM
问题描述
我正在开发一个移动应用程序,我想在 AWS S3 存储桶中上传/获取/删除一个文件。
但我很担心安全问题。
S3 Bucket:它不应该是公开的,只有授权IAM用户才能访问有权访问我的bucket。
因此,需要帮助来配置我的 S3 存储桶的权限并创建 IAM 用户。
解决方案
这不是您授权移动应用程序访问的方式。是的,您可以创建 IAM 用户,生成访问密钥和秘密访问密钥,将这些密钥存储在应用程序代码中,并为 IAM 用户配置正确的权限。然后你甚至不需要配置存储桶策略。默认情况下,存储桶是私有的,只有您账户中具有适当权限的 IAM 用户才能访问它。如果您允许 IAM 用户访问特定的 S3 存储桶,那么您需要在存储桶策略上配置显式拒绝以覆盖它。
但上述方法违背了所有安全良好实践。您真正想要做的是创建允许访问存储桶的 IAM 角色并在应用程序中担任该角色。sts:assumeRoleWithWebIdentity
您可以为您的用户设置 Cognito + web federation(或其他一些 web federation 提供商),并要求 STS 服务使用命令生成短期凭证。
至于 IAM 权限,您将需要 allow s3:PutObject
,s3:GetObject
因此s3:DeleteObject
该策略可能看起来像这样。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "<arn-of-your-bucket>"
}
]
}
如果需要,您可以更加精细,并允许 Cognito 用户仅访问存储桶内的“他们的”文件夹。
至于角色,你只需要附加上面的策略,并配置角色和 Web 身份提供者之间的信任关系(如上所述,这可以是 Cognito 或任何 OpenID 提供者)。
推荐阅读
- ios - CoreData 中的可选双属性的行为不像可选?
- node.js - 谁能告诉我如何更改 iisnode 服务器中的默认超时请求时间?
- django - 连接到 Internet 时将本地 CouchDB 数据库与远程 CouchDB 数据库同步
- java - 如何重构以减少 if 语句?
- python - str.contains 具有多个值和 if-condition 错误 :: Exception 没有帮助,因为它没有提到正确的替代方案
- css - 反应蚂蚁设计日期时间选择器时间不在顶部更新
- mediawiki - 禁用一键回滚功能
- php - 无法显示加入的 id
- java - Java:为什么我可以读取私有属性?
- python - 验证码求解(字体:Arial,文本上的线条,无噪音)