amazon-web-services - 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"}
谢谢你。
解决方案
该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 用户授予跨账户访问权限。这可以防止人们获得类似管理员的访问权限,并避免使用拒绝策略的需要。
推荐阅读
- php - 如何使用php将数组中的数据插入mysql
- android - Flutter 按住闪屏 3 秒。如何在 Flutter 中实现闪屏?
- python-2.7 - graphlab-create 2.1 安装无法卸载 distutils 安装项目“certifi”
- java - 正则表达式:在任何情况下都在 TextView 中突出显示输入
- linux - Apache 2.4 将本地虚拟主机重定向到 https 而不是 http
- laravel - 如何使用控制器从 laravel 中的 enom api 获取数据
- java - 如何在 servlet 中以编程方式设置 crossContext 标志?
- microsoft-graph-api - 团队聊天的 Microsoft Graph Webhook 订阅
- javascript - 使用动态表单/网页编辑数据库的内容
- jsp - 未知包,基本错误