Back to Checks
Neptune DB cluster snapshot is encrypted at rest
neptune_cluster_snapshot_encrypted
Service: neptuneSeverity: medium
OfficialBuilt-inVerified
Categories:encryption
Resource Type:AwsRdsDbClusterSnapshot
Neptune DB cluster snapshot is encrypted at rest. The evaluation looks at whether each snapshot's encrypted attribute is enabled, confirming that the data is protected while stored.
Risk
Unencrypted Neptune snapshots undermine data confidentiality. If accessed or shared due to compromised credentials or misconfiguration, attackers can restore or download snapshot contents, enabling data exfiltration, and exposure of sensitive records. This weakens overall data protection posture.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks neptune_cluster_snapshot_encryptedRecommendation
Protect snapshot data by enforcing encryption at rest and strong key governance.
- Use customer-managed keys with controlled lifecycle and rotation
- Apply least privilege to snapshot access and sharing
- Prevent creation of unencrypted snapshots via organizational configuration and policy controls
Remediation
CLI
aws rds copy-db-cluster-snapshot --source-db-cluster-snapshot-identifier <source-snapshot> --target-db-cluster-snapshot-identifier <encrypted-snapshot> --kms-key-id <kms-key-id>Terraform
resource "aws_neptune_cluster" "restored" {
cluster_identifier = "restored-cluster"
snapshot_identifier = "<source-snapshot>"
storage_encrypted = true # Ensure restored cluster from snapshot is encrypted
}Other
1Sign in to the AWS Management Console and open Amazon Neptune
2In the left pane choose **Snapshots**
3Select the unencrypted snapshot and click **Actions** > **Restore snapshot**
4In the Restore page enable **Encryption** and select a KMS key
5Click **Restore DB cluster**
6After the cluster is restored, create a new snapshot of the restored (encrypted) cluster
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.neptune.neptune_client import neptune_client
class neptune_cluster_snapshot_encrypted(Check):
def execute(self):
findings = []
for snapshot in neptune_client.db_cluster_snapshots:
report = Check_Report_AWS(metadata=self.metadata(), resource=snapshot)
report.status = "FAIL"
report.status_extended = (
f"Neptune Cluster Snapshot {snapshot.id} is not encrypted at rest."
)
if snapshot.encrypted:
report.status = "PASS"
report.status_extended = (
f"Neptune Cluster Snapshot {snapshot.id} is encrypted at rest."
)
findings.append(report)
return findings