練習 - 使用服務端點來限制對 Azure 儲存體的存取

已完成

身為解決方案架構師,您正打算將敏感性的工程圖表檔案移至 Azure 儲存體。 這些檔案必須僅供從公司網路內部的電腦存取。 您想要為「Azure 儲存體」建立虛擬網路服務端點,以保護對您儲存體帳戶的連線。

在本單元中,您將建立服務端點,並使用網路規則來限制對 Azure 儲存體的存取。 您將為資料庫子網路上的「Azure 儲存體」建立虛擬網路服務端點。 接著,您將確認 DataServer VM 能夠存取「Azure 儲存體」。 最後,您將確認位於不同子網路上的 AppServer VM 無法存取儲存體。

練習案例服務端點與規則的圖表。

將規則新增至網路安全性群組

在這裡,您要確保與 Azure 儲存體的通訊會經過服務端點。 您要新增連出規則來允許存取儲存體服務,但拒絕所有其他網際網路流量。

  1. 若要建立允許存取儲存體的輸出規則,請在 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 儲存體
Deny_Internet 輸出 200 拒絕從 VNet 到網際網路的存取

目前,AppServerDataServer 都能夠存取 Azure 儲存體服務。

設定儲存體帳戶和檔案共用

在此步驟中,您將建立新的儲存體帳戶,然後將 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"
    

啟用服務端點

您現在需要透過將儲存體端點指派給「資料庫」子網路,將儲存體帳戶設定成僅供從資料庫伺服器存取。 接著,您必須將安全性規則新增至儲存體帳戶。

  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 中執行下列命令。 儲存體帳戶預設會接受所有流量。 您想要只讓來自「資料庫」子網路的流量能夠存取儲存體。

    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 訊息。 由於應用程式子網路上的儲存體帳戶沒有服務端點,因此不會允許此連線。

  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. 掛接應該會成功,而回應則應該包含掛接點的詳細資料。 由於您已為資料庫子網路上的儲存體帳戶建立服務端點,因此會允許此連線。

藉由使用「資料庫」子網路上的儲存體服務端點,您現在已確認 DataServer 可存取儲存體。 您也已確認 AppServer 無法存取儲存體。 這是因為此伺服器位於不同的子網路上,而無法存取虛擬網路服務端點。