演習 - サービス エンドポイントを使うことで Azure Storage へのアクセスを制限する
ソリューション アーキテクトであるあなたは、設計図の機密ファイルを Azure Storage に移す計画を立てています。 ファイルには、企業ネットワーク内のコンピューターからのみアクセスできるようにする必要があります。 あなたは、Azure Storage 用の仮想ネットワーク サービス エンドポイントを作成して、ストレージ アカウントへの接続をセキュリティで保護したいと考えています。
このユニットでは、サービス エンドポイントを作成し、ネットワーク ルールを使用して Azure Storage へのアクセスを制限します。 データベース サブネット上に Azure Storage 用の仮想ネットワーク サービス エンドポイントを作成します。 その後、 DataServer VM が Azure Storage にアクセスできることを確認します。 最後に、別のサブネット上にある AppServer VM がストレージにアクセスできないことを確認します。
ネットワーク セキュリティ グループに規則を追加する
ここでは、Azure Storage との通信がサービス エンドポイントを確実に通過するようにします。 Storage サービスへのアクセスを許可するが、その他すべてのインターネット トラフィックを拒否するアウトバウンド規則を追加します。
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"
すべてのインターネット アクセスを拒否するアウトバウンド規則を作成するには、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 を許可する |
httpルール | インバウンド | 150 | 80 で DataServer から AppServer へのアクセスを拒否する |
ストレージを許可 | アウトバウンド | 190 | Azure Storage へのアクセスを許可する |
インターネット拒否 | アウトバウンド | 200 | VNet からインターネットへのアクセスを拒否する |
この時点で、 AppServer と DataServer の両方が Azure Storage サービスにアクセスできます。
ストレージ アカウントとファイル共有を構成する
この手順では、新しいストレージ アカウントを作成した後、このアカウントに Azure ファイル共有を追加します。 このファイル共有は、設計図を保存する場所です。
技術ドキュメント用のストレージ アカウントを作成するには、Cloud Shell で次のコマンドを実行します。
STORAGEACCT=$(az storage account create \ --resource-group $rg \ --name engineeringdocs$RANDOM \ --sku Standard_LRS \ --query "name" | tr -d '"')
ストレージ アカウントの主キーを変数に格納するには、Cloud Shell で次のコマンドを実行します。
STORAGEKEY=$(az storage account keys list \ --resource-group $rg \ --account-name $STORAGEACCT \ --query "[0].value" | tr -d '"')
erp-data-share という名前の Azure ファイル共有を作成するには、Cloud Shell で次のコマンドを実行します。
az storage share create \ --account-name $STORAGEACCT \ --account-key $STORAGEKEY \ --name "erp-data-share"
サービス エンドポイントを有効にする
ストレージ エンドポイントを データベース サブネットに 割り当てることで、データベース サーバーからのみアクセスできるようにストレージ アカウントを構成する必要があります。 次に、ストレージ アカウントにセキュリティ規則を追加します。
Microsoft.Storage エンドポイントをサブネットに割り当てるには、Cloud Shell で次のコマンドを実行します。
az network vnet subnet update \ --vnet-name ERP-servers \ --resource-group $rg \ --name Databases \ --service-endpoints Microsoft.Storage
すべてのアクセスを拒否し、既定のアクションを
Deny
に変更するには、Cloud Shell で次のコマンドを実行します。 ネットワーク アクセスが拒否されると、ストレージ アカウントはどのネットワークからもアクセスできなくなります。az storage account update \ --resource-group $rg \ --name $STORAGEACCT \ --default-action Deny
ストレージ アカウントへのアクセスを制限するには、Cloud Shell で次のコマンドを実行します。 既定では、ストレージ アカウントはすべてのトラフィックを受け入れます。 データベース サブネットからのトラフィックのみがストレージにアクセスできるようにする必要があります。
az storage account network-rule add \ --resource-group $rg \ --account-name $STORAGEACCT \ --vnet-name ERP-servers \ --subnet Databases
ストレージ リソースへのアクセスをテストする
この手順では、両方のサーバーに接続し、 DataServer のみがストレージ アカウント上の Azure ファイル共有にアクセス可能であることを確認します。
AppServer と DataServer のパブリック 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)"
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"
VM を作成したときのパスワードを入力します。
応答には
mount error
メッセージが含まれているはずです。 Applications サブネットにストレージ アカウントのサービス エンドポイントがないため、この接続は許可されません。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"
VM を作成したときのパスワードを入力します。
マウントは成功し、応答には、マウント ポイントの詳細が含まれているはずです。 これは、 データベース サブネット上のストレージ アカウントのサービス エンドポイントを作成したために許可されます。
データベース サブネット上のストレージ サービス エンドポイントを使用して、DataServer がストレージにアクセスできることを確認しました。 AppServer がストレージにアクセスできないことも確認しました。 これは、このサーバーが別のサブネット上にあり、仮想ネットワーク サービス エンドポイントにアクセスできないためです。