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

ECS/Fargate容器化.NET ASP应用DynamoDB会话状态角色认证问题

.NET Framework 容器化迁移DynamoDB会话状态认证故障排查

问题背景

  • 老旧技术栈.NET Framework Web应用迁移至AWS平台,采用容器化部署模式,以小步迭代方式推进平台现代化
  • 第一阶段建设目标为落地基础设施即代码、CI/CD自动化、容灾与高可用能力,技术选型为Terraform驱动的IaC方案搭配ALB负载均衡的容器化架构
  • 上线初期遇到会话状态故障:ASP.NET Web门户部署到ALB后端后会话状态异常,测试默认内存会话+ALB粘性会话方案未达预期,因此选型DynamoDB作为统一会话状态存储
  • 已完成前置配置:
    • 为ECS Task角色配置了目标DynamoDB表的对应读写权限
    • 按照默认规则预先创建完成符合结构要求的DynamoDB会话表

故障现象

站点启动阶段因web.config配置加载失败无法正常对外提供服务,抛出错误信息:

Unable to get IAM security credentials from EC2 Instance Metadata Service.

已完成排查动作

  • 核对AWS SDK for .NET认证链路逻辑:认证提供程序按优先级依次遍历本地AWS Profile/环境变量存储的密钥、ECS Task角色、EC2实例角色(Instance Profile)
  • 遵循生产安全规范不使用明文硬编码密钥,因此未在会话提供程序配置中添加AWSProfile、ProfilePath配置项,当前web.config中会话相关配置段如下:
<sessionState timeout="10" mode="Custom" customProvider="DynamoDBSessionStoreProvider" xdt:Transform="Replace"> 
<providers>
    <add name="DynamoDBSessionStoreProvider"
         type="Amazon.SessionProvider.DynamoDBSessionStateStore"
         Region="ap-southeast-2" />   
</providers> 
</sessionState>
  • 待确认问题:
    • 报错指向EC2实例元数据服务,ECS任务角色与EC2实例角色是否复用同一套元数据服务?
    • 是否故障根因为ECS Windows容器任务无法访问元数据服务,导致无法获取Task角色凭证?
    • 寻求Windows容器场景下ECS角色配合DynamoDBSessionStateStore提供程序的落地经验、同报错的可行解决方案

根因说明

ECS全启动类型(Fargate/EC2)的Windows容器,获取Task角色凭证依赖容器内的Task Metadata Endpoint,和EC2实例元数据服务是两套独立的端点链路。旧版本的Amazon.SessionProvider.DynamoDBSessionStateStore程序集依赖的AWS SDK for .NET版本过低,未内置ECS Task角色的认证检测逻辑,会直接跳过Task元数据端点检测环节,直接请求EC2 IMDS端点,最终触发上述报错。

修复步骤

  1. 升级依赖NuGet包版本
    将项目引用的AWSSDK.Core、AWSSDK.DynamoDBv2、Amazon.SessionProvider.DynamoDBSessionStateStore全部升级到3.7.x以上稳定版本,该版本已原生支持Windows容器下ECS Task角色的自动认证逻辑,无需额外配置即可按优先级读取Task角色凭证。
  2. 校验容器元数据访问配置
    • 确认ECS任务定义未配置ENABLE_TASK_METADATA=false环境变量,该配置默认开启,显式关闭会直接阻断SDK访问Task元数据端点
    • 进入运行中的容器执行如下PowerShell命令,确认元数据端点可正常访问:
      Invoke-RestMethod -Uri "http://169.254.170.2$env:AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
      
      正常返回结果会包含RoleArn、AccessKeyId、SecretAccessKey、Token字段;若请求超时,需检查任务关联的安全组是否放通到169.254.170.2本地链路地址的流量、Windows容器基础镜像是否有入站/出站防火墙规则拦截本地链路请求。
  3. 锁版本场景兜底配置
    若因历史依赖兼容问题无法升级SDK版本,可在web.config的provider配置段显式指定凭证获取模式,强制SDK优先读取容器角色凭证:
    <add name="DynamoDBSessionStoreProvider"
         type="Amazon.SessionProvider.DynamoDBSessionStateStore"
         Region="ap-southeast-2"
         UseEC2Credentials="false"
         UseWebCredentials="true" />
    
  4. 异常排查补充
    配置完成后重启站点若仍有认证报错,可在web.config中开启AWS SDK的内置日志输出,确认SDK的认证链路遍历顺序,排查是否有机器级配置、系统环境变量中残留的旧密钥配置干扰认证优先级判断。

内容的提问来源于stack exchange,提问作者Gavin Connell-Otten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:42:06