Neptune DB clusters should be encrypted at rest
Neptune clusters store graph data that often models relationships between sensitive entities: identity graphs, fraud networks, knowledge bases with PII. Unencrypted storage means that anyone with access to the underlying EBS volumes or exported snapshots can read raw data without any authentication barrier.
Encryption at rest cannot be enabled after cluster creation. A missed setting at launch time means a full data migration to a new encrypted cluster, which for large graph datasets can take hours and require application downtime.
Retrofit consideration
Neptune does not support enabling encryption on an existing unencrypted cluster. You must create a new encrypted cluster, migrate data (e.g., using neptune-export and bulk loader), and redirect application endpoints. This requires downtime or a blue-green cutover.
Implementation
Choose the approach that matches how you manage Terraform.
Use AWS provider resources directly. See docs for the resources involved: aws_neptune_cluster.
resource "aws_neptune_cluster" "this" {
backup_retention_period = 7
cluster_identifier = "pofix-abc123"
enable_cloudwatch_logs_exports = ["audit"]
neptune_subnet_group_name = "example-neptune-subnet-group"
skip_final_snapshot = true
storage_encrypted = true
}
What this control checks
The aws_neptune_cluster resource passes when storage_encrypted is set to true. It fails when the argument is omitted or set to false. To use a customer-managed key instead of the default aws/neptune service key, set kms_key_id to the ARN of the desired aws_kms_key. Both arguments are fixed at cluster creation and cannot be changed afterward, so the plan-time check is the only meaningful enforcement point.
Common pitfalls
Encryption cannot be added post-creation
Set
storage_encrypted = truefrom day one. Neptune has no modify path for enabling encryption on an existing cluster, so adding it later causes Terraform to plan a destroy-and-recreate. That destroys all cluster data unless you snapshot first and restore to a new encrypted cluster.Default KMS key limits cross-account snapshot sharing
Snapshots encrypted with the default
aws/neptunekey can't be shared across AWS accounts. If cross-account snapshot access is part of your architecture, provision a customer-managedaws_kms_keywith the appropriate key policy before you create the cluster.Snapshot restore does not automatically remediate encryption gaps
Restoring an unencrypted Neptune snapshot using
snapshot_identifierdoesn't convert the result into an encrypted cluster. Plan a migration to a freshly created encrypted cluster and verifystorage_encrypted = trueon the target before decommissioning the source.lifecycle prevent_destroy does not prevent Terraform replacement
Adding
storage_encrypted = trueto an existing unencrypted cluster resource triggers a Terraform replacement. Alifecycle { prevent_destroy = true }block makes the apply fail rather than silently dropping your data, but the migration problem still exists. Snapshot first, build a new encrypted cluster, then cut over.
Audit evidence
Auditors expect Config rule evaluation results showing all Neptune clusters as compliant for neptune-cluster-encrypted (or an equivalent custom rule), plus CLI output from aws neptune describe-db-clusters filtered to StorageEncrypted and KmsKeyId per cluster. If policy requires a customer-managed key, the KmsKeyId value gets cross-referenced against the organization's approved key inventory.
Security Hub findings or CSPM scan reports showing this control passing across all accounts and regions give the clearest picture for multi-account environments.
Framework-specific interpretation
PCI DSS v4.0: For Neptune clusters that store or index cardholder data, Requirement 3 calls for stored account data to be rendered unreadable. Encryption at rest satisfies that. A customer-managed KMS key with appropriate access policies also covers the key management expectations under 3.6 and 3.7.
NIST Cybersecurity Framework v2.0: PR.DS under the Protect function covers confidentiality of data at rest. Neptune storage encryption is one approach to meeting this for graph data that would otherwise be readable from raw EBS volumes or exported snapshots.
Related controls
Tool mappings
Use these identifiers to cross-reference this control across tools, reports, and evidence.
Compliance.tf Control:
neptune_db_cluster_encryption_at_rest_enabledAWS Config Managed Rule:
NEPTUNE_CLUSTER_ENCRYPTEDCheckov Check:
CKV_AWS_44Powerpipe Control:
aws_compliance.control.neptune_db_cluster_encryption_at_rest_enabledProwler Check:
neptune_cluster_storage_encryptedAWS Security Hub Control:
Neptune.1KICS Query:
98d59056-f745-4ef5-8613-32bca8d40b7eTrivy Check:
AWS-0076
Last reviewed: 2026-03-09