Проблема с AWS Lambda и ролями между учетными записями - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно взять на себя роль кросс-аккаунта, чтобы получить доступ к домену 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"
        )

Когда я вызываю лямбду (в основном, лямбда привязана к теме SNS), я получаю ошибку:

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

Я уже перепробовал все, что было предложено другими парнямив других вопросах, и я также погуглил проблему, но я не мог найти решение.Что я тут не так делаю?

1 Ответ

0 голосов
/ 15 февраля 2019

Насколько я понимаю, вы хотите взять на себя роль в учетной записи 1, используя лямбду в учетной записи 2.

Для этого потребуется создать две роли -

  1. Перваяроль должна быть создана в учетной записи 2, которая должна быть привязана к лямбде.К этой роли должно быть приложено следующее разрешение -
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::ACCOUNT1:role/LoggerAccessToES"
    }
}

Указанную выше политику можно добавить к существующей роли выполнения лямбда-выражения.

Во второй части необходимо добавить только доверительные отношения Role LoggerAccesstoEs в Учетную запись 1, показанную ниже -
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT2:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

Первая политика ролей позволяет лямбде использовать AssumeRole.Вторая политика позволяет учетной записи 1 доверять запросу AssumeRole от учетной записи 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...