Lambda.InvokeAccessDenied в Kinesis Firehose

Я пытаюсь настроить лямбда-преобразования с помощью потока доставки Firehose. У меня есть роль IAM, определенная для Firehose, которая включает следующий документ политики:

{
    "Statement": {
        "Action": [
            "lambda:InvokeFunction",
            "lambda:GetFunctionConfiguration"
        ],
        "Resource": [<Arn>, ...],
        "Effect": "Allow"
    }
}

Я также предоставил sts: AssumeRole доступ к роли Lambda из Firehose.

Теоретически это должно предоставить моему Firehose "Invoke" доступ к указанным лямбда-адресам. Но трансформации терпят неудачу

{
  "errorCode":"Lambda.InvokeAccessDenied",
  "errorMessage":"Access was denied. Ensure that the access policy allows access to the Lambda function."
}

и никакие вызовы функций не видны из консоли Lambda. Правильно ли настроены мои компоненты IAM? Или здесь что-то еще не так?


person Nathan Brown    schedule 08.03.2018    source источник


Ответы (3)


Это утверждение работает для меня. Обратите внимание на :* в конце ресурса.

{
    "Sid": "",
    "Effect": "Allow",
    "Action": [
        "lambda:InvokeFunction",
        "lambda:GetFunctionConfiguration"
    ],
    "Resource": "arn:aws:lambda:us-west-2:11111111111:function:transform-lambda:*"
}
person whileloop    schedule 28.03.2018

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

- ParameterName: RoleArn
  ParameterValue:
    Fn::GetAtt: [<Role>, Arn]

из набора конфигурации ProcessingConfiguration лямбда-функция смогла успешно выполнить с использованием соответствующей роли / политики.

person Nathan Brown    schedule 19.03.2018
comment
Блок iam:passRole можно добавить к роли Kinesis вместо удаления конфигурации ProcessingConfiguration RoleArn. - person naaman; 21.06.2021

При создании нового потока поток kinesis создает политику IAM по умолчанию для запуска лямбда?

Мне удалось протестировать отправку данных из потока Kinesis в лямбда.

Политика, которая у меня была, такая, как показано ниже,

{"Sid": "", "Effect": "Allow", "Action": ["lambda: InvokeFunction", "lambda: GetFunctionConfiguration"], "Resource": "lambda-arn"}, {"Sid": "", "Эффект": "Разрешить", "Действие": ["журналы: PutLogEvents"], "Ресурс": ["*"]}, {"Сид": "", "Эффект": "Разрешить", «Действие»: [«kinesis: DescribeStream», «kinesis: GetShardIterator», «kinesis: GetRecords»], «Resource»: «kinesis-arn»},

person Gowtham Chand    schedule 11.03.2018