Leo*_*nha 4 amazon-s3 amazon-web-services amazon-iam
我想创建一个只有根帐户才能拥有完全访问权限的 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"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
或者添加一个类似的条件
"Condition": {
"StringEquals" : {"aws:username" : "rootUser"}
}
Run Code Online (Sandbox Code Playgroud)
Deny这是带有 a的显式的极少数(如果不是唯一)用例之一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"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
这将显式拒绝所有不是(且不仅仅是)根账户用户的委托人,包括 IAM 用户、代入角色会话和该账户中的联合用户。由于 root 用户始终对所有资源的所有操作具有显式允许,因此实际的允许是由 root 用户基于身份的权限给出的,因此 root 用户将有权访问该存储桶。
这样做的原因是,在您的账户中工作的调用者身份始终同时具有多个委托人,IAM 正在对这些委托人进行评估以获得策略声明:
arn:aws:iam::<your-account-number>:root在显式情况下,如果您仅在策略声明的规则中Allow使用根帐户主体,则该帐户中的任何用户都将匹配允许并将获得访问权限,因为帐户主体始终是用户主体列表的一部分在该帐户中。Principal
Deny然而,在 a与 a的情况下NotPrincipal,情况有点不同。NotPrincipal这里, s列表必须将调用者身份的所有主体列入白名单,才不会被拒绝。
这一事实在 AWS 文档中有所体现NotPrincipal:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html
当您将 NotPrincipal 与 Deny 结合使用时,您还必须指定未拒绝委托人的账户 ARN。否则,策略可能会拒绝访问包含主体的整个帐户。根据您在策略中包含的服务,AWS 可能会首先验证账户,然后验证用户。如果正在评估假定角色用户(正在使用角色的人),AWS 可能会首先验证账户,然后验证角色,最后验证假定角色用户。
| 归档时间: |
|
| 查看次数: |
4403 次 |
| 最近记录: |