共用方式為


使用機密 VM 保護金鑰發行操作指南

下列文章說明當您的應用程式使用 AMD SEV-SNP 型機密虛擬機器執行時,如何從 Azure Key Vault 執行保護金鑰發行。 若要深入瞭解保護金鑰發行和 Azure 機密運算, 請前往這裡。

SKR 要求執行 SKR 的應用程式必須使用 Microsoft Azure 證明 (MAA) 進行遠端訪客證明流程,如這裡所述。

整體流程和架構

若要允許 Azure Key Vault 將金鑰發行至證明的機密虛擬機,必須遵循特定步驟:

  1. 將身分識別指派給機密虛擬機器。 支援系統指派的受控識別或使用者指派的受控識別。
  2. 設定 Key Vault 存取原則,以授與受控識別「發行」金鑰的權限。 原則可讓機密虛擬機器存取 Key Vault 並執行發行作業。 如果使用 Key Vault 受控 HSM,請指派「受控 HSM 密碼編譯服務發行使用者」角色成員資格。
  3. 建立標示為可匯出且具有相關聯發行原則的 Key Vault 金鑰。 金鑰發行原則會將金鑰與證明的機密虛擬機產生關聯,且金鑰只能用於所需的用途。
  4. 若要執行發行,請從機密虛擬機將 HTTP 要求傳送至 Key Vault。 HTTP 要求必須在要求本文中包含機密 VM 證明的平台報告。 證明的平台報告可用來驗證受信任執行環境啟用平台之狀態的可信度,例如機密 VM。 Microsoft Azure 證明服務可用來建立證明的平台報表,並將其包含在要求中。

我們將執行的上述作業圖表。

部署 Azure Key Vault

使用可匯出金鑰設定 AKV Premium 或 AKV mHSM。 請遵循此處的詳細指示, 設定 SKR 可匯出金鑰

Bicep

@description('Required. Specifies the Azure location where the key vault should be created.')
param location string = resourceGroup().location

@description('Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet.')
param tenantId string = subscription().tenantId

resource keyVault 'Microsoft.KeyVault/vaults@2021-11-01-preview' = {
  name: 'mykeyvault'
  location: location
  properties: {
    tenantId: tenantId
    sku: {
      name: 'premium'
      family: 'A'
    }
  }
}

ARM 範本

    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2021-11-01-preview",
      "name": "mykeyvault",
      "location": "[parameters('location')]",
      "properties": {
        "tenantId": "[parameters('tenantId')]",
        "sku": {
          "name": "premium",
          "family": "A"
        }
      }
    }

部署機密虛擬機器

請遵循快速入門指示,瞭解如何「 使用 ARM 範本部署機密 VM

啟用系統指派的受控識別

資源的受控身分識別會在 Microsoft Entra ID 中為 Azure 服務提供自動受控身分識別。 您可以使用此身分識別來向任何支援 Microsoft Entra 驗證的服務進行驗證,不需要任何您程式碼中的認證。

若要在 CVM 上啟用系統指派的受控識別,您的帳戶需要虛擬機器參與者角色指派。 不需要其他的 Microsoft Entra 目錄角色指派。

  1. 無論您是在本機登入 Azure 或透過 Azure 入口網站登入,都請使用與包含虛擬機器的 Azure 訂用帳戶相關聯的帳戶。

  2. 若要啟用系統指派的受控識別,請將範本載入到編輯器、找出感興趣的 Microsoft.Compute/virtualMachines 資源,然後在與 "identity" 屬性相同的層級上新增 name: vmName 屬性。 使用下列語法:

       identity:{
         type: 'SystemAssigned'
       }
    
  3. resource 詳細資料新增至範本。

     resource confidentialVm 'Microsoft.Compute/virtualMachines@2021-11-01' = {
       name: vmName
       location: location
       identity:{
         type: 'SystemAssigned'
       }
       // other resource provider properties
     }