我正处于开发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。虽然这有效,但我不确定这是否是最佳做法,并担心它是否安全。
这种方法是否合理,如果不是我应该做什么呢?
由于
答案 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();
}
}