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

在 Azure Key Vault 中配置加密密钥自动轮换

概述

Key Vault 中的加密密钥自动轮换使客户可将 Key Vault 配置为按指定频率自动生成新的密钥版本。 若要配置轮换,可以使用密钥轮换策略,该策略可在每个单个密钥上定义。

我们的建议是至少每两年轮换一次加密密钥,以满足加密最佳做法。

有关如何对 Key Vault 中的对象进行版本控制的更多信息,请参见 Key Vault 对象、标识符和版本控制

与 Azure 服务集成

利用此功能,客户管理的密钥 (CMK) 存储在 Azure Key Vault 中的 Azure 服务可以对静态加密进行端到端的零接触轮换。 请参阅特定的 Azure 服务文档,了解该服务是否涵盖端到端轮换。

有关 Azure 中数据加密的详细信息,请参阅:

定价

每个计划的密钥轮换都会产生额外的费用。 有关详细信息,请参阅 Azure Key Vault 定价页

所需的权限

Key Vault 的密钥轮换功能需要密钥管理权限。 可以分配“Key Vault 加密管理人员”角色来管理轮换策略和按需轮换。

有关如何使用 Key Vault RBAC 权限模型和分配 Azure 角色的详细信息,请参阅:使用 Azure RBAC 控制对密钥、证书和机密的访问

注意

如果使用访问策略权限模型,需要设置“轮换”、“设置轮换策略”和“获取轮换策略”密钥权限来管理密钥的轮换策略。

密钥轮换策略

密钥轮换策略使用户可为即将到期通知配置轮换和事件网格通知。

密钥轮换策略设置:

  • 到期时间:密钥的过期时间间隔。 它用于设置新轮换密钥的到期日期。 它不会影响当前密钥。
  • 已启用/已禁用:用于启用或禁用密钥轮换的标志
  • 轮换类型:
    • 创建后,在给定时间自动续订(默认)
    • 在到期前在给定时间自动续订。 它需要对轮换策略设置“到期时间”,并对密钥设置“到期日期”。
  • 轮换时间:密钥轮换间隔,最小值为创建前七天和过期后七天
  • 通知时间:事件网格通知的密钥即将到期事件间隔。 它需要对轮换策略设置“到期时间”,并对密钥设置“到期日期”。

重要

密钥轮换使用新密钥材料生成现有密钥的新密钥版本。 目标服务应使用无版本密钥 URI 自动刷新到最新版本的密钥。 确保数据加密解决方案将存储版本控制密钥 URI,以及指向用于解密/解包的密钥材料(此密钥材料应与加密/包装操作所用的密钥材料相同)的数据,以避免服务中断。 所有 Azure 服务当前都遵循该模式进行数据加密。

轮换策略配置

配置密钥轮换策略

在密钥创建过程中配置密钥轮换策略。

在创建密钥时配置轮换

针对现有密钥配置轮换策略。

对现有密钥配置轮换

Azure CLI

将密钥轮换策略保存到文件。 密钥轮换策略示例:

{
  "lifetimeActions": [
    {
      "trigger": {
        "timeAfterCreate": "P18M",
        "timeBeforeExpiry": null
      },
      "action": {
        "type": "Rotate"
      }
    },
    {
      "trigger": {
        "timeBeforeExpiry": "P30D"
      },
      "action": {
        "type": "Notify"
      }
    }
  ],
  "attributes": {
    "expiryTime": "P2Y"
  }
}

使用 Azure CLI az keyvault key rotation-policy update 命令对传递以前保存的文件的密钥设置轮换策略。

az keyvault key rotation-policy update --vault-name <vault-name> --name <key-name> --value </path/to/policy.json>

Azure PowerShell

使用 Azure Powershell Set-AzKeyVaultKeyRotationPolicy cmdlet 设置轮换策略。

Set-AzKeyVaultKeyRotationPolicy -VaultName <vault-name> -KeyName <key-name> -ExpiresIn (New-TimeSpan -Days 720) -KeyRotationLifetimeAction @{Action="Rotate";TimeAfterCreate= (New-TimeSpan -Days 540)}

按需轮换

密钥轮换可以手动调用。

门户

单击“立即轮换”以调用轮换。

