shuhelohelo’s blog

Xamarin.Forms多めです.

接続文字列をAzure App Service側に持たせる

ASP.NET Coreに限らずウェブアプリケーションを開発する際に、DBの接続文字列をソースコード(appsettings.jsonやweb.config)に記載して、それを利用することが多いと思います。

しかし、ローカルで開発している間はそれで良いですが、本番環境での運用が始まってから本番DBへの接続文字列をソースコード側に持たせておくのはうっかり公開などの漏洩事故が怖いのでしたくありません。

そこで、本番DBへの接続文字列はソースコードに持たせず本番環境でのみ使われるようにします。

前提

  • ASP.NET Core 2.2
  • Azure App Service
  • 2019/12/20現在(Azure Portalのメニューはわりとよく変わるので)

App Service側に接続文字列をもたせる

Azure Portalを開き、対象のApp Serviceリソースを開きます。

App Serviceリソースの左側のメニューに「設定」という大項目があり、その中に「構成」というメニューがあるので、それを開きます。

f:id:shuhelohelo:20191220134958p:plain

開くとすぐに分かるのですが「接続文字列」という項目があり、そこで接続文字列を名前付きで登録することができます。

f:id:shuhelohelo:20191220134937p:plain

「+新しい接続文字列」というボタン?があるのでクリックすると、「接続文字列の追加/編集」というダイアログが開きます。 ここに、appsettings.jsonなどに記述するように接続名と接続文字列を入力し、DBの種類を選択します。

f:id:shuhelohelo:20191220135249p:plain

OKボタンを押すと、以下のように接続文字列が登録されます。

f:id:shuhelohelo:20191220135654p:plain

これでApp Service側の設定は完了です。

ソースコード側でやること

App Service側に接続文字列を持たせたことで、本番環境にデプロイした際にはこの接続文字列が使用される事になりました。

例えばappsettings.jsonで接続名を同じHogeConnectionとして開発用のローカルのDBを指定しておき、

  "ConnectionStrings": {
    "HogeConnection": "Server=(localdb)\\mssqllocaldb;Database=mylocaldb;Trusted_Connection=True;MultipleActiveResultSets=true"    
  },

Startup.cs内で接続文字列としてHogeConnectionを指定しておけば、

            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("HogeConnection")));

ローカルで実行したときはローカルの接続文字列が使用され、デプロイしたあとはアプリケーションはApp Serviceに登録した接続文字列が使用されます。

この接続文字列は保存も使用時も暗号化され、通信経路も暗号化されてやりとりされる、ということも書いてあります。

これでソースコードに接続文字列を記載する必要がなくなり、安全になりました。