你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何为 Azure 机密 VM 创建自定义映像

适用于:✔️ Linux VM

本“操作方法”演示如何使用 Azure 命令行接口 (Azure CLI) 为 Azure 中的机密虚拟机(机密 VM)创建自定义映像。 Azure CLI 用于从命令行或脚本创建和管理 Azure 资源。

创建自定义映像允许使用满足要求的特定软件、设置和安全措施预配置机密 VM。 如果要引入与 机密 VM 不兼容的 Ubuntu 映像,可以按照以下步骤查看映像的最低要求。

先决条件

如果还没有 Azure 订阅,可以在开始前创建一个免费 Azure 帐户

启动 Azure Cloud Shell

Azure Cloud Shell 是免费的交互式 shell,可以使用它运行本文中的操作步骤。 它预安装有常用 Azure 工具并将其配置与帐户一起使用。

若要打开 Cloud Shell,只需要从代码块的右上角选择“试一试”。 也可以在单独的浏览器标签页中通过转到 https://shell.azure.com/bash 打开 Cloud Shell。 选择“复制”以复制代码块,将其粘贴到 Cloud Shell 中,然后选择 Enter 来运行它。

如果希望在本地安装并使用 CLI,则本快速入门需要 Azure CLI version 2.0.30 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

创建资源组

使用“az group create”命令创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。

注意

机密 VM 并非在所有位置都可用。 有关当前支持的位置,请参阅可用的 VM 产品(按 Azure 区域)

az group create --name $resourceGroupName --location eastus

为 Azure 机密 VM 创建自定义映像

  1. 从Azure 支持映像列表中创建具有所选 Ubuntu 映像的虚拟机

  2. 确保内核版本至少为 5.15.0-1037-azure。 连接到 VM 以检查内核版本后,可以使用“uname -r”。 在这里,可以根据需要向图像添加任何更改。

  3. 解除分配虚拟机。

    az vm deallocate --name $vmname --resource-group $resourceGroupName
    
  4. 为 OS 磁盘创建共享访问令牌(SAS 令牌),并将其存储在变量中。 请注意,此 OS 磁盘不必与机密 VM 位于同一资源组中。

    disk_name=$(az vm show --name $vmname --resource-group $resourceGroupName | jq -r .storageProfile.osDisk.name)
    disk_url=$(az disk grant-access --duration-in-seconds 3600 --name $disk_name --resource-group $resourceGroupName | jq -r .accessSas)
    

创建用于存储导出磁盘的存储帐户

  1. 创建存储帐户。
    az storage account create --resource-group ${resourceGroupName} --name ${storageAccountName} --location $region --sku "Standard_LRS"
    
  2. 在存储帐户中创建容器。
    az storage container create --name $storageContainerName --account-name $storageAccountName --resource-group $resourceGroupName
    
  3. 将读取共享访问令牌(SAS 令牌)生成到 存储容器 ,并将其保存在变量中。
    container_sas=$(az storage container generate-sas --name $storageContainerName --account-name $storageAccountName --auth-mode key --expiry 2024-01-01 --https-only --permissions dlrw -o tsv)
    
  4. 使用 azcopy 将 OS 磁盘复制到存储容器。
     blob_url="https://${storageAccountName}.blob.core.windows.net/$storageContainerName/$referenceVHD"
     azcopy copy "$disk_url" "${blob_url}?${container_sas}"
    

创建机密支持的映像

  1. 创建共享映像库。
    az sig create --resource-group $resourceGroupName --gallery-name $galleryName
    
  2. 创建 支持的共享映像库(SIG)定义 机密 VM。 为库映像定义、SIG 发布服务器和 SKU 设置新名称。
    az sig image-definition create --resource-group  $resourceGroupName --location $region --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --publisher $sigPublisherName --offer ubuntu --sku $sigSkuName --os-type Linux --os-state specialized --hyper-v-generation V2  --features SecurityType=ConfidentialVMSupported
    
  3. 获取存储帐户 ID。
    storageAccountId=$(az storage account show --name $storageAccountName --resource-group $resourceGroupName | jq -r .id)
    
  4. 创建 SIG 映像版本。
    az sig image-version create --resource-group $resourceGroupName --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --os-vhd-storage-account $storageAccountId --os-vhd-uri $blob_url
    
  5. 存储在上一步中创建的 SIG 映像版本的 ID。
    galleryImageId=$(az sig image-version show --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --gallery-name $galleryName --resource-group $resourceGroupName | jq -r .id)
    

创建机密 VM

  1. 使用 az vm create 命令创建 VM。 有关详细信息,请参阅安全启动和 vTPM。 有关磁盘加密的详细信息,请参阅机密 OS 磁盘加密。 目前机密 VM 支持 DC 系列和 EC 系列 VM 大小。
    az vm create \
    --resource-group $resourceGroupName \
    --name $cvmname \
    --size Standard_DC4as_v5 \
    --enable-vtpm true \
    --enable-secure-boot true \
    --image $galleryImageId \
    --public-ip-sku Standard \
    --security-type ConfidentialVM \
    --os-disk-security-encryption-type VMGuestStateOnly \
    --specialized
    

后续步骤