Check ID:
Provider: Azure
Service:
Severity: MEDIUM
Categories:
Resource type:
monitor_storage_account_with_activity_logs_cmk_encryptedProvider: Azure
Service:
monitorSeverity: MEDIUM
Categories:
encryptionResource type:
microsoft.storage/storageaccountsWhat this check verifies
Azure Monitor Activity Logs sent to a Storage account are evaluated to confirm encryption with Customer-Managed Keys (CMK) instead of Microsoft-managed keys.
Risk
Storing activity logs without CMK weakens confidentiality and control of audit data. You lose independent key ownership, limiting rapid rotation/revocation and separation of duties. If storage credentials are compromised, attackers can exfiltrate logs that map resources and changes, aiding targeted attacks and hindering effective incident response.Recommendation
Encrypt the storage account that holds exported Activity Logs with Customer-Managed Keys via Azure Key Vault or Managed HSM. Apply least privilege to key usage, enforce regular rotation and revocation, and enable soft delete and purge protection. Complement with network isolation and immutable retention for defense in depth.Remediation
- CLI
- Terraform
- Native IaC
- Dashboard steps
az storage account update —name <example_resource_name> —resource-group <example_resource_name> —assign-identity —encryption-key-source Microsoft.Keyvault —encryption-key-vault <KeyVaultURI> —encryption-key-name <KeyName>
References
- https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/activity-log?tabs=cli#managing-legacy-log-profiles
- https://learn.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-data-protection#dp-5-encrypt-sensitive-data-at-rest
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/Monitor/use-cmk-for-activity-log-storage-container-encryption.html
Where this check fires
This check runs on every scheduled scan against your Azure account. Findings appear at Cloud Security → Findings filterable byCheck ID = monitor_storage_account_with_activity_logs_cmk_encrypted. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to Azure checks