【问题标题】:Allow lambda to assume role of an IAM Role that was created from identity pool?允许 lambda 承担从身份池创建的 IAM 角色的角色?
【发布时间】:2019-07-09 06:30:54
【问题描述】:

我正在尝试使用 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 的角色。

【问题讨论】:

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


    【解决方案1】:

    就像@franziga 所说,将您的信任策略(PermitAssumeRole 语句)与策略的其余部分(即权限策略)分开。此外,如果 Lambda 需要担任该角色,您的信任政策也需要像

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

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

    【讨论】:

    • 只有将 lambda 执行角色的完整 arn 添加到“Principal”,例如,我才能使它工作。 “主体”:{“AWS”:“arn:aws:iam::123456789:role/my-app-lambdaRole”,“服务”:“lambda.amazonaws.com”}。我似乎也无法让它在 arn 中使用任何通配符。对我可能遗漏的其他作品有什么想法吗?
    • 上述信任策略是我们与许多 lambda 函数一起使用的有效策略。我认为Principal 中不需要AWS 描述符。如果你消除它会发生什么?您可以粘贴您的 IAM 角色吗?
    • 如果我消除了“调用 AssumeRole 操作时发生错误 (AccessDenied):访问被拒绝:ClientError”。我正在调用 sts 服务假设角色,如下所示:aws.amazon.com/premiumsupport/knowledge-center/…
    【解决方案2】:

    信任策略应该与权限策略分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-08
      • 2016-12-22
      • 2018-01-15
      • 1970-01-01
      • 2021-10-10
      • 2020-11-08
      • 1970-01-01
      相关资源
      最近更新 更多