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

部署到IIS的.NET Core 5应用访问AWS Secrets Manager报错

解决EC2上IIS部署的.NET Core应用访问AWS Secrets Manager时的凭证错误

问题原因

.NET Core的AWS SDK在EC2环境下会优先尝试从**EC2实例元数据服务(IMDS)**获取IAM角色凭证,当IMDS找不到可用角色时,会按优先级加载其他凭证源(如用户目录下的.aws/credentials、环境变量、配置文件等)。你通过aws configure配置的凭证存储在当前用户目录下,但IIS应用池默认以ApplicationPoolIdentity或其他系统账户运行,无法读取你个人用户目录下的凭证文件,同时EC2实例也没有附加具备Secrets Manager访问权限的IAM角色,因此触发该错误。

本地和控制台应用正常是因为它们以你的个人用户身份运行,能读取到~/.aws/credentials里的凭证。

解决方案

方案1:给EC2实例附加IAM角色(推荐,安全合规)

  • 创建一个IAM角色,添加允许访问目标Secrets Manager密钥的权限策略,示例策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:你的区域:你的账户ID:secret:你的密钥名称-*"
        }
    ]
}
  • 将该IAM角色附加到你的EC2实例上(通过EC2控制台或AWS CLI)
  • 无需修改现有代码,AWS SDK会自动从IMDS获取角色凭证,完成权限验证

方案2:让IIS应用池能读取凭证文件

  • 查看你的IIS应用池使用的运行身份(IIS管理器→应用池→高级设置→标识)
  • 如果使用ApplicationPoolIdentity:
    • 将aws configure生成的.aws目录复制到C:\ProgramData\AWS(机器级凭证目录,所有系统账户均可访问)
    • 或者给ApplicationPoolIdentity账户授予读取你个人用户目录下.aws文件夹的权限
  • 如果使用自定义账户:确保该账户能访问~/.aws/credentials文件

方案3:通过应用配置文件或环境变量指定凭证(不推荐,存在明文风险)

  • 应用配置文件方式:在appsettings.json中添加AWS凭证配置:
{
  "AWS": {
    "AccessKey": "你的AccessKey",
    "SecretKey": "你的SecretKey",
    "Region": "你的区域"
  }
}

修改代码加载配置初始化客户端:

var awsConfig = Configuration.GetSection("AWS").Get<AWSConfig>();
IAmazonSecretsManager client = new AmazonSecretsManagerClient(
    awsConfig.AccessKey, 
    awsConfig.SecretKey, 
    RegionEndpoint.GetBySystemName(awsConfig.Region));
  • 环境变量方式:在EC2实例的系统环境变量中添加AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,设置对应的值后重启IIS服务,SDK会自动读取这些变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:05:29