首页 > 解决方案 > AWS S3 - 为存储桶分配有限权限并创建只能访问该存储桶的 IAM

问题描述

我正在开发一个移动应用程序,我想在 AWS S3 存储桶中上传/获取/删除一个文件。

但我很担心安全问题。

S3 Bucket:它不应该是公开的,只有授权IAM用户才能访问有权访问我的bucket。

因此,需要帮助来配置我的 S3 存储桶的权限并创建 IAM 用户。

标签: amazon-web-servicesamazon-s3amazon-iam

解决方案


不是您授权移动应用程序访问的方式。是的,您可以创建 IAM 用户,生成访问密钥和秘密访问密钥,将这些密钥存储在应用程序代码中,并为 IAM 用户配置正确的权限。然后你甚至不需要配置存储桶策略。默认情况下,存储桶是私有的,只有您账户中具有适当权限的 IAM 用户才能访问它。如果您允许 IAM 用户访问特定的 S3 存储桶,那么您需要在存储桶策略上配置显式拒绝以覆盖它。

但上述方法违背了所有安全良好实践。您真正想要做的是创建允许访问存储桶的 IAM 角色并在应用程序中担任该角色。sts:assumeRoleWithWebIdentity您可以为您的用户设置 Cognito + web federation(或其他一些 web federation 提供商),并要求 STS 服务使用命令生成短期凭证。

至于 IAM 权限,您将需要 allow s3:PutObjects3: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 提供者)。


推荐阅读