我想创建一个只有根帐户才能拥有完全访问权限的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"}
}
这是显式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用户始终对所有资源都具有明确的“允许所有操作”,因此实际的Allow由root用户的基于身份的权限提供,因此root用户将有权访问该存储桶。
之所以可行,是因为您帐户中使用的呼叫者身份始终同时具有多个主体,IAM正在评估它们的策略声明:
arn:aws:iam::<your-account-number>:root
在明确的情况下,Allow
如果您仅Principal
在策略语句中的规则中使用根帐户主体,则该帐户中的任何用户都将匹配允许并被授予访问权限,因为该帐户主体始终是用户主体列表的一部分在该帐户中。
但是,对于Deny
带有的NotPrincipal
,情况有所不同。在此,的列表NotPrincipal
必须将呼叫者身份的所有主体列入白名单,这样才能被拒绝。
这个事实在AWS文档中对NotPrincipal
以下方面有所启发:https : //docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html
当将NotPrincipal与Deny一起使用时,还必须指定未拒绝的委托人的帐户ARN。否则,该策略可能会拒绝访问包含主体的整个帐户。根据您包含在策略中的服务,AWS可能会先验证帐户,然后再验证用户。如果正在评估一个假设角色的用户(正在使用某个角色的人),则AWS可能首先验证该帐户,然后验证该角色,然后再验证该假设角色的用户。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句