產生 VM 映像的 SAS URI
注意
共用存取簽章 (SAS) URI 可用來發佈虛擬機 (VM)。 或者,您也可以透過 Azure 計算資源庫在合作夥伴中心共用映像。 如需 進一步指示,請參閱使用核准的基底 建立虛擬機或 使用您自己的映像 建立虛擬機。
開始之前,您將需要下列專案:
- 虛擬機器
- 具有用來儲存虛擬硬碟容器的記憶體帳戶 (VHD)
- 儲存體 帳戶金鑰
從 VM 擷取 VHD
注意
如果您已經將 VHD 上傳至記憶體帳戶,則可以略過此步驟。
若要從 VM 擷取 VHD,您必須先擷取 VM 磁碟的快照集,然後將 VHD 從快照集擷取到記憶體帳戶。
擷取 VM 磁碟的快照集
- 登入 Azure 入口網站。
- 選取 [建立資源],然後搜尋並選取 [ 快照集]。
- 在 [快照集] 刀鋒視窗中,選取 [ 建立]。
- 選取 [訂用帳戶]。 在選取的訂用帳戶或 [新建 ] 內選取現有的資源群組,然後輸入要建立之新資源群組的名稱。 這是快照集將與其相關聯的資源群組。
- 輸入快照集的 [名稱]。
- 針對 [ 來源類型],選取 [ 磁碟]。
- 選取 [ 來源訂用帳戶],這是包含 VM 磁碟的訂用帳戶。 這可能與新快照集的目的地訂用帳戶不同。
- 在 [來源磁碟] 中,選取要建立快照集的受控磁碟。
- 針對 [ 記憶體類型],請選取 [標準 HDD ],除非您需要儲存在高效能 SSD 上。
- 選取 [檢閱 + 建立] 。 驗證成功后,選取 [ 建立]。
將 VHD 擷取到記憶體帳戶
使用下列腳本,將快照集導出至記憶體帳戶中的 VHD。 針對每個參數,請據以插入資訊。
#Provide the subscription Id where the snapshot is created
subscriptionId=yourSubscriptionId
#Provide the name of your resource group where the snapshot is created
resourceGroupName=myResourceGroupName
#Provide the snapshot name
snapshotName=mySnapshot
#Provide Shared Access Signature (SAS) expiry duration in seconds (such as 3600)
#Know more about SAS here: https://learn.microsoft.com/azure/storage/storage-dotnet-shared-access-signature-part-1
sasExpiryDuration=3600
#Provide storage account name where you want to copy the underlying VHD file.
storageAccountName=mystorageaccountname
#Name of the storage container where the downloaded VHD will be stored.
storageContainerName=mystoragecontainername
#Provide the access key for the storage account that you want to copy the VHD to.
storageAccountKey=mystorageaccountkey
#Give a name to the destination VHD file to which the VHD will be copied.
destinationVHDFileName=myvhdfilename.vhd
az account set --subscription $subscriptionId
sas=$(az snapshot grant-access --resource-group $resourceGroupName --name $snapshotName --duration-in-seconds $sasExpiryDuration --query [accessSas] -o tsv)
az storage blob copy start --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-name $storageAccountName --account-key $storageAccountKey --source-uri $sas
上述腳本會使用下列命令來產生快照集的SAS URI,並使用SAS URI將基礎 VHD 複製到記憶體帳戶。
Command | 注意 |
---|---|
az disk grant-access | 產生唯讀 SAS,用來將基礎 VHD 檔案複製到記憶體帳戶,或將其下載至內部部署。 |
az storage blob copy start | 以異步方式將 Blob 從一個記憶體帳戶複製到另一個記憶體帳戶。 使用 az storage blob show 來檢查新 Blob 的狀態。 |
產生SAS URI
有兩個常用工具來建立 SAS 位址(URI):
- Azure 儲存體 瀏覽器 – 可在 Azure 入口網站 上使用。
- Azure CLI – 建議用於非 Windows 作業系統和自動化或持續整合環境。
使用工具 1:Azure 儲存體 瀏覽器
- 移至您的 記憶體帳戶。
- 開啟 [記憶體瀏覽器 ],然後選取 [Blob 容器]。
- 在您的 容器中,以滑鼠右鍵按下 VHD 檔案,然後選取 [ 產生 SAS]。
- 在顯示的 [ 共用存取簽章 ] 功能表中,完成下列欄位:
- 許可權 – 選取讀取許可權。 請勿提供寫入或刪除許可權。
- 開始日期/時間 – 這是 VHD 存取的許可權開始日期。 若要防止 UTC 時間變更,請提供目前日期前一天的日期。 例如,如果目前的日期是 2022 年 7 月 15 日,請將日期設定為 2022/07/14。
- 到期日期/時間 – 這是 VHD 存取的許可權到期日。 提供至少比目前日期還三周的日期。
- 若要為此 VHD 建立相關聯的 SAS URI,請選取 [ 產生 SAS 令牌和 URL]。
- 複製 Blob SAS URL,並將它儲存到安全位置的文字檔。
- 針對您想要發佈的每個 VHD 重複這些步驟。
注意
如果您需要同時產生具有讀取和清單許可權的 SAS URI,您可以在容器層級產生它。 請遵循上述相同的步驟,但請務必同時選取讀取和列表許可權。 完成步驟 6 之後,您必須在 “?sp=rl” 之前新增 Blob 檔名,以參考容器內的 VHD 檔案。 例如,如果 VHD 檔案是 “mytestvhd.vhd”,SAS URI 看起來會像這樣:
<container-service-endpoint>/mytestvhd.vhd?<sas-connection-string>
使用工具 2:Azure CLI
在 Azure CLI 中,執行下列命令:
Azure CLICopy
開啟 Cloud Shell,執行下列命令:
az storage container generate-sas --connection-string 'DefaultEndpointsProtocol=https;AccountName=\<account-name\>;AccountKey=\<account-key\>;EndpointSuffix=core.windows.net' --name \<container-name\> --permissions r --start '\<start-date\>' --expiry '\<expiry-date\>'
執行上述命令之前,請記得插入下列參數值。
參數值 描述 account-name 您的 Azure 記憶體帳戶名稱。 account-key 您的 Azure 記憶體帳戶金鑰。 container-name 裝載 VHD 檔案的 Blob 容器。 start-date 這是 VHD 存取的許可權開始日期。 提供目前日期前一天的日期。 例如,如果目前的日期是 2022 年 7 月 15 日,請將日期設定為 2022/07/14。 以 UTC 日期/時間格式提供日期(YYYY-MM-DDT00:00:00Z),例如 2022-04-01T00:00:00Z。 expiry-date 這是 VHD 存取的許可權到期日。 提供目前日期之後至少三周的日期。 以 UTC 日期/時間格式提供日期(YYYY-MM-DDT00:00:00Z),例如 2022-04-01T00:00:00Z。 複製 SAS 連接字串,並將它儲存到安全位置的文字檔。 編輯此字串以新增 VHD 位置資訊,以建立最終的 SAS URI。
在 Azure 入口網站 中,移至包含與新 URI 相關聯之 VHD 的 Blob 容器。
複製 Blob 服務端點的 URL。
使用步驟 2 中的 SAS 連接字串 編輯文字檔。 使用此格式建立完整的SAS URI。 請務必在端點 URL 與 連接字串 之間插入 “?” 。
<blob-service-endpoint-url>?<sas-connection-string>
虛擬機 SAS 失敗訊息
下表顯示合作夥伴中心提供共用存取簽章 (SAS) URI 時遇到的常見錯誤,以及建議的解決方案。
問題 | 失敗訊息 | Fix |
---|---|---|
在 SAS URI 中找不到 “?” | Must be a valid Azure shared access signature URI. |
請確定提供的 SAS URI 使用適當的語法,並包含 “?”字元。 語法: <blob-service-endpoint-url>?<sas-connection-string> |
“st” 參數不在 SAS URI 中 | Specified SAS URL cannot be reached. |
使用適當的 開始日期 (“st”) 值更新 SAS URI。 |
“se” 參數不在 SAS URI 中 | The end date parameter (se) is required. |
使用適當的 結束日期 (“se”) 值更新 SAS URI。 |
“sp=r” 不在 SAS URI 中 | Missing Permissions (sp) must include 'read' (r). |
使用設定為 Read 「sp=r」 的許可權來更新 SAS URI。 |
SAS URI 授權錯誤 | Failure: Copying Images. Not able to download blob due to authorization error. |
檢閱並更正SAS URI格式。 必要時重新產生。 |
SAS URI “st” 和 “se” 參數沒有完整的日期時間規格 | The start time parameter (st) is not a valid date string. OR The end date parameter (se) is not a valid date string. |
SAS URI 開始日期和結束日期參數 (“st” 和 “se” 子字串) 必須具有完整的日期時間格式 (YYYY-MM-DDT00:00:00Z),例如 11-02-2017T00:00:00Z。 縮短的版本無效(Azure CLI 中的某些命令預設可能會產生縮短的值)。 |
如需詳細資訊,請參閱使用共用存取簽章將有限的存取權授與 Azure 儲存體 資源。
確認 SAS URI
在合作夥伴中心發佈 SAS URI 之前,請先檢查 SAS URI,以避免在提交要求之後發生任何與 SAS URI 相關的問題。 此程式是選擇性的,但建議使用。
- URI 包含您的 VHD 映像檔名,包括擴充名稱
.vhd
。 Sp=r
會出現在 URI 中間附近。 此字串會顯示已授與讀取許可權。- 出現時
sr=c
,這表示已指定容器層級存取。 - 將 URI 複製並貼到瀏覽器中以測試下載 Blob(您可以在下載完成之前取消作業)。