2

我正在做一个 AWS 项目。我们希望能够颁发具有有限权限的 STS 临时安全凭证,以便访问 AWS 服务。我们正在使用 C# 在 .Net Core 中工作。

我们使用 STS来生成这些凭证AssumeRoleAsync(),这是 .Net SDK 使用 AWS AssumeRole操作的方法。调用的响应AssumeRoleAsync()是一个AssumeRoleResponse对象,它由一个AssumeRoleUser对象和一个Credentials对象组成。的属性之一AssumedRoleUserAssumedRoleId,其形式为role-id:role-session-name

我们有一个Lambda 函数,它以 JSON 对象的形式处理调用AssumeRoleAsync和返回生成的凭证。该 Lambda 函数通过API Gateway方法调用。

所有这些工作正常。以上只是为了布景。

我们希望能够做的下一件事是使用 STS 临时凭证对 AWS 服务进行其他调用。发生这种情况时,我们希望能够使用GetCallerIdentity()来检索AssumedRoleId向其颁发凭据的人。尤其role-session-name是我们感兴趣的。

因此,为了实现这一点,我在另一个 API Gateway 方法后面创建了另一个 Lambda 函数。我将此 API Gateway 方法设置为在其方法请求配置中使用AWS_IAM授权。在其集成请求中,我将其配置为. Lambda 函数只接受传入的请求并调用并返回结果。我在请求的授权标头中使用了上一次调用返回的凭据。Invoke with caller credentialsGetCallerIdentity()AssumeRoleAsync()

根据在GetCallerIdentity文档和该页面所引用的Principal Table中找到的信息,我希望收到以下项目作为响应GetCallerIdentity()

  • Account
  • Arn
  • UserId(这是本次讨论的重要部分)

UserId应该是 的形式,与from 调用返回的形式role-id:caller-specified-role-name完全相同。这将使我能够获得并做我们需要做的事情。AssumedRoleIdAssumeRoleAsynccaller-specified-role-name

但这不是UserId来自 的响应的属性中返回的内容GetCallerIdentity()

相反,该UserId属性包含的只是role-id- 它完全省略了 essential caller-specified-role-name

有没有其他人看到过这种行为?我忽略了一些简单的事情吗?这可能是响应中的错误GetCallerIdentity吗?

我正在使用以下 Amazon SDK 组件和版本进行这些不同的调用:

  • 亚马逊.Lambda.Core/1.0.0
  • Amazon.Lambda.Serialization.Json/1.1.0
  • AWSSDK.Core/3.3.14
  • AWSSDK.Lambda/3.3.6.2
  • AWSSDK.SecurityToken/3.3.1.9

感谢您提供的任何帮助!

德里克

4

0 回答 0