After reviewing similar cases, here’s the complete solution for Aurora snapshot restoration with KMS encryption:
Aurora Snapshot Permissions: First, ensure your IAM principal has the required RDS permissions:
rds:RestoreDBClusterFromSnapshot
rds:DescribeDBSnapshots
rds:DescribeDBClusters
KMS Encryption Keys: This is where most issues occur. Your KMS key policy must grant these permissions to the IAM principal performing the restore:
- kms:Decrypt (to decrypt the snapshot)
- kms:DescribeKey (to validate key access)
- kms:CreateGrant (critical for Aurora to create grants during restore)
- kms:RetireGrant (to clean up grants after restore)
Update your KMS key policy:
{
"Sid": "AllowAuroraRestore",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::ACCOUNT:role/RestoreRole"},
"Action": ["kms:Decrypt", "kms:DescribeKey", "kms:CreateGrant", "kms:RetireGrant"],
"Resource": "*"
}
IAM Permissions: Your restore role needs an IAM policy allowing KMS operations:
{
"Effect": "Allow",
"Action": ["kms:Decrypt", "kms:DescribeKey", "kms:CreateGrant"],
"Resource": "arn:aws:kms:REGION:ACCOUNT:key/KEY-ID"
}
Common Pitfalls:
-
Key Policy vs IAM Policy: Both must allow the operations. KMS key policy takes precedence, so even if your IAM policy allows kms:CreateGrant, the key policy must also permit it.
-
Service Role Confusion: Aurora uses a service-linked role (AWSServiceRoleForRDS) for some operations. Ensure this role also has access to your CMK by adding it to the key policy.
-
Snapshot Ownership: Verify the snapshot owner matches your account. Run:
aws rds describe-db-snapshots --db-snapshot-identifier aurora-prod-snapshot-2025-03-14
Check the “SnapshotOwner” field.
- Region-Specific Keys: If you copied the snapshot across regions, you need KMS permissions in both source and destination regions, as each region uses different CMKs.
Propagation Time: KMS key policy changes take effect immediately, but IAM policy changes can take up to 5 minutes. If you just updated policies, wait a few minutes and retry.
Testing Access: Before attempting restore, test your permissions:
aws kms decrypt --ciphertext-blob fileb://test.enc --key-id KEY-ID
aws rds describe-db-snapshots --include-shared
After implementing all three components (Aurora snapshot permissions, KMS key policy, and IAM permissions), your restore should succeed. The ‘snapshot not found’ error is misleading-it’s actually a permissions denial that RDS reports as a not-found error for security reasons.