Chapter 61 · Amazon Elasticache
Subchapter 61.59
references/shared-security/config-guardrails.mdMarkdown8 KBView on GitHub
Use AWS Config rules to continuously audit ElastiCache deployments for security and operational compliance. These rules detect configuration drift and non-compliant resources.
Note: These managed Config rules evaluate only node-based replication groups (AWS::ElastiCache::ReplicationGroup). They do not apply to ElastiCache Serverless caches. Serverless caches always have encryption (at-rest and in-transit) enabled by default and have built-in Multi-AZ with automatic failover, so these rules are not needed for serverless deployments.
What it checks: Node-based replication groups have automatic failover enabled.
Why it matters: Without automatic failover, a primary node failure requires manual intervention to promote a replica, causing extended downtime.
Remediation:
aws elasticache modify-replication-group \
--replication-group-id <cluster-name> \
--automatic-failover-enabled \
--multi-az-enabled \
--apply-immediately \
--region <region>Note: Automatic failover requires at least one replica per shard. If the cluster has no replicas, add replicas first. Also enable Multi-AZ (--multi-az-enabled) for automatic failover to provide meaningful HA; without Multi-AZ, the primary and replica may be in the same AZ, reducing fault tolerance.
What it checks: Node-based replication groups have at-rest encryption enabled.
Why it matters: Without at-rest encryption, data on disk (snapshots, swap files) is stored in plaintext. This is a compliance finding for most security frameworks (SOC 2, HIPAA, PCI DSS).
Remediation: At-rest encryption cannot be enabled on an existing cluster. The remediation path is:
AtRestEncryptionEnabled: trueFor new clusters, always set AtRestEncryptionEnabled: true in the template.
What it checks: Node-based replication groups have in-transit encryption (TLS) enabled.
Why it matters: Without TLS, data travels in plaintext between clients and the cache, and between primary and replica nodes. Susceptible to eavesdropping.
Remediation: For clusters created without TLS, the remediation depends on engine version:
Redis OSS 7.0+ / Valkey 7.2+: In-place TLS enablement is supported. Migrate in three steps:
TransitEncryptionEnabled: true with TransitEncryptionMode: preferred (allows both TLS and plaintext clients)ssl=True / tls: {})TransitEncryptionMode: required to enforce TLS-onlyOlder engine versions (Redis OSS < 7.0): Cluster recreation is required:
TransitEncryptionEnabled: trueWhat it checks: Replication groups or serverless caches have a user group associated (not relying solely on the default user with no password).
Implementation: Custom Config rule Lambda. Logic: call describe_replication_groups or describe_serverless_caches, check UserGroupIds (node-based) or UserGroupId (serverless) is non-empty. For node-based clusters, also check AuthTokenEnabled; clusters using AUTH tokens have a valid authentication method even without user groups. Note: AuthTokenEnabled is only available in the describe_replication_groups response; the describe_serverless_caches API does not return this field, so for serverless the check is limited to user group association. COMPLIANT if a user group is associated or AUTH token is enabled (node-based only), NON_COMPLIANT otherwise.
Remediation:
aws elasticache modify-serverless-cache \
--serverless-cache-name <cache-name> \
--user-group-id <user-group-id> --region <region>
aws elasticache modify-replication-group \
--replication-group-id <cluster-name> \
--user-group-ids-to-add <user-group-id> --region <region>What it checks: ElastiCache clusters run a minimum required engine version (e.g., Valkey 7.2+ or Redis OSS 7.0+ for IAM auth, Valkey 8.2 or above for vector search on node-based clusters).
Implementation: Custom Config rule Lambda. Logic: call describe_replication_groups, get a member cluster via describe_cache_clusters, compare EngineVersion against a minimumVersion rule parameter (default 7.2). Use packaging.version.parse for comparison.
Remediation:
# For clusters already running Valkey, upgrade the version:
aws elasticache modify-replication-group \
--replication-group-id <cluster-name> \
--engine-version 7.2 \
--apply-immediately --region <region>
# For clusters running Redis OSS, specify --engine valkey to switch engines.
# WARNING: This performs an engine migration from Redis OSS to Valkey, not just a
# version upgrade. Test in a non-production environment first. See valkey-migration-guide.md.
aws elasticache modify-replication-group \
--replication-group-id <cluster-name> \
--engine valkey --engine-version 7.2 \
--apply-immediately --region <region>Resources:
AutoFailoverRule:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: elasticache-auto-failover-enabled
Source:
Owner: AWS
SourceIdentifier: ELASTICACHE_REPL_GRP_AUTO_FAILOVER_ENABLED
Scope:
ComplianceResourceTypes:
- AWS::ElastiCache::ReplicationGroup
EncryptedAtRestRule:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: elasticache-encrypted-at-rest
Source:
Owner: AWS
SourceIdentifier: ELASTICACHE_REPL_GRP_ENCRYPTED_AT_REST
Scope:
ComplianceResourceTypes:
- AWS::ElastiCache::ReplicationGroup
EncryptedInTransitRule:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: elasticache-encrypted-in-transit
Source:
Owner: AWS
SourceIdentifier: ELASTICACHE_REPL_GRP_ENCRYPTED_IN_TRANSIT
Scope:
ComplianceResourceTypes:
- AWS::ElastiCache::ReplicationGroupNote: The
RBACCheckFunctionLambda is not defined in the snippet below. You must define it separately as anAWS::Lambda::Functionresource (or import its ARN) with the custom Config rule evaluation logic described in the “RBAC Auth Enabled” section above. Grant Config permission to invoke it via anAWS::Lambda::Permissionresource withPrincipal: config.amazonaws.com.
Resources:
RBACAuthRule:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: elasticache-rbac-auth-enabled
Source:
Owner: CUSTOM_LAMBDA
SourceIdentifier: !GetAtt RBACCheckFunction.Arn
SourceDetails:
- EventSource: aws.config
MessageType: ConfigurationItemChangeNotification
Scope:
ComplianceResourceTypes:
- AWS::ElastiCache::ReplicationGroup
- AWS::ElastiCache::ServerlessCache| Rule | Type | Checks | Remediation complexity |
|---|---|---|---|
elasticache-repl-grp-auto-failover-enabled | Managed | Automatic failover on | Low (modify in place) |
elasticache-repl-grp-encrypted-at-rest | Managed | At-rest encryption on | High (requires cluster recreation) |
elasticache-repl-grp-encrypted-in-transit | Managed | TLS on | Medium (in-place for Redis OSS 7.0+/Valkey 7.2+; recreation for older versions) |
elasticache-rbac-auth-enabled | Custom | RBAC user group associated | Medium (create and associate user group) |
| Engine version compliance | Custom | Minimum engine version | Medium (in-place version upgrade) |