演習 - サービス エンドポイントを使うことで Azure Storage へのアクセスを制限する

完了

ソリューション アーキテクトであるあなたは、設計図の機密ファイルを Azure Storage に移す計画を立てています。 ファイルには、企業ネットワーク内のコンピューターからのみアクセスできるようにする必要があります。 あなたは、Azure Storage 用の仮想ネットワーク サービス エンドポイントを作成して、ストレージ アカウントへの接続をセキュリティで保護したいと考えています。

このユニットでは、サービス エンドポイントを作成し、ネットワーク ルールを使用して Azure Storage へのアクセスを制限します。 Databases サブネット上に Azure Storage 用の仮想ネットワーク サービス エンドポイントを作成します。 その後、DataServer VM で Azure Storage にアクセスできることを確認します。 最後に、別のサブネットにある AppServer VM がストレージにアクセスできないことを確認します。

Diagram of exercise scenario service endpoint and rules.

ネットワーク セキュリティ グループに規則を追加する

ここでは、Azure Storage との通信がサービス エンドポイントを確実に通過するようにします。 Storage サービスへのアクセスを許可するが、その他すべてのインターネット トラフィックを拒否するアウトバウンド規則を追加します。

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

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-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. すべてのインターネット アクセスを拒否するアウトバウンド規則を作成するには、Cloud Shell で次のコマンドを実行します。

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-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."
    

これで、ERP-SERVERS-NSG に次の規則が追加されるはずです。

規則名 方向 優先度 目的
AllowSSHRule インバウンド 100 インバウンド SSH を許可する
httpRule インバウンド 150 80 で DataServer から AppServer へのアクセスを拒否する
Allow_Storage アウトバウンド 190 Azure Storage へのアクセスを許可する
Deny_Internet アウトバウンド 200 VNet からインターネットへのアクセスを拒否する

現時点では、AppServerDataServer に Azure Storage サービスへのアクセスが与えられています。

ストレージ アカウントとファイル共有を構成する

この手順では、新しいストレージ アカウントを作成した後、このアカウントに Azure ファイル共有を追加します。 このファイル共有は、設計図を保存する場所です。

  1. 技術ドキュメント用のストレージ アカウントを作成するには、Cloud Shell で次のコマンドを実行します。

    STORAGEACCT=$(az storage account create \
                    --resource-group $rg \
                    --name engineeringdocs$RANDOM \
                    --sku Standard_LRS \
                    --query "name" | tr -d '"')
    
  2. ストレージ アカウントの主キーを変数に格納するには、Cloud Shell で次のコマンドを実行します。

    STORAGEKEY=$(az storage account keys list \
                    --resource-group $rg \
                    --account-name $STORAGEACCT \
                    --query "[0].value" | tr -d '"')
    
  3. erp-data-share という名前の Azure ファイル共有を作成するには、Cloud Shell で次のコマンドを実行します。

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

サービス エンドポイントを有効にする

次に、ストレージ アカウントを構成してデータベース サーバーからのみアクセスできるようにする必要があります。それには、Databases サブネットにストレージ エンドポイントを割り当てます。 次に、ストレージ アカウントにセキュリティ規則を追加します。

  1. Microsoft.Storage エンドポイントをサブネットに割り当てるには、Cloud Shell で次のコマンドを実行します。

    az network vnet subnet update \
        --vnet-name ERP-servers \
        --resource-group $rg \
        --name Databases \
        --service-endpoints Microsoft.Storage
    
  2. すべてのアクセスを拒否し、既定のアクションを Deny に変更するには、Cloud Shell で次のコマンドを実行します。 ネットワーク アクセスが拒否されると、ストレージ アカウントはどのネットワークからもアクセスできなくなります。

    az storage account update \
        --resource-group $rg \
        --name $STORAGEACCT \
        --default-action Deny
    
  3. ストレージ アカウントへのアクセスを制限するには、Cloud Shell で次のコマンドを実行します。 既定では、ストレージ アカウントはすべてのトラフィックを受け入れます。 Databases サブネットからのトラフィックのみをストレージにアクセスできるようにします。

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

ストレージ リソースへのアクセスをテストする

この手順では、両方のサーバーに接続し、ストレージ アカウントで DataServer のみが Azure ファイル共有にアクセスできることを確認します。

  1. AppServerDataServer のパブリック IP アドレスを変数に保存するには、Cloud Shell で次のコマンドを実行します。

    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 に接続し、Azure ファイル共有のマウントを試行するには、Cloud Shell で次のコマンドを実行します。

    ssh -t azureuser@$APPSERVERIP \
        "mkdir azureshare; \
        sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/erp-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 を作成したときのパスワードを入力します。

  4. 応答には mount error メッセージが含まれているはずです。 Applications サブネット上にストレージ アカウント用のサービス エンドポイントがないため、この接続は許可されません。

  5. DataServer VM に接続し、Azure ファイル共有のマウントを試行するには、Cloud Shell で次のコマンドを実行します。

    ssh -t azureuser@$DATASERVERIP \
        "mkdir azureshare; \
        sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/erp-data-share azureshare \
        -o vers=3.0,username=$STORAGEACCT,password=$STORAGEKEY,dir_mode=0777,file_mode=0777,sec=ntlmssp;findmnt \
        -t cifs; exit; bash"
    
  6. VM を作成したときのパスワードを入力します。

  7. マウントは成功し、応答には、マウント ポイントの詳細が含まれているはずです。 これが許可されるのは、Databases サブネット上でストレージ アカウント用のサービス エンドポイントを作成したからです。

Databases サブネットでストレージ サービス エンドポイントを使用することによって、DataServer でストレージにアクセスできることを確認しました。 また、AppServer ではストレージにアクセスできないことも確認しました。 これは、このサーバーが別のサブネット上にあり、仮想ネットワーク サービス エンドポイントにアクセスできないためです。