亚马逊AWS和GetCallerIdentity

时间:2017-05-24 18:26:47

标签: c# amazon-web-services .net-core aws-lambda aws-sts

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

我们正在使用STS AssumeRoleAsync(),这是使用AWS AssumeRole操作的.Net SDK的方法来生成这些凭据。调用AssumeRoleAsync()的响应是AssumeRoleResponse对象,它包含在AssumeRoleUser对象和Credentials对象的一部分中。 AssumedRoleUser的其中一个属性是AssumedRoleId,其格式为role-id:role-session-name

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

所有这一切都很好。以上只是为了设置场景。

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

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

根据GetCallerIdentity文档中以及该网页引用的Principal Table中的信息,我希望在GetCallerIdentity()电话的响应中收到以下内容:< / p>

  • Account
  • Arn
  • UserId(这是讨论的重点)

UserId应采用role-id:caller-specified-role-name的形式,与调用AssumedRoleId的{​​{1}}完全相同。这样我就可以获得AssumeRoleAsync并做我们需要做的事情。

但这不是来自caller-specified-role-name的回复的UserId属性中返回的内容。

相反,GetCallerIdentity()属性包含的所有内容都是UserId - 它完全省略了基本role-id

还有其他人看过这种行为吗?我忽略了简单的事情吗?这可能是来自caller-specified-role-name的回复中的错误吗?

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

  • Amazon.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

感谢您提出任何建议!

德里克

0 个答案:

没有答案