Back to Checks
Glue Data Catalog metadata is encrypted with KMS
glue_data_catalogs_metadata_encryption_enabled
Service: glueSeverity: medium
OfficialBuilt-inVerified
Categories:encryption
Resource Type:Other
AWS Glue Data Catalog metadata is encrypted at rest when catalog settings use SSE-KMS with a KMS key.
Catalogs that do not configure SSE-KMS for metadata are considered unencrypted.
Risk
Unencrypted catalog metadata exposes schemas, partitions, and data locations, reducing confidentiality.
Adversaries or over-privileged users can conduct reconnaissance and plan lateral movement; tampering with definitions can corrupt queries and results, impacting integrity.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks glue_data_catalogs_metadata_encryption_enabledRecommendation
Enable metadata encryption with SSE-KMS, preferably using a customer-managed KMS key for control and rotation.
Apply least privilege to KMS and catalog access, restrict who can change settings, and monitor key usage. Use defense in depth by encrypting related analytics assets consistently.
Remediation
CLI
aws glue put-data-catalog-encryption-settings --data-catalog-encryption-settings '{"EncryptionAtRest":{"CatalogEncryptionMode":"SSE-KMS"}}'Terraform
# Enable Glue Data Catalog metadata encryption with KMS
resource "aws_glue_data_catalog_encryption_settings" "<example_resource_name>" {
data_catalog_encryption_settings {
encryption_at_rest {
catalog_encryption_mode = "SSE-KMS" # Critical: turns on KMS encryption for catalog metadata
}
}
}NativeIaC
# Enable Glue Data Catalog metadata encryption with KMS
Resources:
<example_resource_name>:
Type: AWS::Glue::DataCatalogEncryptionSettings
Properties:
DataCatalogEncryptionSettings:
EncryptionAtRest:
CatalogEncryptionMode: SSE-KMS # Critical: enables KMS encryption for catalog metadataOther
1In the AWS Console, go to AWS Glue
2Open Data Catalog > Settings
3Under Security configuration and encryption, check Metadata encryption
4Leave the default AWS managed key selected (or choose a KMS key)
5Click Save
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.glue.glue_client import glue_client
class glue_data_catalogs_metadata_encryption_enabled(Check):
def execute(self):
findings = []
for data_catalog in glue_client.data_catalogs.values():
# Check only if there are Glue Tables
if data_catalog.tables or glue_client.provider.scan_unused_services:
report = Check_Report_AWS(
metadata=self.metadata(), resource=data_catalog
)
report.resource_id = glue_client.audited_account
report.resource_arn = glue_client._get_data_catalog_arn_template(
data_catalog.region
)
report.status = "FAIL"
report.status_extended = (
"Glue data catalog settings have metadata encryption disabled."
)
if (
data_catalog.encryption_settings
and data_catalog.encryption_settings.mode == "SSE-KMS"
):
report.status = "PASS"
report.status_extended = f"Glue data catalog settings have metadata encryption enabled with KMS key {data_catalog.encryption_settings.kms_id}."
findings.append(report)
return findingsReferences
- https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html
- https://docs.amazonaws.cn/en_us/athena/latest/ug/encryption.html
- https://www.trendmicro.com/trendaivisiononecloudriskmanagement/knowledge-base/aws/Glue/data-catalog-encryption-at-rest-with-cmk.html
- https://support.icompaas.com/support/solutions/articles/62000233381-ensure-glue-data-catalogs-are-not-publicly-accessible-