Check ID:
Provider: Azure
Service:
Severity: MEDIUM
Categories:
Resource type:
vm_ensure_unattached_disks_encrypted_with_cmkProvider: Azure
Service:
vmSeverity: MEDIUM
Categories:
encryptionResource type:
microsoft.compute/disksWhat this check verifies
Unattached Azure managed disks use Customer-Managed Keys (CMK) for server-side encryption rather than platform-managed keys. Only disks not currently attached to a VM are in scope.
Risk
Without CMK, you lack independent key control on unattached disks. A compromised admin could attach a disk to read or alter data before you can revoke access. Missing customer-controlled rotation and revocation weakens confidentiality and integrity, and can hinder data-sovereignty compliance.Recommendation
Encrypt unattached disks with CMK backed by a hardened key service. Enforce least privilege for disk attachment and key usage, enable key rotation and auditing, and restrict access to keys. Apply lifecycle governance-remove stale disks-to reduce exposure and support defense in depth.Remediation
- CLI
- Terraform
- Native IaC
- Dashboard steps
az disk update -g <RESOURCE_GROUP> -n <DISK_NAME> —encryption-type EncryptionAtRestWithCustomerKey —disk-encryption-set <DES_ID>
References
- https://www.trendmicro.com/trendaivisiononecloudriskmanagement/knowledge-base/azure/VirtualMachines/sse-unattached-disk-cmk.html#
- https://learn.microsoft.com/en-us/azure/security/fundamentals/data-encryption-best-practices#protect-data-at-rest
- https://learn.microsoft.com/en-us/rest/api/compute/disks/delete?view=rest-compute-2023-10-02&tabs=HTTP
- https://learn.microsoft.com/en-us/azure/virtual-machines/disk-encryption-overview
Where this check fires
This check runs on every scheduled scan against your Azure account. Findings appear at Cloud Security → Findings filterable byCheck ID = vm_ensure_unattached_disks_encrypted_with_cmk. 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