仅向一个 IAM 用户授予对 Amazon S3 存储桶的访问权限

时间:2021-04-27 01:47:15

标签: amazon-web-services amazon-s3 amazon-ec2

我希望有一个只有一个 IAM 用户可以使用 AWS 控制台访问、列出其内容并访问其中的对象文件的存储桶。

因此,我已经创建了 IAM 用户、存储桶本身以及稍后:

桶策略如下:

{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "statement1",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::0000000:user/dave"
                },
                "Action": [
                    "s3:GetBucketLocation",
                    "s3:ListBucket"
                ],
                "Resource": "arn:aws:s3:::testbucket1234"
            },
            {
                "Sid": "statement2",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::0000000:user/dave"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::testbucket1234/*"
            }
        ]
    }

还有一个附加到我的用户组的内联策略,如下所示:

    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*Object",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::testbucket1234/*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        }
    ]
}

现在:我可以列出我的存储桶、访问所需的存储桶、列出其内容(到目前为止一切顺利)。问题是当我尝试打开存储桶内的一个文件对象时,出现“访问被拒绝”错误。如果我将对象设为公开,我可以访问它,但我也可以使用其他 IAM 帐户访问它,这不是本意。我想仅通过使用此特定 IAM 帐户来访问存储桶、列出其内容和访问对象。我究竟做错了什么?我怎样才能达到这个目标?提前致谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,没有 IAM 用户可以访问任何存储桶。只有授予用户权限才能访问资源。

但是,许多人倾向于为所有存储桶授予 Amazon S3 权限,至少对于管理员。这使得删除权限变得困难,因此存储桶只能由一个用户访问。虽然可以通过 Deny 策略完成,但此类策略难以正确制定。

对于特定数据只能由一个用户或特定用户组(例如 HR 员工)访问的情况,我建议您创建一个单独的 AWS 账户并仅向特定 IAM 用户或IAM 组通过存储桶策略(跨账户运行良好)。这样,任何授予“所有存储桶”访问权限的通用策略都不会应用于此单独帐户中的存储桶。


更新:访问私有对象

扩展下面评论中提到的内容,授权用户可以访问 Amazon S3 中的私有对象。但是,在访问对象时,需要识别正在访问该对象,并且必须证明他们的身份。这可以通过以下几种方式之一完成:

  • Amazon S3 管理控制台中,使用打开命令(在操作菜单中)。这将使用预先签名的 URL 打开对象,该 URL 根据登录控制台的用户授权访问。 下载选项使用相同的方法。
  • 使用 AWS Command-Line Interface (CLI),您可以下载对象。 AWS CLI 需要使用您的 IAM 安全凭证进行预配置以证明您的身份。
  • 使用 AWS SDK 的程序可以使用其 IAM 安全凭证访问 S3 对象。事实上,AWS CLI 只是一个使用 AWS SDK 的 Python 程序。
  • 如果您想通过 URL 访问对象,应用程序可以生成一个 Amazon S3 pre-signed URLs。这个 URL 包括用户的身份和一个安全签名,该签名允许在有限的时间(例如 5 分钟)内访问私有对象。当 Web 应用程序想要授予对私有对象(例如文档或照片)的访问权限时,通常会使用此方法。当用户选择 Actions/Open 时,S3 管理控制台实际上会使用此方法,以便用户可以在其浏览器中查看私有对象。