amazon-web-services - 放置存储桶策略时访问被拒绝
问题描述
我正在尝试使用以下规则将存储桶策略放在 S3 存储桶上。这样做时我收到错误访问被拒绝。
{
"Sid": "Deny bucket/policy delete",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:PutBucketPolicy"
],
"Resource": "arn:aws:s3:::mybucket",
"Condition": {
"ArnNotEquals": {
"aws:PrincipalArn": "arn:aws:iam::<account-id>:role/role_name"
}
}
}
我可以将相同的规则放在账户中的其他存储桶上,因此可以确认 IAM 角色具有权限。
我可以在此存储桶上放置其他规则,因此可以确认也有权在此存储桶上放置策略。我也可以删除存储桶策略。成功的规则之一如下:
{
"Sid": "Deny http access",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
成功的规则适用于 bucket/*
失败的规则在存储桶上。
如果 IAM 角色不限制其他可能是什么问题?不知道我错过了什么。请建议。
ACL 截图:
解决方案
我将首先提到您正在添加一个“危险的”存储桶策略,如果您弄错了,您将只能通过使用 root 登录来删除它。这是因为如果编码不正确,它可能会拒绝每个人接触存储桶策略。
而不是使用条件,您可能可以使用NotPrincipal
. 请参阅:AWS JSON 策略元素:NotPrincipal
此外,检查Block S3 Public Access的设置,它可以阻止创建存储桶策略。
推荐阅读
- java - Java没有创建文件
- c - 链表在后面插入错误
- r - 使用过滤器命令排除某些值是否适用于 lm 中的 r?
- android-studio - Flutter 应用程序在 Android Studio 上运行时显示空白屏幕
- python - Python:如何编写包装器以使所有变量都在函数全局变量中进行声明?
- java - 使用堆栈(LinkedList)在java中实现表达式树如下,但它有错误
- c++ - shared_ptr 的未知行为
- php - 如何将 PhpCsFixer 限制为暂存文件?
- postgresql - AWS RDS 上 PostgreSQL 中的行级安全性 (RLS) 不起作用
- sql - 在 SQL 中计算每个客户的先前事务数(ER 到 DW)