Automatically discover and classify sensitive data (PII, PHI, financial) across all S3 buckets.
→Enable Amazon Macie and configure automated sensitive data discovery jobs. Use managed data identifiers for common data types and create custom data identifiers for proprietary formats.
Why: Macie provides a managed, scalable solution for S3 data classification. To suppress findings for known non-sensitive data (e.g., test data), use Macie allow lists.
Enforce multiple security controls on an S3 bucket, such as requiring SSE-KMS with a specific key and denying HTTP requests.
→Use a bucket policy with multiple `Deny` statements and condition keys: `aws:SecureTransport: false`, `s3:x-amz-server-side-encryption: "aws:kms"`, and `s3:x-amz-server-side-encryption-aws-kms-key-id: "key-arn"`.
Why: Bucket policies provide fine-grained, resource-level control. Using multiple condition keys in Deny statements is the standard way to enforce a layered security posture on a bucket.
Ensure all new EBS volumes are encrypted with a specific customer-managed KMS key, organization-wide.
→Enable EBS encryption by default in the account settings for each Region, specifying the CMK. Apply an SCP that denies `ec2:CreateVolume` if the `encrypted` parameter is `false` as a preventive guardrail.
Why: The default setting provides convenience, while the SCP provides a hard enforcement guardrail, creating a defense-in-depth approach to data-at-rest encryption for EBS.
Encrypt large (> 4KB) data objects using AWS KMS.
→Use envelope encryption. Call `KMS:GenerateDataKey` to get a plaintext data key and an encrypted data key. Use the plaintext key to encrypt the large object locally. Store the encrypted object and the encrypted data key together. Discard the plaintext key.
Why: The KMS Encrypt API has a 4KB limit. Envelope encryption allows for encrypting data of any size while the small data key is protected by KMS, reducing cost and latency compared to streaming data through KMS.
Reference↗
Use the same encryption key across multiple AWS Regions for DR or global application consistency.
→Create a KMS multi-Region primary key in one Region and create replica keys in other Regions. Data encrypted with a key in one Region can be decrypted with the replica in another.
Why: Multi-Region keys share the same key material and key ID, enabling cross-region data portability without cross-region API calls for decryption.
Securely store and automatically rotate credentials (e.g., database passwords, API keys) used by applications.
→Store credentials in AWS Secrets Manager. Configure automatic rotation using a custom or AWS-provided Lambda rotation function. Applications retrieve secrets at runtime via an IAM role.
Why: Secrets Manager is a purpose-built service for the entire secret lifecycle, including secure storage, access control, auditing, and automated rotation, reducing the risk of hardcoded or stale credentials.
Manage both public TLS certificates for websites and private certificates for internal microservice communication (mTLS).
→Use AWS Certificate Manager (ACM) for free public certificates integrated with ELB/CloudFront. Create a private certificate authority using ACM Private CA to issue and manage private certificates for internal services.
Why: This separates public and private PKI, using the appropriate tool for each use case. ACM handles public cert lifecycle, while ACM Private CA provides a fully managed private PKI hierarchy.
Store data immutably for a fixed retention period, where not even the root user can delete it.
→Enable S3 Object Lock on the bucket. Place objects under a retention period with Compliance Mode.
Why: Compliance Mode is the strongest WORM (Write-Once-Read-Many) control, preventing deletion by any user. Governance Mode can be bypassed by authorized principals.
Protect backups from deletion (e.g., due to ransomware or compromised credentials) for a mandatory retention period.
→Enable AWS Backup Vault Lock in Compliance Mode with a minimum retention period.
Why: Vault Lock in Compliance Mode makes the backup vault WORM-compliant, preventing any user, including root, from deleting recovery points before the retention period expires.
Process highly sensitive data where the data must never be exposed to the OS, hypervisor, or AWS operators.
→Use AWS Nitro Enclaves to create a cryptographically isolated compute environment. Use KMS attestation to ensure only verified enclaves can decrypt data.
Why: Nitro Enclaves provide the strongest level of data-in-use protection on AWS, using hardware-level attestation to create a trusted execution environment.
Use AWS services with encryption keys that are physically stored and managed in an on-premises HSM, outside of AWS.
→Configure a KMS External Key Store (XKS) which proxies cryptographic operations from KMS to an external key manager.
Why: XKS allows customers to maintain control of their key material outside AWS to meet sovereignty or compliance requirements, while still integrating with KMS-aware AWS services.
Enforce a strict "no public S3 buckets" policy across an entire organization with preventive and detective controls.
→Enable S3 Block Public Access at the organization level from the management account. Supplement with an SCP that denies actions like `s3:PutBucketPolicy` if the policy allows public access. Use AWS Config to detect drift.
Why: This layered approach provides a default block (org setting), a preventive guardrail that stops misconfigurations (SCP), and a detective control for continuous monitoring (Config).