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

已完成

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

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

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

備註

此練習為選擇性項目。 如果您想要完成此練習,您必須先建立 Azure 訂用帳戶,才能開始。 如果您沒有 Azure 帳戶,或目前不想建立帳戶,您可以閱讀指示,以便瞭解所呈現的資訊。

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

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

  1. 開啟 Azure Cloud Shell

  2. 若要建立允許存取儲存體的輸出規則,請在 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"
    
  3. 若要建立拒絕所有網際網路存取的輸出規則,請在 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
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"
    

啟用服務端點

您現在必須將記憶體端點指派給 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 中執行下列命令。 儲存體帳戶預設會開啟以接受所有流量。 您想要只讓來自「資料庫」子網路的流量能夠存取儲存體。

    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 無法存取記憶體。 這是因為此伺服器位於不同的子網路上,而無法存取虛擬網路服務端點。