在 Azure Key Vault 中設定密碼編譯金鑰自動輪替

概觀

Key Vault 中的自動化密碼編譯金鑰輪替可讓使用者將 Key Vault 設定為以指定的頻率自動產生新的金鑰版本。 若要設定輪替,您可以使用金鑰輪替原則,這可以在每個個別金鑰上定義。

建議您至少每兩年輪替一次加密金鑰,以符合密碼編譯最佳做法。

如需 Key Vault 中物件版本設定方式的詳細資訊,請參閱 Key Vault 物件、識別碼和版本設定

Azure 服務整合

這項功能可實現端對端的零接觸輪替,利用儲存在 Azure Key Vault 中的客戶自控金鑰 (CMK) 為 Azure 服務提供待用加密功能。 請參閱特定的 Azure 服務文件,以了解該服務是否包含端對端輪替功能。

如需 Azure 中資料加密的詳細資訊,請參閱:

定價

每個排程的金鑰輪替都有額外的成本。 如需詳細資訊,請參閱 Azure Key Vault 定價頁面

需要的權限

Key Vault 金鑰輪替功能需要金鑰管理權限。 您可以指派「Key Vault 密碼編譯長」角色來管理輪替原則和隨選輪替。

如需如何使用 Key Vault RBAC 權限模型和指派 Azure 角色的詳細資訊,請參閱使用 Azure RBAC 來控制金鑰、憑證和祕密的存取權

注意

如果您使用存取原則權限模型,則必須設定「輪替」、「設定輪替原則」和「取得輪替原則」金鑰權限,才能管理金鑰的輪替原則。

金鑰輪替原則

金鑰輪替原則可讓使用者設定輪替和事件方格通知的接近到期通知。

金鑰輪替原則設定:

  • 到期時間:金鑰到期間隔。 其可用來設定新輪替金鑰的到期日。 其不會影響目前的金鑰。
  • 啟用/停用:用來啟用或停用金鑰輪替的旗標
  • 輪替類型:
    • 建立後於指定的時間自動更新 (預設值)
    • 在到期前的指定時間自動更新。 其需要在輪替原則上設定「到期時間」,並在金鑰上設定「到期日」。
  • 輪替時間:金鑰輪替間隔,最小值是建立後七天以及到到日後七天
  • 通知時間:事件方格通知的金鑰即將到期事件間隔。 其需要在輪替原則上設定「到期時間」,並在金鑰上設定「到期日」。

重要

金鑰輪替會產生具有新金鑰內容的現有金鑰新金鑰版本。 目標服務應該使用無版本金鑰 URI,自動重新整理至最新版的金鑰。 請確定您的資料加密解決方案儲存已設定版本的金鑰 URI,具有指向相同金鑰內容的資料以進行解密/解除包裝,如同用於加密/包裝作業一樣,以避免中斷服務。 所有 Azure 服務目前都遵循該模式進行資料加密。

Rotation policy configuration

設定金鑰輪替原則

在建立金鑰期間設定金鑰輪替原則。

Configure rotation during key creation

設定現有金鑰的輪替原則。

Configure rotation on existing key

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)}

隨選輪替

您可以手動叫用金鑰輪替。

入口網站

按一下 [立即輪替] 即可叫用輪替。

Rotation on-demand

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 匯入金鑰時,您可以設定即將到期通知作為手動輪換的提醒,或透過與事件方格整合作為自訂自動輪換的觸發程序。 您可以為通知設定到期前的天數、月份數和年份數,以觸發即將到期事件。

Configure Notification

如需 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 原則服務,您可以控管金鑰生命週期,並確保所有金鑰都設定為在指定天數內輪替。

建立及指派原則定義

  1. 瀏覽至原則資源
  2. 在 Azure 原則頁面左側的 [製作] 下,選取 [指派]
  3. 選取頁面頂端的 [指派原則]。 此按鈕會開啟至 [原則指派] 頁面。
  4. 輸入下列資訊:
    • 選擇要強制執行原則的訂用帳戶和資源群組,定義原則範圍。 按一下 [範圍] 欄位上的三個點按鈕即可選取。
    • 選取原則定義的名稱:「金鑰應該有輪替原則,以確保其輪替排程在建立後的指定天數內」。
    • 前往頁面頂端的 [參數] 索引標籤。
      • 輪替的天數上限參數設為所需天數,例如 730。
      • 定義原則所需的效果 (稽核或停用)。
  5. 填寫任何其他欄位。 按一下頁面底部的 [上一步] 和 [下一步] 按鈕,即可瀏覽索引標籤。
  6. 選取 [檢閱 + 建立]
  7. 選取 [建立]

指派內建原則後,可能需要長達 24 小時才能完成掃描。 掃描完成後,您可以看到如下所示的合規性結果。

Screenshot of key rotation policy compliance.

資源