amazon-web-services - 如何使用 IAM 策略 AWS 仅向 S3 存储桶的根账户用户授予访问权限?
问题描述
我想创建一个只有 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"}
}
解决方案
这是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"
]
}
]
}
这将明确拒绝所有不是(并且不仅是)根账户用户的委托人,包括 IAM 用户、代入角色会话和该账户中的联合用户。而且由于根用户始终对所有资源的所有操作都有明确的允许,因此根用户的基于身份的权限会给出实际的允许,因此根用户将有权访问该存储桶。
这样做的原因是在您的账户中工作的调用者身份始终同时具有多个委托人,IAM 正在评估这些委托人以获取策略声明:
- 账户负责人
arn:aws:iam::<your-account-number>:root
- 用户、代入角色或联合用户主体
在显式的情况下,如果您仅在策略语句Allow
的规则中使用了 root 帐户主体,则该帐户中的任何用户都将匹配允许并被授予访问权限,因为帐户主体始终是用户主体列表的一部分在那个帐户中。Principal
但是,在 aDeny
和 a的情况下NotPrincipal
,情况有些不同。在这里,NotPrincipal
s 的列表必须将调用者身份的所有主体列入白名单,以免被拒绝。
这一事实在 AWS 文档中有所体现NotPrincipal
:https ://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html
当您将 NotPrincipal 与 Deny 结合使用时,您还必须指定未被拒绝的委托人的账户 ARN。否则,该策略可能会拒绝对包含该委托人的整个账户的访问。根据您在策略中包含的服务,AWS 可能会先验证账户,然后再验证用户。如果正在评估假定角色用户(正在使用角色的人),AWS 可能会先验证账户,然后是角色,然后是假定角色用户。
推荐阅读
- javascript - 提示在输入中输入名称
- node.js - 由于我自己不知道的原因,似乎无法让 res.cookie 设置 cookie,为什么会这样?
- nginx - 建立相对于新路径的链接
- angular-dart - 如何创建自定义列表组件,允许子格式通过 AngularDart 中的循环变量传递?
- android - 如何将 Android ListView 的单元格高度设置为单元格宽度的一半?
- labview - 使我的 VI 作为子 VI 工作时遇到问题
- edmx - 在 Visual Studio 2019 中生成 EDMX 支持文件
- python - 如何使用 Python 将 FFT(快速傅里叶变换)转换为极坐标变换?
- django - 从 aws ELB hostcheck 获取 400 以在 awsvpc 网络模式下与 aws ECS 中的 django ALLOWED_HOSTS 一起使用?
- vue.js - 为什么 vue-signature-pad 不能在模态中工作?