このページの本文へ

前へ 1 2 3 4 5 次へ

ポイントを速習!「Azureの基礎(AZ900)」をみんなで学ぶ 第13回

実際にNSG(Network Security Group)とVNet Service Endpointを構成してみる

Azureのセキュリティで知っておきたいこと、対策の基礎【後編】

2021年03月26日 08時00分更新

文● 椎名泰之/FIXER 編集● 大塚/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

[実践]VNet Service Endpointを使ってリソース間接続を制御する

VNet Service Endpoint(VSE)のハンズオンで構成するリソース群

 続いて、VNet Service Endpoint(VSE)の構築ハンズオンをやっていきたいと思います。

 上記の図は、VSEをVNet内に作成し、ネットワーク規則を用いてVNet外にあるAzure Storageへのアクセスをバイパスさせていることを示します。ただしここでは、DataServer VMのあるDBsサブネットからのみ、Azure Storageへアクセスできるよう制限する設定を行います。

NSGに規則を追加

 まずはNSGに規則を追加して、VNetからAzure Storageへの通信が確実にVSEを通過するよう設定します。具体的には「このVNetからStorageサービスへの外向き(アウトバウンド)方向の通信は許可するが、その他すべてのインターネット通信は拒否する」という規則です。

1. Storageへのアクセスを許可するアウトバウンド規則を作るために、次のコマンドを実行します。


az network nsg rule create \
    --resource-group $rg \
    --nsg-name SERVERS-NSG \
    --name Allow_Storage \
    --priority 190 \
    --direction Outbound \
    --source-address-prefixes "VirtualNetwork" \
    --source-port-ranges '*' \
    --destination-address-prefixes "Storage" \
    --destination-port-ranges '*' \
    --access Allow \
    --protocol '*' \
    --description "Allow access to Azure Storage"

2. 「すべてのインターネット通信を拒否」するアウトバウンド規則を作るために、次のコマンドを実行してください。


az network nsg rule create \
    --resource-group $rg \
    --nsg-name SERVERS-NSG \
    --name Deny_Internet \
    --priority 200 \
    --direction Outbound \
    --source-address-prefixes "VirtualNetwork" \
    --source-port-ranges '*' \
    --destination-address-prefixes "Internet" \
    --destination-port-ranges '*' \
    --access Deny \
    --protocol '*' \
    --description "Deny access to Internet."

 前のハンズオンと合わせて、ここまでにSERVERS-NSGには次の規則が設定されているはずです。これにより、現時点ではAppServerからでもDataServerからでも、Azure Storageにアクセスすることができます。

Storage AccountとFile Shareを構成

 次に、アクセス確認テスト用のリソースを用意しましょう。新しいStorage Accountを作成したあとに「Azure File Share」を構成します。このFile Shareは、ファイルを保存して共有できる、ファイルサーバーのようなサービスです。

1. Storage Accountを作成するために、次のコマンドを実行します。実行すると、変数STORAGEACCTにはStorage Account名が格納されます。


STORAGEACCT=$(az storage account create \
    --resource-group $rg \
    --name handsondocs$RANDOM \
    --sku Standard_LRS \
    --query "name" | tr -d '"')

2.. 次に、Storageのprimary keyを変数STORAGEKEYへ格納するために、次のコマンドを実行して下さい。


STORAGEKEY=$(az storage account keys list \
    --resource-group $rg \
    --account-name $STORAGEACCT \
    --query "[0].value" | tr -d '"')

3.. 「handson-data-share」という名称のFile Shareを構成するために、次のコマンドを実行します。


az storage share create \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "handson-data-share"

VSEを有効にする

 続いて、Storage Accountを修正して、DataServerからのみアクセスできるようにします。具体的には、DBsサブネットにStorageのVSEを割り当て、その後にStorage Account側にネットワーク規則を設定します。

1. 「Microsoft.Storage」という名前のVSEをDBsサブネットに割り当てるために、次のコマンドを実行して下さい。


az network vnet subnet update \
    --vnet-name servers \
    --resource-group $rg \
    --name DBs \
    --service-endpoints Microsoft.Storage

2. いったんすべてのネットワークkからStorage Accountへのアクセスができなくなるように、規定のアクションを「拒否(Deny)」に設定します。


az storage account update \
    --resource-group $rg \
    --name $STORAGEACCT \
    --default-action Deny

3. そのうえで、Storage Accountへのアクセス制限を設定するために、次のコマンドを実行します。これにより、DBsサブネットからの通信のみを受信するように制限されます。


az storage account network-rule add \
    --resource-group $rg \
    --account-name $STORAGEACCT \
    --vnet servers \
    --subnet DBs

File Shareへの通信を確認

 それでは、Storage AccountでDataServerのみがFile Shareにアクセスできるか確認してみましょう。

1. AppServerとDataServerのパブリックIPを変数に格納するために、次の2つのコマンドを実行してください。


APPSERVERIP="$(az vm list-ip-addresses \
    --resource-group $rg \
    --name AppServer \
    --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
    --output tsv)"

DATASERVERIP="$(az vm list-ip-addresses \
    --resource-group $rg \
    --name DataServer \
    --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
    --output tsv)"

2. AppServer VMにSSH接続し、File Shareのマウントを行うために、次のコマンドを実行します。


ssh -t azureuser@$APPSERVERIP \
    "mkdir azureshare; \
    sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/handson-data-share azureshare \
    -o vers=3.0,username=$STORAGEACCT,password=$STORAGEKEY,dir_mode=0777,file_mode=0777,sec=ntlmssp; findmnt \
    -t cifs; exit; bash"

3. VM作成時のパスワードを入力すると「mount error」が表示されます。これは、AppsサブネットにはStorage AccountのVSEがないため、AppServerからFile Shareへのアクセスが拒否されているのです。

4. 同じことをDataServer VMで試してみると、どうなるでしょうか。


ssh -t azureuser@$DATASERVERIP \
    "mkdir azureshare; \
    sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/handson-data-share azureshare \
    -o vers=3.0,username=$STORAGEACCT,password=$STORAGEKEY,dir_mode=0777,file_mode=0777,sec=ntlmssp;findmnt \
    -t cifs; exit; bash"

5. VM作成時のパスワードを入力すると、今度はmountに成功した旨の詳細が表示されるはずです。これは、DBsサブネットにStorage Account用のVSEが作成されているからです。

 以上で、VSEを使ってリソース間の接続を制御できることが確認できました。

* * *

 以上、今回はNSGやVNet Service Endpointの解説と構築を行いました。非常に長くなってしまいましたが、いかがだったでしょうか。多層防御の一部分をなすこれらのリソースの理解に少しでも役立てば幸いです。

 さて、13回にわたって連載してきた「ポイントを速習!『Azureの基礎(AZ900)』をみんなで学ぶ」は、今回が最終回となります。次回からは新連載として、Azure Cognitiveサービス(AIサービス)の基礎を学ぶシリーズをお届けする予定です。引き続きよろしくお願いいたします!

■今回のポイントまとめ!

  • NSGでトラフィックを制御する規則を作ると、VNetやVMをインターネットからのアクセスから保護できる
  • VNet Service Endpointを使うと、SQL DatabaseやAzure StorageなどのAzureリソースを保護できる

FIXER Inc. 椎名 泰之

社会人1年目の出来立てほやほやエンジニア。環境構築が大好物で、嫌いなものはMerge Conflict。仕事を始めても結局ゲームはやめられないらしい……。

前へ 1 2 3 4 5 次へ

カテゴリートップへ

この連載の記事