首页 > 解决方案 > S3 仅对一个 IAM 用户的访问

问题描述

如何将 S3 读取权限设置为只有我的 IAM 用户可以访问?我在我的混合应用程序的后端有我的 IAM 用户配置,但我仍然无法访问 S3 列表。

这是我的存储桶政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxx:user/xxx@xxx.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}

我在终端上尝试过was s3 ls s3://my-s3-bucket,它显示了我的 s3 存储桶中的项目列表,但没有显示后端。如果我将 Principal 更改为“*”,我可以毫无问题地访问。(我想限制只有我的应用程序可以使用我拥有的 IAM 用户凭证访问它)。

我的错误

{"code":"InternalError","message":"Access Denied"}

谢谢你。

标签: amazon-web-servicesamazon-s3

解决方案


aws s3 ls命令用于列出存储桶的内容,但您的策略仅授予权限GetObject(这意味着读取对象的内容)。

如果您希望允许列出存储桶,您还需要授予s3:ListBucket权限。

存储桶策略与 IAM 策略

通常,存储桶策略用于授予公共或跨账户访问权限。

如果您希望向特定 IAM 用户授予访问权限,那么最好自己在 IAM 用户上添加策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}

但是,您说“只有一个用户”。如果任何其他用户已被授予使用类似管理员的策略访问所有S3 存储桶的权限,这将变得更加困难。在这种情况下,您需要Deny在存储桶策略中添加一个以防止任何已被授予对所有存储桶访问权限的人访问。这开始变得有点棘手,因为拒绝策略习惯于拒绝超出您的预期。

如果存储桶包含敏感信息,另一种选择是将存储桶放在不同的 AWS 账户中,然后只向需要访问的特定 IAM 用户授予跨账户访问权限。这可以防止人们获得类似管理员的访问权限,并避免使用拒绝策略的需要。


推荐阅读