About disk encryption


By default, Compute Engine encrypts customer content at rest. Compute Engine handles encryption for you without any additional actions on your part. This option is called Google default encryption.

However, you can customize the encryption Compute Engine uses for your resources by providing key encryption keys (KEKs). Key encryption keys don't directly encrypt your data, but encrypt the Google-generated keys Compute Engine uses to encrypt your data.

You have two options to provide key encryption keys:

  • Recommended. Use customer-managed encryption keys (CMEKs) in Cloud KMS with Compute Engine. Using Cloud KMS keys gives you control over their protection level, location, rotation schedule, usage and access permissions, and cryptographic boundaries. Using Cloud KMS also lets you track key usage, view audit logs, and control key life cycles. Instead of Google owning and managing the symmetric key encryption keys (KEKs) that protect your data, you control and manage these keys in Cloud KMS.

    You can create CMEKs manually, or you can use Cloud KMS Autokey to have them created automatically on your behalf.

    In most cases, after you create a CMEK-encrypted disk, you don't need to specify the key when working with the disk.

  • You can manage your own key encryption keys outside of Compute Engine, and provide the key whenever you create or manage a disk. This option is known as customer-supplied encryption keys (CSEKs). When you manage CSEK-encrypted resources, you must always specify the key you used when encrypting the resource.

For more information about each encryption type, see Customer-managed encryption keys and Customer-supplied encryption keys.

To add an additional layer of security to your Hyperdisk Balanced disks, enable Confidential mode. Confidential mode adds hardware-based encryption to your Hyperdisk Balanced disks.

Supported disk types

This section lists the supported encryption types for disks and other storage options offered by Compute Engine.

CMEK with Cloud KMS Autokey

If you choose to use Cloud KMS keys to protect your Compute Engine resources, you can either create CMEKs manually or use Cloud KMS Autokey to create the keys. With Autokey, key rings and keys are generated on demand as part of resource creation in Compute Engine. Service agents that use the keys for encrypt and decrypt operations are created if they don't already exist and are granted the required Identity and Access Management (IAM) roles. For more information, see Autokey overview.

To learn how to use CMEKs created by Cloud KMS Autokey to protect your Compute Engine resources, see Using Autokey with Compute Engine resources.

Snapshots

When using Autokey to create keys to protect your Compute Engine resources, Autokey doesn't create new keys for snapshots. You must encrypt a snapshot with the same key used to encrypt the source disk. If you create a snapshot using the Google Cloud console, the encryption key used by the disk is automatically applied to the snapshot. If you create a snapshot using the gcloud CLI, Terraform, or the Compute Engine API, you must get the resource identifier of the key used to encrypt the disk and then use that key to encrypt the snapshot.

Encrypt disks with customer-managed encryption keys

For more information about how to use manually-created customer-managed encryption keys (CMEK) to encrypt disks and other Compute Engine resources, see Protect resources by using Cloud KMS keys.

Encrypt disks with customer-supplied encryption keys

To learn how to use customer-supplied encryption keys (CSEK) to encrypt disks and other Compute Engine resources, see Encrypting disks with customer-supplied encryption keys.

View information about a disk's encryption

Disks in Compute Engine are encrypted with either Google-managed, customer-managed, or customer-supplied encryption keys. Google-managed encryption is the default.

To view a disk's encryption type, you can use the gcloud CLI, Google Cloud console, or the Compute Engine API.

