如何在 NET Core 上的 AWS SDK 上设置凭据?

How to set credentials on AWS SDK on NET Core?

我是 AWS SDK 的新手,我正在尝试遵循 AWS documentation,但对 none 我需要设置的内容知之甚少。

官方文档告诉我将此添加到 appsettings.json:

{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  }
}

然后创建客户端:

var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();

这会导致抛出异常,提示找不到凭据。我在哪里放置 Api ID 和密钥?这是什么个人资料?

请记住,我对如何设置没有偏好。我只是想按照 .NET Core 的官方文档,他们唯一的例子不起作用。文档似乎暗示我应该事先了解他们的许多条款和设置,或者我正在迁移现有应用程序并且已经设置好所有内容。

有人可以指出此示例中缺少什么以使 API 正确连接到 AWS 吗?

同一文档还包括用于设置凭据的部分。 在这里查看 http://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html

它没有给出使用 appSettings.json 文件设置凭据的示例,因为他们认为这不是正确(安全)的方式。

以下是有关设置凭据部分的介绍部分:

Don't put literal access keys in your application, including the project's App.config or Web.config file. If you do, you create a risk of accidentally exposing your credentials if, for example, you upload the project to a public repository.

json 文件是 $"appsettings.{env.EnvironmentName}.json",因此您应该将其命名为 appsettings.Development.json 并设置环境变量。

您是否在 AWS 凭据文件中定义了您的"local-test-profile" 配置文件。

应该在 C:\Users\{USERNAME}\.aws\credentials

[local-test-profile]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

如果您不希望它位于默认位置,您可以设置 'ProfilesLocation' json 配置文件。

也许这对您来说为时已晚,但如果您正在使用 docker 或有一些其他 environment/setup 而不是 possible/easy 来使用 AWS 配置文件,那么您仍然可以使用环境变量.例如:

var awsOptions = Configuration.GetAWSOptions();
awsOptions.Credentials = new EnvironmentVariablesAWSCredentials();
services.AddDefaultAWSOptions(awsOptions);
services.AddAWSService<IAmazonS3>();

然后在您的环境中设置 AWS_ACCESS_KEY_ID & AWS_SECRET_ACCESS_KEY & AWS_REGION。

Amazon 似乎让在文档中找到它变得比需要的更难了。

运行 在 AWS 中用于 reals 是可以的,因为你应该使用一个角色但是如果你使用 docker 作为开发然后在容器中设置一个配置文件是一个 PITA。

这有助于避免使用用于开发目的的应用程序设置从环境中获取凭据

var awsOption = Configuration.GetAWSOptions();
    awsOption.Credentials = new BasicAWSCredentials(Configuration["AWS:AccessKey"], Configuration["AWS:SecretKey"]);
    services.AddDefaultAWSOptions(awsOption);

适用于 .NET 的 AWS 开发工具包使用以下顺序加载凭证:

1。 AWSOptions.Profile 属性

AWSOptions awsOptions = new AWSOptions
{
    Credentials = new BasicAWSCredentials("yourAccessKey", "yourAccessSecret")
};
builder.Services.AddDefaultAWSOptions(awsOptions);

2。 AWSOptions.Credentials 属性

AWSOptions awsOptions = new AWSOptions
{
    Profile = "custom",
    ProfilesLocation = @"c:\temp\credentials"
};
builder.Services.AddDefaultAWSOptions(awsOptions);

如果未指定配置文件位置,它将查看默认位置 C:\Users\.aws\credentials

3。 凭据配置文件存储链

如果 AWSOptions.CredentialsAWSOptions.Profile 都未提供或 AWSOptions 对象本身为空。在这种情况下,将从环境变量 AWS_PROFILE.

加载凭据配置文件名称
  • 配置文件名称:如果没有这样的AWS_PROFILE环境变量,那么default将被用作配置文件名称。
  • 个人资料位置C:\Users\.aws\credentials

4。 环境变量 AWS 凭证

如果 SDK 仍未获得凭据,则会检查以下环境变量以加载 AWS 凭据。

ENVIRONMENT_VARIABLE_ACCESSKEY = "AWS_ACCESS_KEY_ID";     
ENVIRONMENT_VARIABLE_SECRETKEY = "AWS_SECRET_ACCESS_KEY";        
ENVIRONMENT_VARIABLE_SESSION_TOKEN = "AWS_SESSION_TOKEN";

5。 EC2 实例配置文件/ECS 任务配置文件

最后,这是 SDK 查找凭据的最重要的地方。这将是 AWS 环境中 运行 应用程序的最佳位置。在这种情况下,SDK 从 EC2 实例配置文件或 ECS 任务角色加载 AWS 凭证。

我也写了一篇关于同一主题的博客,你可以从这里查看 - Understanding Credential Loading in AWS SDK for .NET