按需轮换

Azure CLI

使用 Azure CLI az keyvault key rotate 命令轮换密钥。

az keyvault key rotate --vault-name <vault-name> --name <key-name>

Azure PowerShell

使用 Azure PowerShell Invoke-AzKeyVaultKeyRotation cmdlet。

Invoke-AzKeyVaultKeyRotation -VaultName <vault-name> -Name <key-name>

配置密钥即将到期的通知

为事件网格密钥即将到期事件配置到期通知。 如果无法使用自动轮换(例如从本地 HSM 导入密钥时),可以将即将过期的通知配置为手动轮换提醒或通过与事件网格集成来触发自定义自动轮换。 可以将通知配置为在到期前几天、数月和数年触发即将到期的事件。

配置通知

有关 Key Vault 中的事件网格通知的详细信息,请参阅 Azure Key Vault 作为事件网格源

使用 ARM 模板配置密钥轮换

密钥轮换策略也可以使用 ARM 模板配置。

注意

它需要使用 Azure RBAC 配置的 Key Vault 上的“Key Vault 参与者”角色来通过管理平面部署密钥。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vaultName": {
            "type": "String",
            "metadata": {
                "description": "The name of the key vault to be created."
            }
        },
        "keyName": {
            "type": "String",
            "metadata": {
                "description": "The name of the key to be created."
            }
        },
        "rotatationTimeAfterCreate": {
            "defaultValue": "P18M",
            "type": "String",
            "metadata": {
                "description": "Time duration to trigger key rotation. i.e. P30D, P1M, P2Y"
            }
        },
        "expiryTime": {
            "defaultValue": "P2Y",
            "type": "String",
            "metadata": {
                "description": "The expiry time for new key version. i.e. P90D, P2M, P3Y"
            }
        },
        "notifyTime": {
            "defaultValue": "P30D",
            "type": "String",
            "metadata": {
                "description": "Near expiry Event Grid notification. i.e. P30D"
            }
        }

    },
    "resources": [
        {
            "type": "Microsoft.KeyVault/vaults/keys",
            "apiVersion": "2021-06-01-preview",
            "name": "[concat(parameters('vaultName'), '/', parameters('keyName'))]",
            "location": "[resourceGroup().location]",
            "properties": {
                "vaultName": "[parameters('vaultName')]",
                "kty": "RSA",
                "rotationPolicy": {
                    "lifetimeActions": [
                        {
                            "trigger": {
                                "timeAfterCreate": "[parameters('rotatationTimeAfterCreate')]",
                                "timeBeforeExpiry": ""
                            },
                            "action": {
                                "type": "Rotate"
                            }
                        },
                        {
                            "trigger": {
                                "timeBeforeExpiry": "[parameters('notifyTime')]"
                            },
                            "action": {
                                "type": "Notify"
                            }
                        }

                    ],
                    "attributes": {
                        "expiryTime": "[parameters('expiryTime')]"
                    }
                }
            }
        }
    ]
}

配置密钥轮换策略

使用 Azure Policy 服务,可以控制密钥生命周期,并确保将所有密钥配置为在指定的天数内轮换。

创建并分配策略定义

  1. 导航到策略资源
  2. 在“Azure Policy”页左侧的“创作”下选择“分配”。
  3. 选择页面顶部的“分配策略”。 此按钮会打开“策略分配”页面。
  4. 输入以下信息:
    • 通过选择要对其强制实施策略的订阅和资源组来定义策略的范围。 单击“范围”字段中的三点按钮进行选择。
    • 选择策略定义名称:“密钥应具有轮换策略,确保在创建后的指定天数内安排其轮换”。
    • 转到页面顶部的“参数”选项卡。
      • 将“最长轮换天数”参数设置为所需的天数,例如 730。
      • 定义策略的预期效果(“审核”或“已禁用”)。
  5. 填写任何其他字段。 单击页面底部的“上一步”和“下一步”按钮导航选项卡。
  6. 选择“查看 + 创建”
  7. 选择“创建”

分配内置策略后,可能需要 24 小时才能完成扫描。 扫描完成后,可以看到如下所示的符合性结果。

密钥轮换策略符合性的屏幕截图。

资源