允许lambda承担从身份池创建的IAM角色?

时间:2019-02-15 06:34:08

标签: amazon-web-services aws-lambda amazon-cognito amazon-iam

我正在尝试使用boto3的“ assume_role_with_web_identity”将Amazon Cognito给我的令牌交换为在身份池上定义的角色,但这会给我这个错误:

“ botocore.exceptions.ClientError:调用AssumeRoleWithWebIdentity操作时发生错误(AccessDenied):访问被拒绝”

我一定错过了保单上的某些内容吗?

我已经尝试将lambda的政策更改为此:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogStream"
            ],
            "Resource": [
                "arn:aws:logs:us-west-2:xxx:log-group:/aws/lambda/xxx:*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-west-2:xxx:log-group:/aws/lambda/rxx:*:*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "PermitAssumeRole",
            "Action": [
                "sts:AssumeRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::xxx:role/Auth_Role",
                "arn:aws:iam::xxx:role/Cognito_Unauth_Role"
            ]
        }
    ]
}

我在boto3上的代码:

x = trial.assume_role_with_web_identity(RoleArn="arn:aws:iam::xxx:role/xxx",
                                         RoleSessionName="xx",WebIdentityToken=response['xx']['xx'])

我希望它能够承担我创建的IAM的角色。

2 个答案:

答案 0 :(得分:0)

信任策略应与许可策略分开。

答案 1 :(得分:0)

就像@franziga所说,将您的信任策略(PermitAssumeRole语句)与其余策略(权限策略)分开。同样,如果Lambda需要担任您的角色,那么您的信任政策也必须像

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

此外,如果您希望LambdaCognito authenticatedunauthenticated角色具有相同的访问权限,则必须在角色中为Lambda添加这些权限。据我所知,您不能将一个角色附加到另一个角色。