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

.NET Framework应用SSM客户端无法读取AWS凭证问题问询

解决方案

错误原因说明

  • 默认构造函数抛异常:AWS SDK for .NET 默认凭证查找链路为「环境变量 > Visual Studio AWS Toolkit 凭证存储 > 用户目录下.aws/credentials文件的default配置 > EC2实例元数据服务」,本地开发环境不是EC2实例,当前面所有凭证获取链路失败时,就会抛出无法从EC2元数据获取凭证的异常。
  • 硬编码密钥抛异常:你的凭证中包含aws_session_token字段,说明是临时STS凭证,BasicAWSCredentials仅支持传入永久AccessKey/SecretKey,不会携带SessionToken,因此请求会被AWS判定为无效。

修复方案(无需硬编码/环境变量,自动复用CLI生成的凭证)

该方案直接读取AWS CLI生成的、存放在.aws目录下的凭证,每次CLI刷新凭证后无需修改应用代码即可直接使用。

步骤1:确认依赖

确保项目已安装最新版NuGet包:AWSSDK.SimpleSystemsManagement。

步骤2:修改客户端初始化逻辑

显式指定要加载的凭证Profile名称、对应AWS区域,从本地凭证文件加载凭证后构造客户端,参考代码如下:

// 替换为你AWS CLI实际使用的Profile名,用默认配置填"default",用自定义配置填"MyProfile"
var profileName = "MyProfile";
// 替换为你的Parameter Store实际所在的AWS区域
var region = Amazon.RegionEndpoint.CNNorth1;

// 从本地.aws凭证文件加载指定Profile的凭证
var credentialChain = new Amazon.Runtime.CredentialManagement.CredentialProfileStoreChain();
if (credentialChain.TryGetAWSCredentials(profileName, out var awsCredentials))
{
    // 用加载到的凭证和区域构造SSM客户端
    _client = new AmazonSimpleSystemsManagementClient(awsCredentials, region);
}
else
{
    throw new InvalidOperationException("无法加载指定的AWS凭证配置");
}

// GetValue方法逻辑无需修改
public string GetValue(string key)
{
    if (_client == null)
        return null;

    var request = new GetParameterRequest
    {
        Name = $"{_baseParameterPath}/{key}",
        WithDecryption = true,
    };

    try
    {
        var response = _client.GetParameterAsync(request).Result;
        return response.Parameter.Value;
    }
    catch (Exception exc)
    {
        return null;
    }
}

注意事项

如果应用部署在本地IIS运行,需要将应用池的运行身份修改为你存放.aws文件夹的Windows用户,或者将.aws文件夹拷贝到对应应用池身份的用户目录下,否则会读取不到凭证文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:06