Skip to content

Encryption Everywhere with your own KMS Key

By default, Engineering Development Hub (EDH) encrypts all data at rest using AWS Key Management Service (KMS). The default encryption uses AWS-managed KMS keys that are unique to your account. If you need more control over key rotation, access policies, or compliance requirements, you can bring your own Customer Managed Key (CMK).

Configure a Global CMK

To configure your own CMK, navigate to your default_config.yml. Under the Config section, set the kms_key_id parameter to the ARN of your CMK:

Config:
  kms_key_id: arn:aws:kms:<region>:<account_id>:key/<key_id>

This key will be used to encrypt all available resources (EBS volumes, analytics, Secrets Manager, backups, and more).

Per-Service Key Configuration

You can also configure a dedicated CMK for each service independently:

Service Configuration Path
AWS Backup Config.services.aws_backup.kms_key_id
AWS ElastiCache Config.services.aws_elasticache.kms_key_id
CloudWatch Logs Config.services.logging.kms_key_id
All Storage Config.storage.kms_key_id
Storage: /apps partition Config.storage.apps.kms_key_id
Storage: /data partition Config.storage.data.kms_key_id
EBS on login nodes Config.login_node.volume_kms_key_id
EBS on the EDH Controller Config.controller.volume_kms_key_id
AWS OpenSearch Config.analytics.kms_key_id
AWS Secrets Manager Config.secretsmanager.kms_key_id

Note

Per-service keys take precedence over the global Config.kms_key_id setting.

Key Policy Requirements

S3 Bucket encrypted with custom key

Policy below are also required if the S3 bucket you have specified during install time use a non-default CMK key

Your CMK must include the following key policy statement to allow IAM-based access control within your account:

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::<your_aws_account_id>:root"
  },
  "Action": "kms:*",
  "Resource": "*"
}

Additional Policy for CloudWatch Logs Encryption

If you plan to encrypt CloudWatch Logs with your own CMK, you must also add the following statement to allow the CloudWatch Logs service to use your key:

{
  "Effect": "Allow",
  "Principal": {
    "Service": "logs.<region>.amazonaws.com"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

Replace <region> with your AWS region (e.g., us-east-1).

Scoping Down Permissions After Deployment

The broad key policy above is required during initial deployment because you cannot scope kms:Decrypt to specific EDH IAM roles until they are created. Once EDH is up and running, you can edit your key policy to restrict access to only the EDH IAM roles, following the principle of least privilege.