C# 在.Net应用程序中同时使用多个AWSProfileNames

C# 在.Net应用程序中同时使用多个AWSProfileNames,c#,asp.net,.net,amazon-web-services,aws-sdk,C#,Asp.net,.net,Amazon Web Services,Aws Sdk,设置 我正在构建一个.Net应用程序,它需要访问AWS SQS和S3。 到目前为止,我已经使用AWS的首选方法()为单个帐户定义了AWS凭据 因此,我的凭证文件位于: C:\aws_service_credentials\credentials 看起来像这样: [default] aws_access_key_id = ACCESS_KEY_01 aws_secret_access_key = SECRET_KEY_01 <appSettings> <add key

设置
我正在构建一个.Net应用程序,它需要访问AWS SQS和S3。
到目前为止,我已经使用AWS的首选方法()为单个帐户定义了AWS凭据

因此,我的凭证文件位于:

C:\aws_service_credentials\credentials
看起来像这样:

[default]
aws_access_key_id = ACCESS_KEY_01
aws_secret_access_key = SECRET_KEY_01
<appSettings>
    <add key="AWSProfileName" value="default" />
    <add key="AWSProfilesLocation" value="C:\aws_service_credentials\credentials" />
</appSettings>
我的
App.Config
文件如下所示:

[default]
aws_access_key_id = ACCESS_KEY_01
aws_secret_access_key = SECRET_KEY_01
<appSettings>
    <add key="AWSProfileName" value="default" />
    <add key="AWSProfilesLocation" value="C:\aws_service_credentials\credentials" />
</appSettings>
问题
现在,我被告知S3凭据将属于一个单独的客户机帐户——比如说Client01,而SQS凭据将属于另一个帐户——Client02

这两个客户账户不在同一AWS账户下,且完全独立

问题
是否可以使用凭证文件实现此场景

我知道我可以在凭证文件中创建多个配置文件。例如:

[client01]
aws_access_key_id = ACCESS_KEY_01
aws_secret_access_key = SECRET_KEY_01

[client02]
aws_access_key_id = ACCESS_KEY_02
aws_secret_access_key = SECRET_KEY_02
但我如何在运行时以编程方式切换它

能够做这样的事情会很好:

[default]
aws_access_key_id = ACCESS_KEY_01
aws_secret_access_key = SECRET_KEY_01
<appSettings>
    <add key="AWSProfileName" value="default" />
    <add key="AWSProfilesLocation" value="C:\aws_service_credentials\credentials" />
</appSettings>
AppSettings

<appSettings>        
    <add key="AWSProfilesLocation" value="C:\aws_service_credentials\credentials" />
</appSettings>
我目前考虑的解决方案是直接在配置文件中定义密钥和机密,然后通过编程方式访问配置文件,并在初始化期间将值传递给客户端——但我希望避免这种情况


有什么想法吗?谢谢

使用Amazon.Runtime.CredentialManagement.CredentialProfileStoreChain类,您可以通过配置文件名称查找凭据

using Amazon.Runtime;
using Amazon.Runtime.CredentialManagement;

using Amazon.S3;
using Amazon.SQS;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var store = new CredentialProfileStoreChain(@"C:\aws_service_credentials\credentials");

            store.TryGetAWSCredentials("clientSQS", out AWSCredentials clientSQSCredentials);
            var sqsClient = new AmazonSQSClient(clientSQSCredentials, Amazon.RegionEndpoint.USEast1);

            store.TryGetAWSCredentials("clientS3", out AWSCredentials clientS3Credentials);
            var s3Client = new AmazonS3Client(clientS3Credentials, Amazon.RegionEndpoint.USEast1);
        }
    }
}

使用Amazon.Runtime.CredentialManagement.CredentialProfileStoreChain类,您可以通过配置文件名称查找凭据

using Amazon.Runtime;
using Amazon.Runtime.CredentialManagement;

using Amazon.S3;
using Amazon.SQS;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var store = new CredentialProfileStoreChain(@"C:\aws_service_credentials\credentials");

            store.TryGetAWSCredentials("clientSQS", out AWSCredentials clientSQSCredentials);
            var sqsClient = new AmazonSQSClient(clientSQSCredentials, Amazon.RegionEndpoint.USEast1);

            store.TryGetAWSCredentials("clientS3", out AWSCredentials clientS3Credentials);
            var s3Client = new AmazonS3Client(clientS3Credentials, Amazon.RegionEndpoint.USEast1);
        }
    }
}