是否有 AWS CDK 代码可用于为 Kinesis firehose 传输流启用 WAF 日志记录?

问题描述

任何人都有 Python CDK 代码来启用 WAF 中的 Amazon Kinesis Data Firehose 传输流日志记录?任何语言的 CDK 代码都适合我的参考,因为我在官方 python CDK/api 文档或任何博客中都没有找到任何合适的语法或示例来启用。

解决方法

从现有的文档(从 CDK 版本 1.101 和扩展 Cloudformation 开始)似乎没有办法开箱即用。

但是有可以与 boto3 一起使用的 API 调用,例如:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/wafv2.html#WAFV2.Client.put_logging_configuration

调用该调用所需的条件:

  1. Web ACL 的ResourceArn
  2. 应接收日志的 Kinesis Data Firehose ARN 列表

这意味着您可以尝试使用自定义资源并实现此行为。鉴于您之前在堆栈中创建了 Firehose 和 web ACL,使用它来创建自定义资源: https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.custom_resources/README.html

        crd_provider = custom_resources.Provider(
            self,"Custom resource provider",on_event_handler=on_event_handler,log_retention=aws_logs.RetentionDays.ONE_DAY
        )

        custom_resource = core.CustomResource(
            self,"WAF logging configurator",service_token=crd_provider.service_token,properties={
                "ResourceArn": waf_rule.attr_arn,"FirehoseARN": firehose.attr_arn
            }
        )

on_event_handler 在本例中是您需要实现的 lambda 函数。

应该可以通过使用 AwsSdkCall 来进一步简化:

on_event_handler = AwsSdkCall(
        action='PutLoggingConfiguration',service='waf',parameters={
            'ResourceArn': waf_rule.attr_arn,'LogDestinationConfigs': [
                firehose.attr_arn,]
    )

这样您就无需编写自己的 lambda。但是您的用例可能会发生变化,您可能希望向此日志记录配置器添加一些额外的功能,因此我将展示这两种方法。

免责声明:我没有测试过这个精确代码,而是我为解决类似的绕过 Cloudformation 覆盖率差距的问题而编写的类似代码的摘录。