6

我正在尝试使用 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 组件配置是否正确?或者这里可能出了什么问题?

4

3 回答 3

13

这句话对我有用。请注意:*资源末尾的 。

{
    "Sid": "",
    "Effect": "Allow",
    "Action": [
        "lambda:InvokeFunction",
        "lambda:GetFunctionConfiguration"
    ],
    "Resource": "arn:aws:lambda:us-west-2:11111111111:function:transform-lambda:*"
}
于 2018-03-28T01:14:19.280 回答
3

在我的 Firehose 的 ProcessingConfiguration 的其他地方,我提供了一个角色来执行没有足够权限的 lambda。通过去除

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

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

于 2018-03-19T21:48:16.363 回答
0

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

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

我的政策如下,

{“Sid”:“”,“效果”:“允许”,“动作”:[“lambda:InvokeFunction”,“lambda:GetFunctionConfiguration”],“资源”:“lambda-arn”},{“Sid”: “”,“效果”:“允许”,“操作”:[“日志:PutLogEvents”],“资源”:[“*”]},{“Sid”:“”,“效果”:“允许”, “动作”:[“kinesis:DescribeStream”,“kinesis:GetShardIterator”,“kinesis:GetRecords”],“资源”:“kinesis-arn”},

于 2018-03-11T02:15:26.420 回答