2017-05-20 4 views
1

私は、Ubuntuサーバーに展開されているドットネットコアWebの開発の初期段階にあります。このアプリは、www-データユーザーの下で、systemdサービス(このガイドhttps://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproductionに従う)を介して実行されています。Ubuntu 16.04でホストされているdotnetコアアプリケーションのAWS認証情報を保存するにはどうすればよいですか?

アプリは、AWSコマンドラインインターフェイスによって生成された資格情報を指定することで、Amazon S3のサービスに接続するすなわち、AWSのconfigure(http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

私はアプリがしようとして含め、クレデンシャルファイルを読み込む持つように様々なアプローチを試してみました私のappsettings.jsonファイルでProfilesLocationを明示的に設定して、サービス定義に環境プロパティを設定します。

現在の解決策は、〜/ .awsフォルダと内容を/var/www/.awsパスにコピーし、所有者をwww-dataに設定することです。これは機能しますが、これがベストプラクティスであるかどうかは不明ですし、安全であるかどうかは懸念しています。

代わりに何をしなければならないのでしょうか?

おかげ

答えて

1

私はappsettings.Production.jsonファイルを作成し、そのファイル内のすべてのあなたの秘密を置きます。それからあなたの秘密ごとにプロパティを持つクラスを作成します。 options patternを使用して、任意のクラス(つまり、コントローラクラス)の秘密にアクセスできます。後でアプリケーションのリリース版をビルドして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(); 
    } 
} 
+0

ご返信いただきありがとうございます。はい、私は環境(ステージング)のために別々のappsettings.jsonを持つアプローチを使用しています。これは、AWS S3コンフィグレーションガイドhttp://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-netcore.html に従っていましたが、パッケージdoes'ntキーID、およびサービスに必要なアクセスキーを受け入れるように見えます。代わりに、別のファイルに格納されているAWSプロファイルを参照します。これは、私が/var/www/.awsパスにコピーしなければならなかったこの別個のファイルです。 –

+0

これは、私がUbuntuサーバーにasp.netコアWebアプリケーションを公開したときに使用したアプローチです。 – kimbaudi

関連する問題