C# AWS SDK SecurityTokenServiceClient.AssumeRole 返回 "SignatureDoesNotMatch" 403 forbidden



我一直在开发环境中实现AWS S3与C#AWS SDK的集成,一切都很顺利。部分要求是IAM AccessKey和SecretKey轮换,凭证/配置文件存储或缓存,并且在该过程中还需要承担一个角色。

我有一个方法,它在用AccessKey、SecretKey和RegionEndpoint初始化AmazonSecurityTokenServiceClient后返回凭据,用RoleArn格式化AssumeRoleRequest,然后执行请求:

using (var STSClient = new AmazonSecurityTokenServiceClient(accessKey, secretKey, bucketRegion))
{
try
{
var response = STSClient.AssumeRole(new AssumeRoleRequest(roleARN));
if (response.HttpStatusCode == System.Net.HttpStatusCode.OK) return response.Credentials;
}
catch (AmazonSecurityTokenServiceException ex)
{
return null;
}
}

这被简化了,因为实际实现验证了凭证变量等。它与AWS Developer代码示例相匹配(尽管我再也找不到该页面的链接了(。

这在开发中一直很好。在将其移动到具有新AWS凭据的QA环境中后,我确信这些凭据是在与开发凭据相同的过程中设置的,现在我在Assume Role调用中收到了一个异常。

实际的AssumeRole方法不包括它会抛出该异常的文档,它只是它引发的那个异常。StatusCode:403 Forbidden,ErrorCode:SignatureDoesNotMatch,ErrorType:Sender,Message"我们计算的请求签名与您提供的签名不匹配……"。

我已经排除的事情:

  • 密钥正确,不包含转义字符(/(或前导/尾随空格

  • bucket区域是正确的us-west-2

  • sts-auth区域是us-east-1

  • SignatureVersion为4

切换回dev-keys是可行的,但这不是一个对生产友好的解决方案。最终,我不会负责密钥,也不会负责创建密钥的Aws帐户。我已经与创建帐户/密钥/角色的IT管理员取得了联系,他向我保证,它们的创建方式与我创建开发帐户/密钥-角色的方式相同(这是开发前商定的流程(。

提供的帐户/密钥/角色可以通过CLI或web控制台访问,因此我可以确认它们是否工作并且处于活动状态。我一直很努力,没有任何CLI创建的凭据或配置文件在sdk默认情况下可能访问。

欢迎任何想法或建议。

AWS返回此错误的原因通常是密钥不正确

我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。(状态代码:403;错误代码:SignatureDoesNotMatch(

相关内容

  • 没有找到相关文章

最新更新