Console

  1. In the Google Cloud console, go to the Disks page.

    Go to Disks

  2. In the Name column, click the name of the disk.

  3. In the Properties table, the row labeled Encryption indicates the type of encryption: Google-managed, customer-managed, or customer-supplied.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Use the gcloud compute disks describe command:

        gcloud compute disks describe DISK_NAME \
          --zone=ZONE \
          --format="json(diskEncryptionKey)"
      

    Replace the following:

    • PROJECT_ID: your project ID.
    • ZONE: the zone where your disk is located.
    • DISK_NAME: the name of the disk.

      Command output

      If the output is null, the disk uses the Google-managed encryption, which is the default.

      Otherwise, the output is a JSON object.

      If the JSON object contains a field named diskEncryptionKey, the disk is encrypted. The diskEncryptionKey object contains information about whether the disk is CMEK- or CSEK-encrypted:

      • If the diskEncryptionKey.kmsKeyName property is present, the disk is CMEK-encrypted. The kmsKeyName property indicates the name of the specific key used to encrypt the disk:
        {
          "diskEncryptionKey": {
            "kmsKeyName": "projects/my-proj/.."
          }
        }
        
      • If the diskEncryptionKey.sha256 property is present, the disk is CSEK-encrypted. The sha256 property is the SHA-256 hash of the customer-supplied encryption key that protects the disk.
          {
            "diskEncryptionKey": {
              "sha256": "abcdefghijk134560459345dssfd"
            }
          }
            

API

Make a POST request to the compute.disks.get method.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME

Replace the following:

  • PROJECT_ID: your project ID.
  • ZONE: the zone where your disk is located.
  • DISK_NAME: the name of the disk

Request response

If the response is null, the disk uses Google-managed encryption, which is the default.

Otherwise, the response is a JSON object.

If the JSON object contains a field named diskEncryptionKey, the disk is encrypted. The diskEncryptionKey object contains information about whether the disk is CMEK- or CSEK-encrypted:

  • If the diskEncryptionKey.kmsKeyName property is present, the disk is CMEK-encrypted. The kmsKeyName property indicates the name of the specific key used to encrypt the disk:
    {
      "diskEncryptionKey": {
        "kmsKeyName": "projects/my-proj/.."
      }
    }
    
  • If the diskEncryptionKey.sha256 property is present, the disk is CSEK-encrypted. The sha256 property is the SHA-256 hash of the customer-supplied encryption key that protects the disk.
      {
        "diskEncryptionKey": {
          "sha256": "abcdefghijk134560459345dssfd"
        }
      }
        

If the disk uses CMEK-encryption, you can find detailed information about the key, its key ring and location by following the steps in View keys by project.

If the disk uses CSEK-encryption, contact your organization's administrator for details about the key. Using CMEK, you can also see what resources that key protects with key usage tracking. For more information, see View key usage.

Confidential mode for Hyperdisk Balanced

If you use Confidential Computing, you can extend the hardware-based encryption to your Hyperdisk Balanced volumes by enabling Confidential mode.

Confidential mode for your Hyperdisk Balanced volumes lets you enable additional security without having to refactor the application. Confidential mode is a property that you can specify when you create a new Hyperdisk Balanced volume.

Hyperdisk Balanced volumes in Confidential mode can only be used with Confidential VMs.

To create a Hyperdisk Balanced volume in Confidential mode, see Enable Confidential mode for Hyperdisk Balanced volumes.

Supported machine types for Hyperdisk Balanced volumes in Confidential mode

Hyperdisk Balanced volumes in Confidential mode can only be used with Confidential VMs that use the N2D machine type.

Supported regions for Hyperdisk Balanced volumes in Confidential mode

Confidential mode for Hyperdisk Balanced volumes is available in the following regions:

  • europe-west4
  • us-central1
  • us-east4
  • us-east5
  • us-south1
  • us-west4

Limitations for Hyperdisk Balanced volumes in Confidential mode

  • Hyperdisk Extreme, Hyperdisk Throughput, Hyperdisk ML, and Hyperdisk Balanced High Availability don't support Confidential mode.
  • You can't suspend or resume a VM that uses Hyperdisk Balanced volumes in Confidential mode.
  • You can't use Hyperdisk Storage Pools with Hyperdisk Balanced volumes in Confidential mode.
  • You can't create a machine image or a custom image from a Hyperdisk Balanced volume in Confidential mode.

What's next