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

如何在ECS任务定义JSON文件中用SSM/密钥管理器掩码令牌?

解决AWS FireLens URI中令牌的掩码/动态注入问题

核心问题

ECS任务定义的FireLens日志驱动配置里,options中的URI字段不支持直接解析SSM参数或Secrets Manager密钥,直接替换成ARN或变量名会被当作字符串处理,导致无法正确获取令牌值。

可行解决方案

方案1:容器环境变量 + FireLens环境变量替换

这是最直接的运行时动态注入方式:

  1. 在任务定义的secrets中,将SSM参数映射为容器环境变量
  2. 开启FireLens的环境变量解析功能
  3. 在URI中使用环境变量占位符

修改后的任务定义示例:

"logConfiguration": {
  "logDriver": "awsfirelens",
  "options": {
    "Name": "Http",
    "Host": "listener-eu.logz.io",
    "URI": "/?token=${LOGZ_TOKEN}&type=fargate",
    "Port": "8071",
    "tls": "on",
    "tls.verify": "off",
    "Format": "json_lines"
  },
  "enableEnvironmentVariables": true
},
"secrets": [
  {
    "name": "LOGZ_TOKEN",
    "valueFrom": "arn:aws:ssm:eu-west-1:09862423065486:parameter/strapi/logz_token"
  }
]
  • 关键配置:enableEnvironmentVariables: true 告诉FireLens解析URI中的环境变量
  • 确保ECS任务执行角色有访问该SSM参数的权限(添加ssm:GetParameter权限)

方案2:部署时静态注入(通过基础设施即代码工具)

如果不需要运行时动态更新令牌,可以在部署任务定义时,从SSM拉取令牌值并直接注入URI:

  • CloudFormation:使用Fn::GetParameter函数获取参数值
LogConfiguration:
  LogDriver: awsfirelens
  Options:
    Name: Http
    Host: listener-eu.logz.io
    URI: !Sub "/?token=${LogzToken}&type=fargate"
    Port: "8071"
    tls: "on"
    tls.verify: "off"
    Format: json_lines
Parameters:
  LogzToken:
    Type: AWS::SSM::Parameter::Value<String>
    Default: /strapi/logz_token
  • Terraform:使用aws_ssm_parameter数据源拉取值,再通过插值注入
data "aws_ssm_parameter" "logz_token" {
  name = "/strapi/logz_token"
}

resource "aws_ecs_task_definition" "strapi" {
  # 其他配置...
  container_definitions = jsonencode([
    {
      # 其他容器配置...
      logConfiguration = {
        logDriver = "awsfirelens"
        options = {
          Name           = "Http"
          Host           = "listener-eu.logz.io"
          URI            = "/?token=${data.aws_ssm_parameter.logz_token.value}&type=fargate"
          Port           = "8071"
          tls            = "on"
          tls.verify     = "off"
          Format         = "json_lines"
        }
      }
    }
  ])
}

方案3:使用FireLens自定义配置文件(进阶)

如果需要更复杂的逻辑,可以挂载包含令牌的配置文件到容器,FireLens读取该文件中的配置。但这种方式需要额外的容器初始化步骤,适合复杂场景。

注意事项

  • 确保ECS任务执行角色拥有ssm:GetParameter(或secretsmanager:GetSecretValue,如果用Secrets Manager)的权限
  • FireLens的环境变量替换功能需要Amazon ECS容器代理版本1.45.0或更高
  • 如果使用Secrets Manager,只需要将valueFrom替换为Secrets Manager的ARN即可,逻辑和SSM一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:04:54