AWS lambda和跨帐户角色的问题



我需要担任跨帐户角色,才能访问以登录AWS的Elasticsearch域。这是我所做的:

首先,我在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

我已经尝试了其他问题在其他问题中提出的一切,我还搜索了问题,但我找不到该分辨率。我在这里做错了什么?

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

这将需要创建两个角色 -

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

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

  1. 在第二部分中,只需要添加loggeraccesstoes角色的信任关系。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT2:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

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

最新更新