terraform.aws.security.aws-docdb-encrypted-with-cmk.aws-docdb-encrypted-with-cmk

profile photo of semgrepsemgrep
Author
unknown
Download Count*

Ensure DocDB is encrypted at rest using KMS CMKs. CMKs gives you control over the encryption key in terms of access and rotation.

Run Locally

Run in CI

Defintion

rules:
  - id: aws-docdb-encrypted-with-cmk
    patterns:
      - pattern: |
          resource "aws_docdb_cluster" $ANYTHING {
            ...
          }
      - pattern-not-inside: |
          resource "aws_docdb_cluster" $ANYTHING {
            ...
            kms_key_id = ...
            ...
          }
    message: Ensure DocDB is encrypted at rest using KMS CMKs. CMKs gives you
      control over the encryption key in terms of access and rotation.
    metadata:
      category: security
      technology:
        - terraform
        - aws
      owasp:
        - A03:2017 - Sensitive Data Exposure
      cwe:
        - "CWE-320: CWE CATEGORY: Key Management Errors"
      references:
        - https://owasp.org/Top10/A02_2021-Cryptographic_Failures
      subcategory:
        - audit
      likelihood: LOW
      impact: LOW
      confidence: LOW
      license: Commons Clause License Condition v1.0[LGPL-2.1-only]
      vulnerability_class:
        - Cryptographic Issues
    languages:
      - hcl
    severity: WARNING

Examples

aws-docdb-encrypted-with-cmk.tf

# ruleid: aws-docdb-encrypted-with-cmk
resource "aws_docdb_cluster" "fail" {
  cluster_identifier  = "mycluster"
  availability_zones  = [data.aws_availability_zones.available.names[0], data.aws_availability_zones.available.names[1], data.aws_availability_zones.available.names[2]]
  master_username     = "foo"
  master_password     = "mustbeeightcharaters"
  storage_encrypted   = true
  skip_final_snapshot = true
}

resource "aws_docdb_cluster" "pass" {
  cluster_identifier  = "mycluster"
  availability_zones  = [data.aws_availability_zones.available.names[0], data.aws_availability_zones.available.names[1], data.aws_availability_zones.available.names[2]]
  master_username     = "foo"
  master_password     = "mustbeeightcharaters"
  storage_encrypted   = true
  kms_key_id          = aws_kms_key.foo.arn
  skip_final_snapshot = true
}