使用私人端點保護 Key Vault

已完成

現在您已鎖定 MySQL 資料庫的網際網路存取,再來要執行類似的設定來保護 Key Vault 內容。

您已啟用私人端點,現在您可以封鎖資料庫的公用存取。

  1. 若要開始,您必須在要用來建立私人端點的子網路中,停用私人端點網路原則。

    az network vnet subnet update \
        --name $PRIVATE_ENDPOINTS_SUBNET_NAME \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VIRTUAL_NETWORK_NAME \
        --disable-private-endpoint-network-policies true
    
  2. 接下來,您將建立私人端點,對應至相同子網路內 Azure MySQL Database 單一伺服器執行個體。

    KEYVAULT_RESOURCE_ID=$(az resource show -g ${RESOURCE_GROUP} -n ${KEYVAULT_NAME} \
        --query "id" \
        --resource-type "Microsoft.KeyVault/vaults" -o tsv)
    
    az network private-endpoint create --resource-group $RESOURCE_GROUP \
        --vnet-name $VIRTUAL_NETWORK_NAME \
        --subnet $PRIVATE_ENDPOINTS_SUBNET_NAME \
        --name pe-openlab-keyvault \
        --private-connection-resource-id "$KEYVAULT_RESOURCE_ID" \
        --group-id vault \
        --connection-name openlab-keyvault-connection \
        --location $LOCATION
    

    建立私人端點之後,您將設定私人 Azure DNS 區域 (名為 privatelink.mysql.database.azure.com),以及一個符合原始 DNS 名稱及其尾碼 (mysql.database.azure.com) 的 DNS 記錄,但將該尾碼取代為 privatelink.mysql.database.azure.com。 連線至 MySQL 資料庫的應用程式不需要更新,但是可以改為繼續使用現有的連接字串。

  3. 若要實作此設定,請先建立新的私人 DNS 區域,然後連結至您的虛擬網路。

    az network private-dns zone create \
        --resource-group $RESOURCE_GROUP \
        --name "privatelink.vaultcore.azure.net"
    
    az network private-dns link vnet create \
        --resource-group $RESOURCE_GROUP \
        --zone-name "privatelink.vaultcore.azure.net" \
        --name MyVaultDNSLink \
        --virtual-network $VIRTUAL_NETWORK_NAME \
        --registration-enabled false
    
  4. 接下來,建立新的 A 記錄,指向新建私人端點的 IP 位址。

    KEYVAULT_NIC_ID=$(az network private-endpoint show \
        --name pe-openlab-keyvault \
        --resource-group $RESOURCE_GROUP \
        --query 'networkInterfaces[0].id' -o tsv)
    
    KEYVAULT_NIC_IPADDRESS=$(az resource show \
        --ids $KEYVAULT_NIC_ID \   
        --api-version 2019-04-01 -o json | jq -r '.properties.ipConfigurations[0].properties.privateIPAddress') \
    
    az network private-dns record-set a add-record -g $RESOURCE_GROUP -z "privatelink.vaultcore.azure.net" -n $KEYVAULT_NAME -a $KEYVAULT_NIC_IPADDRESS
    az network private-dns record-set list -g $RESOURCE_GROUP -z "privatelink.vaultcore.azure.net"
    
  5. 您現在可以完全封鎖 Azure MySQL Database 單一伺服器執行個體的公用端點連線。

    az keyvault update \
        --name $KEYVAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --public-network-access Disabled