こんにちは、サイオステクノロジーの佐藤 陽です。
今回はAzureのネットワーク周りの話です。
閉域なネットワーク環境にあるKeyVaultやCosmosDBに対して、自分のPCからアクセスする方法をご紹介します。
はじめに
Azureでシステムを構築するにあたって、閉域網として実現することはめずらしくないかと思います。
なお閉域網とは、外部のインターネットと接続せずに、特定の範囲内でのみアクセス可能なネットワークのことを指します。
KeyVaultや、CosmosDBなどのリソースをこの閉域網の中に閉じ込めることによって
セキュリティやプライバシーを強化し、データの漏洩リスクを低減することができます。
この時、アプリを構築するうえでAzure上のAppServiceやAzure Functionsなどのコンピューティングリソースからはアクセスする必要がありますが
そういった手段はもちろん用意されています。(VNet統合)
ただ、エンジニアが保守運用の際にアクセスしたいケースも往々にあります。
- KeyVaultに格納されているシークレット情報を更新したい
- CosmosDBに蓄積されたデータを確認したい
こういった際に、閉域とされているリソースに自分のPCからアクセスする方法を今回ご紹介します。
なお、Azure上で閉域網を実現するための方法として、様々な方法がありますが今回はサービスエンドポイントを使った方法をご紹介します。
事前準備
まずはKeyVaultを用意します。
KeyVaultのリソースを作成し、検証用にシークレットもひとつ追加しておきます。
まだこの時は閉域としていないため、自由にアクセスできるかと思います。
(アクセスポリシーや、RBACの設定は必要なのでそのあたりは適宜行ってください。)
このKeyVaultを閉域化していきます。
KeyVaultのリソースの ネットワーク
のブレードから設定を行います。
今回はサービスエンドポイントを利用するため
「ファイアーウォールと仮想ネットワーク」のタブから「特定の仮想ネットワークとIPアドレスからのパブリックアクセスを許可する」を選択します。
そうすると、仮想ネットワークの選択画面が出てくるかと思います。
まだ仮想ネットワークは作成していないため、設定を行わずにこのまま「適用」ボタンを押して終了します。
そして、この状態で再度シークレットを閲覧しに行ってみます。
すると
ファイアウォールがオンになっており、クライアントの IP アドレスはこのキー コンテナーにアクセスする権限がありません
と表示され、シークレットの中身が見えない事が確認できます。
もちろん作成なども行えません。
これでKeyVualtを閉域化することに成功しました!!
閉域化したリソースへのアクセス
これで話は最初に戻りますが、この状態ではシークレットの追加や更新などが行えません。
「編集する時だけ閉域化を解除する…?」 と考える人もいるかと思いますが
それがアンチパターンであることは、何となく察しがつきます。
それではどうするのかというと、Azure上に用意したVMを経由して閉域化されたリソースにアクセスします。
先程のKeyVaultのネットワーク設定の項目にもありましたが、アクセス元の仮想ネットワーク(VNet)を指定することができます。
以下の手順で接続を試みます。
- VNet,Subnetを作成します。
- Subnetに対してサービスエンドポイントの設定を有効にします。
- Subnetに対してVMをデプロイします。
- KeyVualtに対するアクセスを許可します。
- RDP接続したVMを経由してKeyVaultへアクセスします。
VNet, Subnetの作成
まずはVNet, Subnetを作成します。
Subnet作成時にサービスエンドポイントの設定を行い、Microsoft.KeyVault
のサービスを追加します。
その他の項目はデフォルトのままでOKです。
SubnetへのVMデプロイ
今作成したサブネットの中にVMをデプロイします。
以下の内容でデプロイしました。 ポイントとしては以下2つです。
- イメージをWindowsにする
- もちろんLinuxでも構いませんが、分かりやすさ優先で今回はWindowsとしています。
- 先程作成したサブネットに対してデプロイする
KeyVaultに対するアクセスを許可する
先程作成したKeyVaultのネットワーク
ブレードから、上記で作成したサブネットからのアクセスを有効にします。
仮想ネットワークを追加したら[適用]を押して閉じます。
RDP接続したVMを経由してアクセス
これで準備が整ったので、実際に自分のPCからRDPを利用してVMにアクセスします。
RDPでアクセスしたVM上でブラウザを開き、AzurePortalからのKeyVaultにアクセスします。 すると、以下のように先程格納したシークレットが閲覧できていることが確認できます。
振り返り
上記したステップを踏むことで閉域化のリソースにアクセスできることが確認できました。
今回はKeyVaultを題材にしましたが、CosmosDBや他のリソースに関しても同様の方法を取ることでアクセスが可能となります。
また、今回はサービスエンドポイントを利用しましたが、プライベートエンドポイントを利用した場合も同様の方法を取ることができます。
ただ、この時気になるのが「VM自体は外部のインターネットからアクセスできてるけどいいの?」といったところかと思います。
確かにKeyVaultに対しては外部のインターネットからのアクセスは遮断されていますが、
そこにアクセスするためのVMが、外部のインターネットからアクセスできてしまっている点について、不安が残ります。
この問題を解消する方法として、AzureにはAzure Bastionというサービスが用意されています。
このBastionを使うことによって、VMのプライベートIPを介して自分のPCからセキュアに接続することが可能となります。
Bastionを利用した方法は以下の記事にまとめましたのでこちらもご覧ください。
まとめ
今回は、閉域化されたリソースに対して自分のPCからアクセスする方法をご紹介しました。
これで保守・運用についても自分のPCから問題なく行えなくなりそうです。
一方で、VMに対して外部インターネットからのアクセスが許可されているという課題もあります。
これを解消するBastionについても別記事にてご紹介しているため、こちらも併せてご覧ください。
ではまた!