[英]How to grant access only to the Root Account User for an S3 bucket with IAM Policy AWS?
我想创建一个只有 Root 帐户才能拥有完全访问权限的 s3 存储桶策略,我该怎么做?
例子:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow full access for root account user",
"Effect": "Allow",
"Principal": {
"AWS": "root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::ih-deploy-bucket/*",
"arn:aws:s3:::ih-deploy-bucket"
]
}
]
}
或者添加一个条件像
"Condition": {
"StringEquals" : {"aws:username" : "rootUser"}
}
这是使用NotPrincipal
的显式Deny
的极少数(如果不是唯一的)用例NotPrincipal
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::<your-account-number>:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::ih-deploy-bucket/*",
"arn:aws:s3:::ih-deploy-bucket"
]
}
]
}
这将明确拒绝所有不是(且不仅是)根账户用户的委托人,包括该账户中的 IAM 用户、代入角色会话和联合用户。 并且由于 root 用户始终对所有资源的所有操作具有明确的 Allows,实际的 Allow 由 root 用户的基于身份的权限给出,因此 root 用户将有权访问该存储桶。
之所以有效,是因为在您的账户中工作的调用者身份始终同时具有多个委托人,IAM 正在评估这些委托人以获取策略声明:
arn:aws:iam::<your-account-number>:root
在显式Allow
的情况下,如果您仅在策略语句的Principal
规则中使用 root 帐户主体,则该帐户中的任何用户都将匹配允许并获得访问权限,因为帐户主体始终是用户的一部分该帐户中的主体列表。
但是,在使用NotPrincipal
的Deny
的情况下,情况有点不同。 在这里, NotPrincipal
的列表必须将调用者身份的所有主体列入白名单,以使其不被拒绝。
这个事实在关于NotPrincipal
的 AWS 文档中NotPrincipal
: https : NotPrincipal
当您将 NotPrincipal 与 Deny 结合使用时,您还必须指定未被拒绝的委托人的账户 ARN。 否则,该策略可能会拒绝访问包含主体的整个帐户。 根据您在策略中包含的服务,AWS 可能会先验证账户,然后再验证用户。 如果正在评估代入角色用户(正在使用角色的人),AWS 可能首先验证账户,然后是角色,然后是代入角色用户。
"AWS": "root"
应该改为
"AWS": "arn:aws:iam::<your-account-number>:root"
就像 httpdigest 在这个答案中所说的那样,root 用户总是明确允许对所有资源的所有操作。
所以我阻止了所有其他状态不佳的用户的所有权限。 并且 root 用户始终可以访问。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Block all user not in condition, but the root has permission",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::bucket"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "175.222.100.192"
},
"StringNotEquals": {
"aws:username": "user1"
}
}
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.