将数据从kinesis消防软管安全地发送到lambda HTTP端点



我试图创建实时数据摄取clickhouse托管在ec2。我的管道是

Eventbridge -> KinesisFirehose(destination http endpoint) -> lambda(function url) -> clickhouse HTTP endpoint.

在UAT中一切都按预期工作。但是lambda提供的url函数在默认情况下是公共的,这当然会在prod中引起安全问题。有没有办法使到lambda的http端点的消防软管安全,lambda的http端点只能被消防软管调用,并且数据不能离开aws帐户?

p。S:如果有什么方法可以改善这个管道,也请在评论中发表。会有帮助的。

根据问题的评论,这个答案主要是关于为Lambda URL添加身份验证…

我不认为Lambda URL将工作从Firehose调用。原因是,如果您正在使用IAM授权(由于安全需求而隐含),调用它需要客户端对API请求进行签名。Firehose不支持这个

我不确定Firehose的原因,但我认为你可以删除它,然后直接从EventBridge调用Lambda,或者在EventBridge和Lambda之间放置API Gateway。

直接调用Lambda可能更简单,但这样你就失去了使用web API的灵活性。但是安全性很简单,它由IAM角色处理。

API网关不应该更困难,我假设你的Lambda已经处理有效负载(因为这是Lambda函数URL发送的)。它看起来像这样:

EventBridge -> API Gateway -> Lambda

API网关需要IAM或Cognito授权:

  1. IAM是最简单的;EventBridge规则可以直接针对API网关,然后该规则只需要使用适当的IAM角色。
  2. Cognito会更复杂,但这里的想法是设置一个使用client_credential流的用户池客户端。在EventBridge中,你将目标设置为EventBridge API目的地。并使用"OAuth客户端凭证"的授权类型。

你还提到了ClickHouse API,我想研究它会更简单,这取决于你在Lambda中有多少逻辑。看起来它们有一个接口,所以你只需要使用EventBridge API destination"然后发送到那里。您的EC2主机要么需要是可公开访问的,要么您可以通过API网关或其他方式代理请求。

使用AWS Lambda&quot转换源记录有一个技巧。

Eventbridge -> KinesisFirehose(any destination e.g. S3) -> drop
|
+-> lambda("Transform source") -> anything you want

你可以用合适的IAM Role有效地调用Lambda函数,Lambda接收来自Firehose的所有数据。您的lambda应该向所有记录返回Dropped,参见https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html

最新更新