ECS Fargate启用readonlyrootFileSystem遇阻,Datadog代理配置难题求助
ECS Fargate启用readonlyrootFileSystem的合规性修复与Datadog代理适配方案
一、主服务Security Hub合规性问题排查
- 先检查任务定义里所有容器的
readonlyrootFileSystem是否都设为true:Security Hub的合规检查是针对任务里每个容器的,不是只看主服务容器。要是有侧车容器(比如日志、监控)没开这个配置,直接就会标记不合规。 - 验证卷挂载的正确性:确保tmp/data卷用的是
tmpfs类型(Fargate支持),别用绑定挂载,避免权限踩坑。给你个任务定义片段参考:"volumes": [ { "name": "tmp-volume", "tmpfs": { "size": 2048 } }, { "name": "data-volume", "tmpfs": { "size": 4096 } } ], "containerDefinitions": [ { "name": "main-service", "readonlyRootFilesystem": true, "mountPoints": [ { "sourceVolume": "tmp-volume", "containerPath": "/tmp", "readOnly": false }, { "sourceVolume": "data-volume", "containerPath": "/app/data", "readOnly": false } ] } ] - 查Security Hub的具体失败原因:进Security Hub的合规结果页面,看清楚到底是哪项规则没通过,比如是不是要求卷必须加密(如果有对应规则的话),针对性调整。
二、Datadog代理只读文件系统适配
Datadog代理要写/etc/datadog-agent/这些目录,但直接挂卷会覆盖原有配置文件,别整整个/etc,只挂它需要写的子目录就行:
- 先搞清楚Datadog代理需要写入的具体路径:一般是
/etc/datadog-agent/conf.d(自定义配置)、/var/log/datadog(日志)、/var/run/datadog(套接字文件)这几个。 - 在任务定义里给这些路径单独挂tmpfs卷:
"volumes": [ { "name": "dd-conf", "tmpfs": { "size": 1024 } }, { "name": "dd-logs", "tmpfs": { "size": 1024 } }, { "name": "dd-run", "tmpfs": { "size": 512 } } ], "containerDefinitions": [ { "name": "datadog-agent", "readonlyRootFilesystem": true, "mountPoints": [ { "sourceVolume": "dd-conf", "containerPath": "/etc/datadog-agent/conf.d", "readOnly": false }, { "sourceVolume": "dd-logs", "containerPath": "/var/log/datadog", "readOnly": false }, { "sourceVolume": "dd-run", "containerPath": "/var/run/datadog", "readOnly": false } ] // 保留原有的环境变量、端口映射等配置 } ] - 自定义配置别直接挂卷:要是需要改Datadog配置,用任务定义的
environment变量传,或者用Datadog的自动发现,别直接覆盖conf.d目录,不然默认配置没了肯定启动失败。
三、SSM无法进容器的解决
开了只读根文件系统后,SSM会话管理器要写容器的临时目录,解决办法很简单:
- 确保容器挂载了
/tmp卷(就像主服务配置里那样),SSM代理要在/tmp下创建会话相关文件。 - 要是用ECS Exec的话,确认配置里允许使用临时卷,或者给SSM的侧车容器也挂好必要的临时目录。
内容的提问来源于stack exchange,提问作者bruvio
相关产品推荐
相关产品推荐

