Glue jobs S3 encryption should be enabled
Glue jobs read and write intermediate results, ETL output, and temp files to S3. Without an explicit S3 encryption mode in the security configuration, encryption behavior for Glue-managed writes isn't enforced at the job level, even if bucket default encryption covers it. The gap matters most when jobs write to buckets outside your direct control, where you can't verify default encryption is configured correctly.
Setting s3_encryption_mode to SSE-S3 or SSE-KMS in the security configuration applies encryption at the source regardless of the destination bucket's defaults. It also pins the keying approach, which matters for access control and key rotation audits.
Retrofit consideration
Existing Glue jobs without a security configuration require creating a new aws_glue_security_configuration resource and updating every aws_glue_job to reference it. Jobs must be stopped and restarted to pick up the change.
Implementation
Choose the approach that matches how you manage Terraform.
Use AWS provider resources directly. See docs for the resources involved: aws_glue_security_configuration.
resource "aws_glue_security_configuration" "this" {
encryption_configuration {
cloudwatch_encryption {
cloudwatch_encryption_mode = "SSE-KMS"
kms_key_arn = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
}
job_bookmarks_encryption {
job_bookmarks_encryption_mode = "CSE-KMS"
kms_key_arn = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
}
s3_encryption {
kms_key_arn = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
s3_encryption_mode = "SSE-KMS"
}
}
name = "pofix-abc123"
}
What this control checks
This control validates two Terraform resources working together. An aws_glue_security_configuration must exist with an encryption_configuration block containing an s3_encryption sub-block where s3_encryption_mode is "SSE-S3" or "SSE-KMS". When "SSE-KMS" is selected, kms_key_arn must also be provided. A value of "DISABLED" or an absent s3_encryption block fails the check.
The aws_glue_job resource must set its security_configuration argument to the name of a passing aws_glue_security_configuration. A job with no security_configuration argument fails, since that provides no encryption guarantee on S3 writes.
Common pitfalls
Security configuration not attached to job
Creating an
aws_glue_security_configurationwith proper S3 encryption does nothing ifaws_glue_jobomits thesecurity_configurationargument. The policy checks both resources. Each job must explicitly reference the configuration by name.Using SSE-KMS without specifying kms_key_arn
Setting
s3_encryption_modeto"SSE-KMS"withoutkms_key_arntypically falls back to the AWS managed key for S3 (alias/aws/s3). That may pass this control, but it will fail policies requiring customer-managed keys for rotation and access audit.Inline encryption_configuration in older Terraform patterns
Legacy Terraform sometimes defines
encryption_configurationwith onlycloudwatch_encryptionorjob_bookmarks_encryption, leaving out thes3_encryptionsub-block entirely. S3 writes go unencrypted and the control fails.Glue job overriding output path to unencrypted bucket
The security configuration only covers writes the Glue runtime performs through its managed S3 integration. If a job script calls S3 directly via boto3 without server-side encryption headers, those writes bypass the security configuration entirely and land unencrypted regardless of this setting.
Audit evidence
Config rule evaluation results showing all Glue jobs as COMPLIANT are the primary evidence. Console screenshots of each job's security configuration panel confirming SSE-S3 or SSE-KMS mode also work. For programmatic confirmation, aws glue get-security-configuration --name <config-name> should return S3EncryptionMode set to a non-DISABLED value, and aws glue get-job --job-name <job-name> should show a SecurityConfiguration field pointing to that configuration.
CloudTrail logs for CreateSecurityConfiguration and UpdateJob establish when encryption was first applied and by whom.
Framework-specific interpretation
Related controls
Tool mappings
Use these identifiers to cross-reference this control across tools, reports, and evidence.
Compliance.tf Control:
glue_job_s3_encryption_enabledCheckov Checks:
CKV_AWS_195,CKV_AWS_99Powerpipe Control:
aws_compliance.control.glue_job_s3_encryption_enabledProwler Check:
glue_etl_jobs_amazon_s3_encryption_enabledKICS Query:
ad5b4e97-2850-4adf-be17-1d293e0b85ee
Last reviewed: 2026-03-09