我正在尝试使用 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 组件配置正确吗?还是这里还有其他问题?
这个说法对我有用。请注意资源末尾的
:*
。
{
"Sid": "",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"lambda:GetFunctionConfiguration"
],
"Resource": "arn:aws:lambda:us-west-2:11111111111:function:transform-lambda:*"
}
在我的 Firehose 的处理配置中的其他地方,我提供了一个角色来执行没有足够权限的 lambda。通过删除
- ParameterName: RoleArn
ParameterValue:
Fn::GetAtt: [<Role>, Arn]
从ProcessingConfiguration配置集中,lambda能够使用适当的角色/策略成功执行。
创建新流时,kinesis 流会创建默认的 IAM 策略来触发 lambda?
我能够测试从 Kinesis 流向 lambda 发送数据。
我的政策如下,
{ “席德”:“”, "效果": "允许", “行动”: [ “lambda:调用函数”, “lambda:获取函数配置” ], “资源”:“lambda-arn” }, { “席德”:“”, "效果": "允许", “行动”: [ “日志:PutLogEvents” ], “资源”:[ “*” ] }, { “席德”:“”, "效果": "允许", “行动”: [ “运动:描述流”, “运动:GetShardIterator”, “运动:获取记录” ], “资源”:“kinesis-arn” },
我感觉 whileloop 的答案是正确的,尽管就我而言,我对交付流的 IAM 策略进行了列出的更改,但它没有解决访问被拒绝的问题。然而,我一时兴起创建了 Lambda 函数的一个版本,并将 Firehose 传输流配置为指向该特定版本(即
1
)而不是 $LATEST
,并且 THAT 解决了我的错误。所以我不确定是否需要其中之一或两者,但我想提供我的经验,以防帮助其他人解决问题。