如何使AWS管理员无法访问非管理员用户设置的机密?

时间:2018-07-30 10:11:52

标签: amazon-web-services aws-secrets-manager

我在 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": "*"
 }

但这给AccessDeniedExceptionUser does not have permission to specify explicit deny作为用户app-admin-user不是AWS管理员。

我将这份政策文件附在我创建的秘密上。

除了使用 AWS Secrets Manager 解决此问题外,请提出是否还有其他替代解决方案。

1 个答案:

答案 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命令。