Quantcast
Channel: ブチザッキ
Viewing all articles
Browse latest Browse all 638

Visual Studioで開発時にMSIを使う

$
0
0

以前に書いたときよりたいぶ使いやすくなった(?)Managed Service Identity(MSI)ですが、Visual Studioでローカル開発をする際も簡単になっていました。

Azure上にデプロイすればMSIで自動的に良しなにしてくれますがローカルだとそのあたりの情報がないですよね。最近のVisual Studioであれば、この時に使用するアカウントを設定で指定することができます。
※Visual Studio 2017 (Update 5は拡張機能をインストール、Update 6以降は組み込みみたいです)
※参考:Service-to-service authentication to Azure Key Vault using .NET

image

ローカルデバッグなどの際は、ここで指定したアカウントのアクセストークンを使うようにAzureServiceTokenProviderが構成されます。便利ですね。

現時点の問題点

今時点で指定したアカウントが複数テナントに紐づいていたり(別テナントのサブスクリプションに権限がある)するとアクセストークンは取得できるけど実際にアクセスする際に401エラーになります。
回避するにはGetAccessTokenAsync()の引数にテナントIDを入れたりすればいいのですが、せっかくコードからキーやIDを取り除こうとしてるのにそんなことはしたくないですよね(本番環境でも指定しないといけなくなるし)
Visual Studioのアカウント設定にそれっぽい設定がありテナントのフィルタが行えるようなのでそちらを使ってみましょう。
image

ただし、フィルタされてるように見えて実際には(今のところ)されていないのでこの方法は使えません。(バグっぽいので報告はしたのですけど伝わるかどうか謎。。)

回避策の回避策

凄く面倒くさいですがAzureServiceTokenProviderの中でVisualStudioAccessTokenProviderを使ってるようで、そちらを見ると %LocalAppData%\.IdentityService\AzureServiceAuth\tokenprovider.json ファイルの情報を基に構成しているようです。
なのでJSONファイルを開いてArguments配列に–tenant とテナントIDを追加すれば一応OKです。
image
※使用する拡張機能毎に設定があるようなので適宜同じように修正しましょう

まとめ

ちょっと面倒くさい個所があるかもしれませんが(使用アカウントの環境依存ではある)、MSIを使ってコードから秘密鍵やキーを撤廃しましょう。基本的にMSIか、MSI経由のKey Vaultからキーを取得するようにすれば誤ってコードに埋め込んでインターネットに公開、みたいなリスクも無くせます。


Viewing all articles
Browse latest Browse all 638

Trending Articles