amazon-web-services - 如何使 aws 管理员无法访问非管理员用户设置的机密?
问题描述
我在AWS有一个要求。非管理员用户需要在AWS Secrets Manager中写入某些机密。AWS管理员不应访问这些机密。
在这里,AWS 管理员是对用户附加“AdministratorAccess”策略的人,而非管理员是由管理员创建的用户,并且仅授予对某些服务的有限访问权限。
我想将我的应用程序的“用户名和密码”存储在机密管理器中。AWS Lambda也将使用相同的凭证。
我可以写以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:*",
"Principal": {"AWS": "arn:aws:iam::123456789011:user/app-admin-user"},
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "secretsmanager:*",
"Principal": {"AWS": "arn:aws:iam::123456789011:user/aws-admin-user"},
"Resource": "*"
}
]
}
但此政策仅拒绝单个用户。我想在单一策略中拒绝账户中的所有 AWS 管理员。
而不是Principal
我尝试NotPrincipal
只写app-admin-user
如下:
{
"Effect": "Deny",
"Action": "secretsmanager:*",
"NotPrincipal": {"AWS": "arn:aws:iam::123456789011:user/app-admin-user"},
"Resource": "*"
}
但这给出了一个AccessDeniedException
说法User does not have permission to specify explicit deny
,因为用户app-admin-user
不是 AWS 管理员。
我附上这个政策文件和我正在创建的秘密。
除了使用AWS Secrets Manager来解决此问题之外,请建议是否有任何替代解决方案可用。
解决方案
本文介绍如何通过使用Conditions
而不是使用NotPrincipal
.
您可以将相同的逻辑应用于secretsmanager
,以限制对与用户 ID 模式不匹配的任何 IAM 用户的访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "secretsmanager:*",
"Resource": "*",
"Condition": {
"StringNotLike": {
"aws:userId": [
"AROAEXAMPLEID:*",
"AIDAEXAMPLEID",
"111111111111"
]
}
}
}
]
}
要获取userId
IAM 用户的权限,请运行该aws iam get-user -–user-name USER-NAME
命令。
推荐阅读
- opencv - OpenCV 即库问题
- javascript - 无法将数据发送到谷歌分析
- regex - 按索引提取值
- ruby-on-rails - 显示用户在 rails 中注册的数据
- convertapi - convertApi 不包括 html jpg 转换中的字体
- python - 就地自定义对象使用 __getitem__ python 3.5 与 python 3.6 解包不同的行为
- numbers - 实数自然吗?
- ionic-framework - Ionic 3- 向下滚动时隐藏导航栏和选项卡,向上滚动时显示
- angular - Angular2如何做highchart tootip格式化程序 - 附加值
- javascript - 如何实现代码镜像以在没有 CTRL+SPACE 的情况下显示提示