Google Compute Engine Snapshot
This page shows how to write Terraform for Compute Engine Snapshot and write them securely.
google_compute_snapshot (Terraform)
The Snapshot in Compute Engine can be configured in Terraform with the resource name google_compute_snapshot
. The following sections describe 5 examples of how to use the resource and its parameters.
Example Usage from GitHub
resource "google_compute_snapshot" "snapshot_app" {
name = "usa-app-01-snapshot"
source_disk = "usa-app-01"
zone = "us-west1-b"
labels = {
my_label = "app_vm_snapshot"
resource "google_compute_snapshot" "snapshot" {
project = var.project_id
name = var.name
source_disk = var.source_disk_name
zone = var.zone
storage_locations = var.location
resource "google_compute_snapshot" "secure" {
name = "secure"
source_disk = google_compute_disk.secure.name
}
resource "google_compute_snapshot" "this" {
description = var.description
labels = var.labels
name = var.name
project = var.project
source_disk = var.source_disk
resource "google_compute_snapshot" "no-deletion-protection" {
name = "no-deletion-protection"
source_disk = google_compute_disk.no-deletion-protection.name
}
Parameters
-
creation_timestamp
optional computed - string
Creation timestamp in RFC3339 text format.
-
description
optional - string
An optional description of this resource.
-
disk_size_gb
optional computed - number
Size of the snapshot, specified in GB.
-
id
optional computed - string -
label_fingerprint
optional computed - string
The fingerprint used for optimistic locking of this resource. Used internally during updates.
-
labels
optional - map from string to string
Labels to apply to this Snapshot.
-
licenses
optional computed - list of string
A list of public visible licenses that apply to this snapshot. This can be because the original image had licenses attached (such as a Windows image). snapshotEncryptionKey nested object Encrypts the snapshot using a customer-supplied encryption key.
-
name
required - string
Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression 'a-z?' which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
-
project
optional computed - string -
self_link
optional computed - string -
snapshot_id
optional computed - number
The unique identifier for the resource.
-
source_disk
required - string
A reference to the disk used to create this snapshot.
-
source_disk_link
optional computed - string -
storage_bytes
optional computed - number
A size of the storage used by the snapshot. As snapshots share storage, this number is expected to change with snapshot creation/deletion.
-
storage_locations
optional computed - list of string
Cloud Storage bucket storage location of the snapshot (regional or multi-regional).
-
zone
optional computed - string
A reference to the zone where the disk is hosted.
-
snapshot_encryption_key
list block-
kms_key_self_link
optional - string
The name of the encryption key that is stored in Google Cloud KMS.
-
kms_key_service_account
optional - string
The service account used for the encryption request for the given KMS key. If absent, the Compute Engine Service Agent service account is used.
-
raw_key
optional - string
Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.
-
sha256
optional computed - string
The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.
-
-
source_disk_encryption_key
list block-
kms_key_service_account
optional - string
The service account used for the encryption request for the given KMS key. If absent, the Compute Engine Service Agent service account is used.
-
raw_key
optional - string
Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.
-
-
timeouts
single block
Explanation in Terraform Registry
Represents a Persistent Disk Snapshot resource. Use snapshots to back up data from your persistent disks. Snapshots are different from public images and custom images, which are used primarily to create instances or configure instance templates. Snapshots are useful for periodic backup of the data on your persistent disks. You can create snapshots from persistent disks even while they are attached to running instances. Snapshots are incremental, so you can create regular snapshots on a persistent disk faster and at a much lower cost than if you regularly created a full image of the disk. To get more information about Snapshot, see:
- API documentation
- How-to Guides
- Official Documentation
Warning: All arguments including
snapshot_encryption_key.raw_key
andsource_disk_encryption_key.raw_key
will be stored in the raw state as plain-text. Read more about sensitive data in state.
Tips: Best Practices for The Other Google Compute Engine Resources
In addition to the google_compute_disk, Google Compute Engine has the other resources that should be configured for security reasons. Please check some examples of those resources and precautions.
google_compute_disk
Ensure the encryption key for your GCE disk is stored securely
It is better to store the encryption key for your GCE disk securely. Secret Manager could be used instead.
google_compute_firewall
Ensure your VPC firewall blocks unwanted outbound traffic
It is better to block unwanted outbound traffic not to expose resources in the VPC to unwanted attacks.
google_compute_instance
Ensure appropriate service account is assigned to your GCE instance
It is better to create a custom service account for the instance and assign it.
google_compute_project_metadata
Ensure OS login for your GCE instances is enabled at project level
It is better to enable OS login for your GCE instances. Enabling OS login ensures that SSH keys used to connect to instances are mapped with IAM users, allowing centralized and automated SSH key management.
google_compute_ssl_policy
Ensure to use modern TLS protocols
It's better to adopt TLS v1.2+ instead of outdated TLS protocols.
google_compute_subnetwork
Ensure VPC flow logging is enabled
It is better to enable VPC flow logging. VPC flow logging allows us to audit traffic in your network.
Frequently asked questions
What is Google Compute Engine Snapshot?
Google Compute Engine Snapshot is a resource for Compute Engine of Google Cloud Platform. Settings can be wrote in Terraform.
Where can I find the example code for the Google Compute Engine Snapshot?
For Terraform, the xmano/intercontinental-vm-migration, savitapal8/pocs_repos and security-assesment/cloud-whitebox-vulndb source code examples are useful. See the Terraform Example section for further details.