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

CloudFormation容器定义从SecretManager指定密钥报错求助

问题描述

我有以下CloudFormation配置,希望从SecretManager中解析密钥:

DefinitionBackend:
  Type: AWS::ECS::TaskDefinition
  DependsOn: TaskPolicy
  Properties:
    ExecutionRoleArn: !GetAtt TaskRole.Arn
    NetworkMode: awsvpc
    RequiresCompatibilities:
      - FARGATE
    Cpu: 1024
    Memory: 5120
    ContainerDefinitions:
      - Name: admin
        Essential: true
        Image: !Sub XXXXXXXXXX.dkr.ecr.${AWS::REGION}.amazonaws.com/some-image:${AWS::StackName}-${ImageTag}
        PortMappings:
          - ContainerPort: 8003
        Command:
          - ....
        Secrets:
          - Name: DATABASE_URL
            ValueFrom: '{{resolve:secretsmanager:Dev:SecretString:DATABASE_URL}}'

密钥名为Dev,其中包含若干KEY:VALUE键值对,例如DATABASE_URL是数据库连接字符串。尝试使用上述配置解析密钥时,出现以下错误:

Resource handler returned message: "Invalid request provided: Create TaskDefinition: The Systems Manager parameter name specified for secret DATABASE_URL is invalid. The parameter name can be up to 2048 characters and include the following letters and symbols: a-zA-Z0-9_.-,

数据库字符串格式如下,之前在环境变量中可正常使用:

"DATABASE_URL":"postgresql://web:PASSWORD@dev.234098234uuoi.eu-central-1.rds.amazonaws.com:5432/database"

请问我是否在密钥获取方式上有误?还是需要将其转换为Base64等其他格式才能用于密钥配置?

解决方案

问题出在ValueFrom的格式上——ECS任务定义的Secrets字段不支持CloudFormation的!resolve函数语法,你需要改用Secret Manager的标准引用格式:

  • 方式一:使用ARN+JSON路径
    替换成你实际的Secret ARN(注意Secret Manager的ARN默认带随机后缀,比如Dev-abc123):

    ValueFrom: arn:aws:secretsmanager:<你的区域>:<你的账号ID>:secret:Dev-<随机后缀>:DATABASE_URL::
    
  • 方式二:使用Secret名称+JSON路径
    如果你的Secret名称无特殊字符,可直接用名称引用:

    ValueFrom: secretsmanager:Dev:DATABASE_URL::
    

另外无需将密钥转换为Base64格式,Secret Manager会直接传递明文值给ECS容器,只要你的任务执行角色(ExecutionRole)拥有访问该Secret的权限即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:15:56