# # Constants # let controls = [ "NIST-800-53-SC-13" ] # # Assignments # let s3_buckets = Resources[ Type == 'AWS::S3::Bucket' ] rule check_s3_sse_is_enabled when %s3_buckets not empty { %s3_buckets .Properties .BucketEncryption .ServerSideEncryptionConfiguration[*] .ServerSideEncryptionByDefault { check_s3_sse_kms(this) or check_s3_sse_aes(this) <> } } rule check_s3_sse_kms(sse_config) { %sse_config { SSEAlgorithm == "aws:kms" <> KMSMasterKeyID not empty <> } } rule check_s3_sse_aes(sse_config) { %sse_config.SSEAlgorithm == "AES256" } rule check_s3_sse_kms_only when %s3_buckets not empty { %s3_buckets .Properties .BucketEncryption .ServerSideEncryptionConfiguration[*] .ServerSideEncryptionByDefault { check_s3_sse_kms(this) <> } } # # Assignment # let kms_keys = Resources[ kms_keys_logical_ids | Type == 'AWS::KMS::Key' ] rule check_s3_sse_kms_local_stack_only when check_s3_sse_kms_only { %kms_keys not empty <> check_kms_in_local_stack(%s3_buckets) } rule check_kms_in_local_stack(buckets) { when %kms_keys not empty { %buckets .Properties .BucketEncryption .ServerSideEncryptionConfiguration[*] .ServerSideEncryptionByDefault { KMSMasterKeyID.Ref in %kms_keys_logical_ids <> or KMSMasterKeyID { 'Fn::GetAtt'[0] in %kms_keys_logical_ids <> 'Fn::GetAtt'[1] == 'Arn' <> } } } }