启用 Key Vault 日志记录

在创建一个或多个 Key Vault 之后,可能需要监视 Key Vault 的访问方式、时间和访问者。 有关该功能的完整详细信息,请参阅 Key Vault 日志记录

记录的内容:

  • 所有已经过身份验证的 REST API 请求,包括由于访问权限、系统错误或错误请求而发生的失败请求。
  • 对 Key Vault 本身执行的操作,包括创建、删除、设置 Key Vault 访问策略,以及更新 Key Vault 属性(例如标记)。
  • 对 Key Vault 中的密钥和机密执行的操作,包括:
    • 创建、修改或删除这些密钥或机密。
    • 签名、验证、加密、解密、包装和解包密钥、获取机密、列出密钥和机密(及其版本)。
  • 导致出现 401 响应的未经身份验证的请求。 例如,请求缺少持有者令牌、格式不正确或已过期,或者包含无效的令牌。
  • 以下情况的 Azure 事件网格通知事件:过期、即将过期和已更改的保管库访问策略(但新版本事件不会记录)。 即使密钥保管库上创建了事件订阅,也会记录事件。 有关详细信息,请参阅 Azure Key Vault 作为事件网格源

先决条件

若要完成本教程,你需要一个 Azure 密钥保管库。 可以使用以下方法之一创建新的密钥保管库:

你的日志还需要一个目的地。 此目的地可以是现有或新的 Azure 存储帐户和/或 Log Analytics 工作区。

可以使用以下方法之一创建新的 Azure 存储帐户:

可使用以下方法之一创建新的 Log Analytics 工作区:

连接到 Key Vault 订阅

如果有多个订阅与你的帐户相关联,则设置密钥日志记录的第一步是连接到包含你的密钥保管库的订阅。

在 Azure CLI 中,可以使用 az account list 命令查看所有订阅。 然后,使用 az account set 命令连接到其中一个:

az account list

az account set --subscription "<subscriptionID>"

在 Azure PowerShell 中,可以先使用 Get-AzSubscription cmdlet 列出订阅。 然后,使用 Set-AzContext cmdlet 连接到其中一个:

Get-AzSubscription

Set-AzContext -SubscriptionId "<subscriptionID>"

获取资源 ID

若要在密钥保管库上启用日志记录,你需要具有密钥保管库的资源 ID 以及目的地(Azure 存储或 Log Analytics 帐户)。

如果忘记密钥保管库的名称,可以使用 Azure CLI az keyvault list 命令或 Azure PowerShell Get-AzKeyVault cmdlet 来查找它。

使用密钥保管库的名称查找其资源 ID。 在 Azure CLI 中,使用 az keyvault show 命令。

az keyvault show --name "<your-unique-keyvault-name>"

在 Azure PowerShell 中,使用 Get-AzKeyVault cmdlet。

Get-AzKeyVault -VaultName "<your-unique-keyvault-name>"

密钥保管库的资源 ID 将采用如下格式:"/subscriptions/your-subscription-ID/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/your-unique-keyvault-name。 在下一步骤中请注意这一点。

启用日志记录

可以使用 Azure CLI、Azure PowerShell 或 Azure 门户为 Key Vault 启用日志记录。

Azure CLI

使用 Azure CLI az monitor diagnostic-settings create 命令、存储帐户 ID 和密钥保管库资源 ID,如下所示:

az monitor diagnostic-settings create --storage-account "<storage-account-id>" --resource "<key-vault-resource-id>" --name "Key vault logs" --logs '[{"category": "AuditEvent","enabled": true}]' --metrics '[{"category": "AllMetrics","enabled": true}]'

可以根据需要为日志设置保留策略,确保在指定时间后自动删除较旧的日志。 例如,可以将保留策略设置为自动删除超过 90 天的日志。

在 Azure CLI 中使用 az monitor diagnostic-settings update 命令。

az monitor diagnostic-settings update --name "Key vault retention policy" --resource "<key-vault-resource-id>" --set retentionPolicy.days=90

访问日志

Key Vault 日志存储在你所提供的存储帐户的“insights-logs-auditevent”容器中。 若要查看这些日志,必须下载 Blob。

首先,列出容器中的所有 Blob。 在 Azure CLI 中,使用 az storage blob list 命令。

az storage blob list --account-name "<your-unique-storage-account-name>" --container-name "insights-logs-auditevent"

在 Azure PowerShell 中,使用 Get-AzStorageBlob。 若要列出此容器中的所有 Blob,请输入:

Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context

在 Azure CLI 命令或 Azure PowerShell cmdlet 的输出中,你可以看到 Blob 名称的格式为 resourceId=<ARM resource ID>/y=<year>/m=<month>/d=<day of month>/h=<hour>/m=<minute>/filename.json。 日期和时间值使用协调世界时。

由于可以使用相同的存储帐户来收集多个资源的日志,Blob 名称中的完整资源 ID 适合用于仅访问或下载所需 Blob。

但首先,下载所有 blob。 在 Azure CLI 中,使用 az storage blob download 命令,向其传递 blob 名称以及打算用于保存结果的文件的路径。

az storage blob download --container-name "insights-logs-auditevent" --file <path-to-file> --name "<blob-name>" --account-name "<your-unique-storage-account-name>"

在 Azure PowerShell 中,使用 Get-AzStorageBlob cmdlet 获取 blob 列表。 然后将该列表发送到 Get-AzStorageBlobContent cmdlet,以将日志下载到所选路径。

$blobs = Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context | Get-AzStorageBlobContent -Destination "<path-to-file>"

在 PowerShell 中运行第二个 cmdlet 时,blob 名称中的 / 分隔符会在目标文件夹下创建完整的文件夹结构。 你将使用此结构下载 Blob 并将其存储为文件。

若要选择性地下载 Blob,请使用通配符。 例如:

  • 如果有多个密钥保管库,并只想要下载其中名为 CONTOSOKEYVAULT3 的密钥保管库的日志:

    Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context -Blob '*/VAULTS/CONTOSOKEYVAULT3
    
  • 如果有多个资源组,并只想要下载其中某个资源组的日志,请使用 -Blob '*/RESOURCEGROUPS/<resource group name>/*'

    Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context -Blob '*/RESOURCEGROUPS/CONTOSORESOURCEGROUP3/*'
    
  • 如果要下载 2019 年 1 月份的所有日志,请使用 -Blob '*/year=2019/m=01/*'

    Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context -Blob '*/year=2016/m=01/*'
    

使用 Azure Monitor 日志

可以使用 Azure Monitor 日志中的 Key Vault 解决方案查看 Key Vault AuditEvent 日志。 在 Azure Monitor 日志中,可以使用日志查询来分析数据并获取所需的信息。 有关详细信息,请参阅监视密钥保管库

后续步骤