azure - 如何使用托管磁盘的托管 HSM 中存储的客户管理 key 启用服务器端加密?

标签 azure terraform azure-powershell azure-virtual-machine azure-keyvault

我已使用以下 terraform 脚本创建并激活托管 HSM:

ma​​in.tf

data "azurerm_client_config" "current" {}

## Create a Resource Group
resource "azurerm_resource_group" "resource_group" {
  name     = var.resource_group_name
  location = var.location
}

## Create a Key Vault Managed Hardware Security Module
resource "azurerm_key_vault_managed_hardware_security_module" "kv_hsm" {
  name                       = var.kv_hsm_name
  resource_group_name        = azurerm_resource_group.resource_group.name
  location                   = azurerm_resource_group.resource_group.location
  sku_name                   = var.sku_name
  purge_protection_enabled   = true
  soft_delete_retention_days = 90
  tenant_id                  = data.azurerm_client_config.current.tenant_id
  admin_object_ids           = [data.azurerm_client_config.current.object_id]
  tags                       = var.tags

  depends_on = [
    azurerm_resource_group.resource_group
  ]
}

## Use openssl to generate 3 self signed certificate
resource "null_resource" "OPENSSLCERT" {
  count = 3
  provisioner "local-exec" {
    command = <<EOT
     cd  "C:\Program Files\Git\usr\bin"
    ./openssl.exe req -newkey rsa:2048 -nodes -keyout ${var.KeyName[count.index]}  -x509 -days 365 -out ${var.CertName[count.index]} -subj "/C=IN/ST=XX/L=XX/O=abc ltd/OU=Stack/CN=abc.com"
    EOT
    interpreter = [
      "PowerShell", "-Command"
    ]
  }
}

## Use the az keyvault security-domain download command to download the security domain and activate your managed HSM.
resource "null_resource" "securityDomain" {
  provisioner "local-exec" {
    command = <<EOT
    az keyvault security-domain download --hsm-name ${azurerm_key_vault_managed_hardware_security_module.kv_hsm.name} --sd-wrapping-keys ./certs/cert_0.cer ./certs/cert_1.cer ./certs/cert_2.cer --sd-quorum 2 --security-domain-file ${azurerm_key_vault_managed_hardware_security_module.kv_hsm.name}-SD.json
    EOT
    interpreter = [
      "PowerShell", "-Command"
    ]
  }
  depends_on = [
    null_resource.OPENSSLCERT,
    azurerm_key_vault_managed_hardware_security_module.kv_hsm
  ]
}

我已关注this文档以使用存储在托管磁盘的托管 HSM 中的客户管理 key 启用加密。但是在创建磁盘加密集时,我无法看到最近创建的托管 HSM。

如何使用 CLI/PowerShell/Portal 使用存储在托管 HSM 中的客户托管 key 为托管磁盘启用服务器端加密?

最佳答案

正如评论中提到的,您在门户中找不到 HSM Key Vault,因此您必须使用 Azure Keyvault Powershell ModuleAzure Keyvault CLI Module

作为解决方案,您可以在 Terraform 脚本中添加以下内容来使用托管 HSM 创建磁盘加密集:

resource "null_resource" "diskencryptionset" {
  provisioner "local-exec" {
    command = <<EOT
    $rgName='${azurerm_resource_group.example.name}'
    $location='${azurerm_resource_group.example.location}'
    $keyVaultName='${azurerm_key_vault_managed_hardware_security_module.example.name}'
    $keyName='diskencrytptionkey'
    $diskEncryptionSetName='ansumandiskset'
    az keyvault role assignment create --hsm-name $KeyvaultName --role "Managed HSM Crypto User" --assignee ${data.azurerm_client_config.current.object_id} --scope /
    az keyvault key create --hsm-name $keyVaultName --name $keyName --protection software
    $keyVaultKeyUrl=$(az keyvault key show --hsm-name $keyVaultName --name $keyName --query [key.kid] -o tsv)
    az disk-encryption-set create -n $diskEncryptionSetName -l $location -g $rgName --source-vault $keyVaultName --key-url $keyVaultKeyUrl --enable-auto-key-rotation false
    $desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)
    az keyvault role assignment create --hsm-name $keyVaultName --role "Managed HSM Crypto Service Encryption User" --assignee $desIdentity --scope /keys
    EOT
    interpreter = [
      "PowerShell","-Command"
    ]
  }
  depends_on = [
    null_resource.securityDomain
  ]
}

输出:

enter image description here

enter image description here

enter image description here

关于azure - 如何使用托管磁盘的托管 HSM 中存储的客户管理 key 启用服务器端加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70602153/

相关文章:

azure - Terraform代码如何将本地计算机下载的war文件部署到Azure应用程序服务上

azure - MongoDB Atlas 提供商 - Terraform

powershell - 如何为 Azure RM 订阅设置默认存储帐户

azure - Windows Azure,模拟部署与实际部署之间的差异

azure - 如何将 Azure Kubernetes 日志导出到存储帐户或从应用程序洞察中查看旧的 Pod 日志?

azure - 如何在不需要时在夜间/白天暂停或停止Azure APP服务?

powershell - Azure PowerShell 虚拟机警报电子邮件功能

azure - Azure 应用程序注册时的 API 权限问题

azure - Terraform Azure 数据工厂身份

azure - 如何使用 PowerShell 为已停止的 Azure Web App 禁用 Kudu (SCM)?