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

通过在 Key Vault 中自动轮换加密密钥,可以设置 Key Vault 以按所选频率自动创建新的密钥版本。 若要设置轮换,请使用密钥轮换策略,可以为每个单独的密钥定义该策略。

若要遵循加密最佳做法,请至少每两年轮换加密密钥。

有关 Key Vault 如何版本对象的详细信息,请参阅 Key Vault 对象、标识符和版本控制。 若要全面了解 Azure Key Vault 中不同资产类型的自动轮次概念,请参阅 了解 Azure Key Vault 中的自动轮次

与 Azure 服务集成

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

注意

轮换 Azure 服务使用的客户管理的密钥时,每个服务检测并应用新密钥版本所需的时间各不相同(从一小时到 24 小时或更多)。 有关轮换后何时可以安全地禁用旧密钥版本的指南,请参阅特定的 Azure 服务文档。

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

定价

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

所需的权限

Key Vault 密钥轮换功能需要密钥管理权限。 分配 Key Vault Crypto Officer 角色来管理轮换策略和按需轮换。

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

注意

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

密钥轮换策略

密钥轮换策略允许您为即将过期的通知配置轮换,并通过事件网格发送通知。

密钥轮换策略设置:

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

重要

密钥轮换使用新密钥材料生成现有密钥的新密钥版本。 目标服务应使用无版本密钥 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)}

按需轮换

可以手动调用密钥轮换。

Portal

选择“ 立即旋转 ”以启动旋转过程。

按需轮换

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."
            }
        },
        "rotationTimeAfterCreate": {
            "defaultValue": "P18M",
            "type": "String",
            "metadata": {
                "description": "Time duration to trigger key rotation, for example, P30D, P1M, P2Y."
            }
        },
        "expiryTime": {
            "defaultValue": "P2Y",
            "type": "String",
            "metadata": {
                "description": "The expiry time for new key version, for example, P90D, P2M, P3Y."
            }
        },
        "notifyTime": {
            "defaultValue": "P30D",
            "type": "String",
            "metadata": {
                "description": "Near expiry Event Grid notification, for example, 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('rotationTimeAfterCreate')]",
                                "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 小时才能完成扫描。 扫描完成后,可以看到如下所示的符合性结果。

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

资源