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, see Customer-managed encryption keys and Customer-supplied encryption keys.
Supported disk types
This section lists the supported encryption types for disks and other storage options offered by Compute Engine.
Persistent Disk volumes support Google-default encryption, CMEKs and CSEKs.
Google Cloud Hyperdisk support CMEKs and Google-default encryption. You can't use CSEKs to encrypt Hyperdisks.
Local SSD disks only support Google default encryption. You can't use CSEKs or CMEKs to encrypt Local SSD disks.
Disk clones and machine images support Google-default encryption, CMEKs, and CSEKs.
Standard snapshots and instant snapshots support Google-default encryption, CMEKs, and CSEKs.
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
In the Google Cloud console, go to the Disks page.
In the Name column, click the name of the disk.
In the Properties table, the row labeled Encryption indicates the type of encryption: Google-managed, customer-managed, or customer-supplied.
gcloud
-
In the Google Cloud console, 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.
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. ThediskEncryptionKey
object contains information about whether the disk is CMEK- or CSEK-encrypted:- If the
diskEncryptionKey.kmsKeyName
property is present, the disk is CMEK-encrypted. ThekmsKeyName
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. Thesha256
property is the SHA-256 hash of the customer-supplied encryption key that protects the disk.{ "diskEncryptionKey": { "sha256": "abcdefghijk134560459345dssfd" } }
- If the
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. ThekmsKeyName
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. Thesha256
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.
What's next
- To learn how to automate the creation of CMEKs, see Cloud KMS with Autokey (Preview).
- To learn how to create CMEKs, see Create encryption keys with Cloud KMS.
- Encrypt a disk with customer-managed encryption keys (CMEKs).
- Learn more about the format and specification for CSEKs.