【问题标题】:How to set credentials on AWS SDK on NET Core?如何在 NET Core 上的 AWS 开发工具包上设置凭证?
【发布时间】:2017-08-20 13:53:52
【问题描述】:

我是 AWS 开发工具包的新手,我正在尝试遵循 AWS documentation,但对于我需要设置的内容几乎没有提供任何信息。

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

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

然后创建客户端:

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

这会导致抛出异常,说它找不到凭据。我将 Api ID 和 Key 放在哪里?这是什么个人资料?

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

有人可以指出这个示例中缺少什么,只是为了让 API 正确连接到 AWS?

【问题讨论】:

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


【解决方案1】:

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

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

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

不要在您的应用程序中放置文字访问键,包括 项目的 App.config 或 Web.config 文件。如果这样做,就会产生风险 不小心暴露您的凭据,例如,您上传 项目到公共存储库。

【讨论】:

  • 本文档没有一个关于如何在 appsettings.json 中进行设置的示例。
  • @Natan 那是因为这不是正确的做法。
  • 这实际上并没有回答问题。这实际上是问题的一部分。我是这个 SDK 的新手,提供的示例不起作用,我不知道我做错了什么。任何机会你可以更有帮助?我应该做什么?您能否举例说明如何使他们的示例代码工作?此时我只需要了解如何运行他们的示例代码。
  • 只是提供一些反馈,出于某种原因,您的印象是我想将 ID 和密钥添加到 AppSettings。我不。我只需要了解如何使用 asp.net core 进行设置,到目前为止我还不知道那里缺少什么。
  • 文档确实提到了“从 AWSAccessKey 和 AWSSecretKey AppConfig 值创建的基本AWSCredentials,如果它们可用的话。”但是,它似乎不起作用。此外,我认为将凭据放入用户密钥中没有问题。这与 .aws\credentials 一样安全
【解决方案2】:

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 配置文件。

【讨论】:

  • 谢谢。不,我没有定义这个配置文件,因为我不知道我必须这样做。这在文档中根本不清楚。因此,文档中缺少的是应该有这个类似ini的文件,其中包含访问密钥和秘密在一个特定的地方供它查看。
  • 网络应用程序应该使用哪个 {USERNAME} 文件夹?找到这个最简单的方法是什么 - 我试过管理员,任务管理器/详细信息/w3wp.exe中列出的用户 - 没有工作。这适用于开发机器,无法在生产中工作。也无法让 ProfilesLocation 在 .net core mvc 2 中工作。
  • 您不应该受到责备,要了解如何管理个人资料,您需要跳过 5 篇不同的文章,直到找到正确的一篇。 AWS 确实有文档,但在我看来,它对于几乎所有服务都非常不直观。
【解决方案3】:

也许这对您来说为时已晚,但如果您使用 docker 或有一些其他环境/设置无法/容易使用 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。

亚马逊似乎让在文档中找到它比需要的更难。

在 AWS 中运行实数是可以的,因为您应该使用角色,但如果您使用 docker for dev,那么在容器中设置配置文件就是 PITA。

【讨论】:

  • 如果您不在 Windows 上,这是一个非常有用的答案,我们正在部署到非 Windows 的 kubernetes 集群,这似乎是在那里效果最好的方法。
  • 我真的想要一个能在所有可能的地方搜索凭据的东西。标准方式执行此操作,但不搜索环境。伤心!
  • 是的,那太好了!此外,.net 客户端几乎假定您在 Windows 上运行它,并且可以使用配置文件,考虑到它是 PCL/.Net 核心兼容库,这非常幼稚
  • 应该提到你在这里使用的扩展方法存在于AWSSDK.Extensions.NETCore.Setupnuget包中
  • @Jonesie 如果在我的应用程序运行时更改了 key_id 和 access_key 会发生什么,我如何在我的代码中刷新它们以访问 s3。
【解决方案4】:

这有助于避免使用 appsettings 从环境中获取凭据用于开发目的

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多