AWS Lambda和跨账户角色存在问题

时间:2019-02-14 20:28:25

标签: amazon-web-services aws-lambda

我需要承担交叉帐户角色,才能访问ElasticSearch域以登录AWS。这是我所做的:

首先,我在ACCOUNT1中创建了一个跨帐户角色。角色名称为 LoggerAccessToES ,并且信任关系如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::ACCOUNT1:root",
          "arn:aws:iam::ACCOUNT2:root"
        ]
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

然后,在ACCOUNT2上,我使用以下代码创建了一个Lambda函数来承担上述角色:

        sts_client = boto3.client('sts', region_name=Config.AWS_ES_REGION)
        assumed_role_object=sts_client.assume_role(
            RoleArn="arn:aws:iam::ACCOUNT1:role/LoggerAccessToES",
            RoleSessionName="AssumeLoggerAccessToESSession1"
        )

当我调用lambda(基本上lambda附加到SNS主题)时,出现错误:

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied

我已经尝试过其他人在其他问题中提出的所有建议,并且我也搜索了该问题,但找不到解决方案。我在这里做什么错了?

1 个答案:

答案 0 :(得分:2)

据我了解,您想使用帐户2中的lambda承担帐户1中的角色。

这将需要创建两个角色-

  1. 需要在要附加到Lambda的帐户2中创建第一个角色。此角色需要附加以下权限-
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::ACCOUNT1:role/LoggerAccessToES"
    }
}

以上策略可以添加到您现有的lambda执行角色中。

  1. 第二部分,仅需在下面显示的帐户1中添加Role LoggerAccesstoE的信任关系-
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT2:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

第一个角色策略允许lambda使用AssumeRole。 第二个策略允许帐户1信任帐户2的AssumeRole请求。