Лямбда-функция не авторизована для выполнения sts: AssumeRole - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть лямбда-функция в учетной записи A, пытающаяся получить доступ к ресурсам из учетной записи B. Создана новая лямбда-функция с базовым c выполнением с доступом к загрузке журналов в облачный мониторинг.

Вот мой код функции в Python 3.7:

import boto3

allProfiles = ['account2']

def lambda_handler(event, context):

    sts_connection = boto3.client('sts')
    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::2222222222:role/role-on-source-account",
        RoleSessionName="account2"
    )

    for profiles in allProfiles:
        print("\nusing profile %s" % profiles)
        newMethod..
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Также изменена политика доверия предполагаемой роли в учетной записи B, как указано в документации: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-assume-iam-role/

ОШИБКА : Произошла ошибка (AccessDenied) при вызове операции AssumeRole: Пользователь: arn: aws: sts :: 11111111: предполагаемая роль / лямбда-роль / лямбда-функция не авторизована для выполнения: sts: AssumeRole для ресурса: arn : aws: iam :: 2222222222: роль / роль-на-источнике-учетной записи "

Примечание: я могу запустить это локально, но не в лямбде.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Создана новая лямбда-роль с выполнением basi c с доступом к загрузке журналов в облачные часы

Недостаточно роли исполнения Basi c для лямбды. Вам необходимо явно разрешить вашу функцию от до AssumeRole. Следующее утверждение в вашей роли выполнения должно помочь:

{
  "Effect": "Allow",
  "Action": [
    "sts:AssumeRole"
  ],
  "Resource": [
    "arn:aws:iam::2222222222:role/role-on-source-account"
  ]
}
1 голос
/ 14 апреля 2020

Хорошо, так что у нас есть:

  • Ваша (ваша доверенная учетная запись) учетная записьA должна принять на себя определенную c роль в учетной записиB учетной записиB
  • Роль в AccountB (учетная запись , доверяющая ), к которой ваша лямбда будет обращаться, скажем, к корзине.

  • AccountBBucket

Вы упомянули, что у вас было казнь Баси c для вашей лямбды, и одного этого было бы недостаточно ...

Решение:

  1. Создайте роль «UpdateBucket»: вам необходимо установить sh доверие между AccountB (идентификационный номер учетной записи: 999) и AccountA.
    Создайте роль IAM и определите AccountA как доверенную сущность, укажите политику разрешений это позволяет доверенным пользователям обновлять AccountB_resource (AccountBBucket).
    Мы сейчас в Аккаунте A

    
    
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "s3:ListAllMyBuckets",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket",
            "s3:GetBucketLocation"
           ],
          "Resource": "arn:aws:s3:::AccountBBucket"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"
          ],
          "Resource": "arn:aws:s3:::AccountBBucket/*"
        }
      ]
    }
    
    
  2. Предоставить доступ:
    Теперь мы будем использовать созданную ранее роль (роль UpdateBucket)
    Это необходимо для быть добавлены к вашей учетной записи B разрешения
    Теперь мы находимся в AccountB сейчас: <pre> { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::999:role/UpdateBucket" } } Обратите внимание, что 999 выше это идентификатор учетной записи AccountB, а UpdateBucket - это роль, которая была создана в AccountA *
    Это создаст доверие вам нужно, чтобы ваша лямбда получила доступ к корзине учетной записи B

Более подробная информация здесь: Делегированный доступ через AWS Учетные записи с использованием ролей IAM

...