You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非k8s环境Docker Compose部署Falco获取AWS实例元数据报错如何解决

问题原因

jevt.value是Falcosidekick处理事件时的内部JSON对象字段,仅可用于Falcosidekick的配置逻辑中,不能直接写在Falco的规则output字段里。Falco自身的规则解析器不识别该类token,所以抛出格式错误。

解决方案

根据你的部署场景(Docker Compose、无K8s),可以选择以下两种方案实现需求:

方案1:直接在Falco规则输出中注入AWS元数据

通过环境变量把AWS实例元数据传入Falco容器,直接在规则中引用:

  1. 调整docker-compose.yml的Falco服务配置,注入需要的元数据字段:
services:
  falco:
    image: falcosecurity/falco:latest
    # 保留你原有Falco配置(privileged、volume挂载等)
    environment:
      # 适配IMDSv1的元数据获取方式
      - AWS_REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/region)
      - AWS_INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
      # 如使用IMDSv2,替换为以下写法
      # - AWS_REGION=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" | curl -s -H "X-aws-ec2-metadata-token: $(cat -)" http://169.254.169.254/latest/meta-data/placement/region)
  1. 修改Falco规则的output字段,用Falco原生支持的%env()语法引用环境变量:
output: >
  command=%proc.cmdline awsRegion=%env(AWS_REGION) instanceId=%env(AWS_INSTANCE_ID)

重启Falco服务即可生效,不会再出现格式报错。

方案2:在Falcosidekick侧统一追加元数据

如果不需要元数据出现在Falco原生输出,只需要在Falcosidekick转发的下游事件中携带,可以直接在Falcosidekick配置自定义字段,无需修改Falco规则:

  1. 和方案1一致,先在docker-compose.yml中给Falcosidekick服务注入AWS元数据相关的环境变量。
  2. 给Falcosidekick添加启动参数,配置全局自定义字段:
services:
  falcosidekick:
    image: falcosecurity/falcosidekick:latest
    # 保留原有配置
    command: --customfield="awsRegion:${AWS_REGION}" --customfield="instanceId:${AWS_INSTANCE_ID}"

所有经Falcosidekick转发的事件都会自动携带上述自定义字段。

注意事项

  • 确保EC2实例的IMDS服务已开启,容器网络可以访问169.254.169.254的80端口。
  • 所有jevt.开头的字段仅可用于Falcosidekick的内部配置(如输出模板、过滤规则),不可写入Falco规则文件。

内容的提问来源于stack exchange,提问作者Daniele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:15:06