Kinesis Firehose 拒绝 Lambda.InvokeAccess

问题描述 投票:0回答:4

我正在尝试使用 Firehose 传输流设置 Lambda 转换。我为 Firehose 定义了一个 IAM 角色,其中包括以下策略文档:

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

我还授予 sts:AssumeRole 从 Firehose 访问 Lambda 角色的权限。

理论上,这应该授予我的 Firehose 对指定 lambda ARN 的“调用”访问权限。但转换失败了

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

并且从 Lambda 控制台看不到任何函数调用。我的 IAM 组件配置正确吗?还是这里还有其他问题?

aws-lambda amazon-kinesis amazon-iam amazon-kinesis-firehose
4个回答
17
投票

这个说法对我有用。请注意资源末尾的

:*

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

3
投票

在我的 Firehose 的处理配置中的其他地方,我提供了一个角色来执行没有足够权限的 lambda。通过删除

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

从ProcessingConfiguration配置集中,lambda能够使用适当的角色/策略成功执行。


0
投票

创建新流时,kinesis 流会创建默认的 IAM 策略来触发 lambda?

我能够测试从 Kinesis 流向 lambda 发送数据。

我的政策如下,

{ “席德”:“”, "效果": "允许", “行动”: [ “lambda:调用函数”, “lambda:获取函数配置” ], “资源”:“lambda-arn” }, { “席德”:“”, "效果": "允许", “行动”: [ “日志:PutLogEvents” ], “资源”:[ “*” ] }, { “席德”:“”, "效果": "允许", “行动”: [ “运动:描述流”, “运动:GetShardIterator”, “运动:获取记录” ], “资源”:“kinesis-arn” },


0
投票

我感觉 whileloop 的答案是正确的,尽管就我而言,我对交付流的 IAM 策略进行了列出的更改,但它没有解决访问被拒绝的问题。然而,我一时兴起创建了 Lambda 函数的一个版本,并将 Firehose 传输流配置为指向该特定版本(即

1
)而不是
$LATEST
,并且 THAT 解决了我的错误。所以我不确定是否需要其中之一或两者,但我想提供我的经验,以防帮助其他人解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.