如何存储Ubuntu 16.04上托管的dotnet核心应用程序的AWS凭据?

时间:2017-05-20 10:14:20

标签: amazon-web-services ubuntu amazon-s3 asp.net-core

我正处于开发dotnet核心网络的早期阶段,该网络正在部署到Ubuntu服务器。该应用程序通过www-data用户通过systemd服务运行(遵循本指南https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction)。

应用程序通过指定AWS命令行界面生成的凭据(即aws configure(http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

连接到Amazon S3服务

我尝试了各种方法让应用程序读取凭据文件,包括尝试在服务定义中设置Environment属性,在appsettings.json文件中显式设置ProfilesLocation。

我目前的工作解决方案是将〜/ .aws文件夹和内容复制到/var/www/.aws路径,并将所有者设置为www-data。虽然这有效,但我不确定这是否是最佳做法,并担心它是否安全。

这种方法是否合理,如果不是我应该做什么呢?

由于

1 个答案:

答案 0 :(得分:1)

我会创建一个appsettings.Production.json文件并将所有秘密放在该文件中。然后我会创建一个包含每个秘密属性的类。然后,您可以使用options pattern在任何类(即Controller类)中访问您的秘密。稍后当您构建应用程序的发行版并发布到Linux时,您将复制appsettings.Production.json文件以及其他构建文件,并且您的应用程序将从该文件中获取AWS凭据。

<强> appsettings.Production.json

{
  "Secret1": "myfirstsecretvalue",
  "Secret2": "mysecondsecretvalue"
}

<强> MyOptions.cs

public class MyOptions
{
    public string Secret1 { get; set; }
    public string Secret2 { get; set; }
}

<强> MyController.cs

public class MyController : Controller
{
    public MyController(IOptions<MyOptions> optionsAccessor)
    {
        Options = optionsAcessor.Value;
    }

    public MyOptions Options { get; }

    public IActionResult Index()
    {
        // access my secret1 value
        string mysecret1 = Options.Secret1;

        return View();
    }
}
相关问题