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

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

适用于:✔️ Linux VM

本“作方法”演示如何使用 Azure Command-Line 接口(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 2.0.30 或更高版本。 运行 az --version 即可查找版本。 如果需要安装或升级,请参阅 安装 Azure CLI

创建资源组

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

注释

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

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. 创建机密 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
    

后续步骤