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

使用C# SDK通过角色凭证调用EC2 API时验证失败求助

AWS跨账号角色访问EC2 API凭证验证失败排查

以下是针对问题的具体排查方向:

  • 临时凭证完整性检查
    确认tokenResult.Credentials包含完整的三个核心字段:AccessKeyId、SecretAccessKey和SessionToken。调用EC2 API时必须携带会话令牌(SessionToken),若该字段为空或未被正确传递,会直接触发凭证验证失败。建议在创建EC2客户端前打印这三个字段的值,确认无缺失。

  • 角色权限与区域匹配校验
    检查子账号中EC2只读角色的权限策略:

    • 确保策略允许访问eu-south-1区域的EC2资源,比如资源ARN包含该区域标识,或使用通配符*覆盖所有区域;
    • 确认子账号在eu-south-1区域已开通EC2服务权限,即使无实例存在,DescribeInstances也应返回空列表而非凭证错误。
  • 角色信任关系复查
    尽管AssumeRole调用成功,仍需核对子账号角色的信任策略:
    确认策略中的Principal正确指向主账号的SDK访问账号,格式示例:

    "Principal": {
      "AWS": "arn:aws:iam::主账号ID:user/你的SDK访问账号"
    }
    

    避免账号ID或用户名拼写错误。

  • SDK版本兼容性验证
    旧版本的AWS .NET SDK可能存在临时凭证传递的bug,建议将AWSSDK.EC2和AWSSDK.SecurityToken升级至最新稳定版本,确保会话令牌能被正确传递到EC2客户端。

  • 凭证时效性确认
    你设置的临时凭证有效期为15分钟,需确认调用EC2 API时凭证未过期。若AssumeRole与EC2调用之间存在较长延迟,可缩短延迟或延长有效期(最大不超过1小时,除非角色配置了更长的允许时长)。

你的测试代码:

private static async Task Test()
{
    //Assume credentials
    var tokenClient = new AmazonSecurityTokenServiceClient(masterKeyId, masterKeySecret);
    var tokenResult = await tokenClient.AssumeRoleAsync(new AssumeRoleRequest()
    {
        DurationSeconds = 60 * 15,
        RoleArn = "arn:aws:iam::522869052018:role/Accesso_API_EC2_da_account_sistemi",
        RoleSessionName = "TestSession"
    });

    //Call EC2 API (this call raises exception)
    var ec2client = new Amazon.EC2.AmazonEC2Client(tokenResult.Credentials, RegionEndpoint.EUSouth1);
    var response = await ec2client.DescribeInstancesAsync();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:33:23