使用C#SDK获取AWS Caller Identity

时间:2019-05-06 13:25:21

标签: c# .net .net-core aws-sdk

当我使用aws cli执行此操作时,即在Fargate任务中,我可以看到UserId我的应用程序将要使用

aws sts get-caller-identity

在控制台上显示此输出

{
    "Arn": "arn:aws:sts::643518765421:assumed-role/url_process_role/6ae81f92-66f3-30de-1eaa-3a7d1902bad9",
    "UserId": "ARDYOAZLVOAQXTT5ZXTV4:4ea81f97-66f3-40de-beaa-3a7d1902bad9",
    "Account": "692438514791"
}

我想使用C#SDK获得相同的信息。我尝试使用this doc中公开的方法,但可以看到一些与帐户相关的详细信息,但没有看到分配的UserId

到目前为止,我已经尝试过此操作,但是在Fargate任务中运行时看不到任何配置文件。

var awsChain = new Amazon.Runtime.CredentialManagement.CredentialProfileStoreChain();
System.Console.WriteLine($"Found {awsChain.ListProfiles().Count} AWS profiles.");

我的最终目标是获取它并将其添加到使用Fargate处理的某些任务中,以在发生故障时轻松地在数据库中保存关联ID,并轻松找到Fargate日志流。

1 个答案:

答案 0 :(得分:0)

当使用.netcore执行时,

IAmazonSecurityTokenService将提供相同的信息。请注意,上面的示例仅在AWS域内运行,因为如果从开发机进行测试,则端点不会公开可用。

var getSessionTokenRequest = new GetSessionTokenRequest
{
    DurationSeconds = 7200
};
var stsClient = hostContext.Configuration.GetAWSOptions().CreateServiceClient<IAmazonSecurityTokenService>();

var iden = stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest { }).Result;
System.Console.WriteLine($"A={iden.Account} ARN={iden.Arn} U={iden.UserId}");