我在 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 解决此问题外,请提出是否还有其他替代解决方案。
答案 0 :(得分:0)
此article描述了如何利用Conditions
而非NotPrincipal
将对S3存储桶的访问限制为特定的IAM角色。
您可以对secretsmanager
应用相同的逻辑,以限制对任何与用户ID模式不匹配的IAM用户的访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "secretsmanager:*",
"Resource": "*",
"Condition": {
"StringNotLike": {
"aws:userId": [
"AROAEXAMPLEID:*",
"AIDAEXAMPLEID",
"111111111111"
]
}
}
}
]
}
要获取IAM用户的userId
,请运行aws iam get-user -–user-name USER-NAME
命令。