1

我在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来解决此问题之外,请建议是否有任何替代解决方案可用。

4

1 回答 1

1

本文介绍如何通过使用Conditions而不是使用NotPrincipal.

您可以将相同的逻辑应用于secretsmanager,以限制对与用户 ID 模式不匹配的任何 IAM 用户的访问:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "secretsmanager:*",
      "Resource": "*",
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",
            "AIDAEXAMPLEID",
            "111111111111"
          ]
        }
      }
    }
  ]
}

要获取userIdIAM 用户的权限,请运行该aws iam get-user -–user-name USER-NAME命令。

于 2018-08-08T05:11:49.183 回答