具有假定角色凭证的AWS开发工具包.NET依赖项注入

问题描述

版本

  • .net core sdk v3.1.301
  • AWSSDK.Extensions.NETCore.Setup v3.3.101
  • AWSSDK.IdentityManagement v3.3.106.19
  • AWSSDK.SecurityToken v3.3.105.30

定义

由于该问题涉及不同类型的AWS凭证,因此我认为定义我正在使用的术语会有所帮助

应用程序凭据-.NET Core AWS SDK在启动时加载的AWS凭据
承担角色凭证-在运行时从STS获得的临时AWS凭证

问题

我正在编写一些使用AWS开发工具包与AWS交互的代码。在使用AWS开发工具包时,我倾向于使用依赖注入容器中内置的ASP.NET Core注入服务客户端:

services.AddAWSService<IAmazonIdentityManagementService>();
services.AddAWSService<IAmazonSecurityTokenService>();

当您要使用应用程序凭据时,此方法很好用。 AWS客户端的注入和实例按预期工作

public class IamService : IIamService
{
    private readonly IAmazonIdentityManagementService _iamClient;

    public IamService(IAmazonIdentityManagementService iamClient)
    {
        _iamClient = iamClient;
    }
}

但是,我的应用程序需要在多个帐户中扮演多个角色

我唯一想到的方法是致电STS以获取承担角色凭据

AssumeRoleRequest request = new AssumeRoleRequest()
{
    RoleSessionName = "MySession",RoleArn = "arn:aws:iam::123456789012:role/MyRole"
};

AssumeRoleResponse response = await _service.AssumeRoleAsync(request);

_service的类型为IAmazonSecurityTokenService

然后new我对AWS开发工具包的所有调用

AmazonIdentityManagementServiceClient service = 
    new AmazonIdentityManagementServiceClient(response.Credentials);

问题

是否有一种更干净的方法可以处理,这意味着我不必在所有地方实例化新的SDK客户端?

我希望可以采用某种神奇的方式来配置DI容器,例如,如果提供了假设角色凭证,然后使用这些凭证注入AWS开发工具包的实例,否则使用应用程序凭证-经过大量的Google搜索我找不到任何暗示可能的事...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)