为单个Cognito用户分配对在AWS的Secret Manager上创建的机密的访问权限

时间:2018-12-18 16:14:20

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

我已经在AWS的Secrets Manager上创建了一个机密。我有一个具有Cognito身份验证的python服务,我想分配给特定用户权限以获取此机密。我创建了以下策略,以允许用户获取机密的价值。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:test_secret*"
        }
    ]
}

然后,我已将此策略分配给我的认知身份池的Authenticated角色。现在,该池中的每个用户都有权获取此机密的值。但是我需要将此权限分配给单个用户,而不是所有用户。有什么办法吗?

2 个答案:

答案 0 :(得分:1)

您可以将此用户放在一个组中,并让该组承担IAM角色。 然后将权限附加到IAM角色。

Role-Based Access Control

答案 1 :(得分:0)

您可以以仅允许他们访问他们创建的资源的权限的方式编写经过身份验证的用户IAM策略。例如:

  1. 使用从CognitoIdentity获得的ID令牌实例化AWS Secretsmanager客户端
  2. 指定经过身份验证的策略,如下所示:
{
    "PolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "",
                "Effect": "Allow",
                "Action": [
                    "secretsmanager:UpdateSecret",
                    "secretsmanager:PutSecretValue",
                    "secretsmanager:DescribeSecret",
                    "secretsmanager:DeleteSecret"
                ],
                "Resource": "*",
                "Condition": {
                    "ForAllValues:StringEquals": {
                        "aws:TagKeys": [
                            "Sub",
                            "Service"
                        ]
                    },
                    "StringEquals": {
                        "secretsmanager:ResourceTag/Service": "MYSERVICE",
                        "secretsmanager:ResourceTag/Sub": "${cognito-identity.amazonaws.com:sub}"
                    }
                }
            },
            {
                "Sid": "",
                "Effect": "Allow",
                "Action": [
                    "secretsmanager:TagResource",
                    "secretsmanager:CreateSecret"
                ],
                "Resource": "*",
                "Condition": {
                    "ForAllValues:StringEquals": {
                        "aws:TagKeys": [
                            "Sub",
                            "Service"
                        ]
                    },
                    "StringEquals": {
                        "aws:RequestTag/Service": "MYSERVICE",
                        "aws:RequestTag/Sub": "${cognito-identity.amazonaws.com:sub}"
                    }
                }
            }
        ]
    }
}

3)创建机密时,请确保在CreateSecret请求中应用映射到您的用户Identitypoolid和服务名称的标签。 (否则,您的请求将失败。)

您的用户现在将只能访问他们创建的机密。这是安全的,因为将根据AWS开发工具包会话凭证对“ $ {cognito-identity.amazonaws.com:sub}”值进行插值。即您其他用户的客户端将在其会话凭据中嵌入不同的“子”值,因此他们将无法访问未创建的机密。