ElastiCache for Redis レプリケーショングループの転送中の暗号化が有効化設定手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では Security Hub で検出される「[ElastiCache.5] ElastiCache レプリケーショングループは転送時に暗号化する必要があります」 というセキュリティ課題の修正方法を解説します。

ポリシーの説明
[ElastiCache.5] ElastiCache レプリケーショングループは転送時に暗号化する必要があります
ElastiCache の Security Hub コントロール – AWS Security Hub
このコントロールは、ElastiCache レプリケーショングループが転送中に暗号化されているかどうかをチェックします。レプリケーショングループが転送中に暗号化されていない場合、コントロールは失敗します。
ElastiCache は高速なインメモリデータストアとして広く利用されますが、TLS を無効にするとクライアント‑ノード間、ノード間で流れるデータが盗聴されるリスク が生じます。特にセッション情報やトークンをキャッシュしている環境では深刻な情報漏えいにつながるため、転送時暗号化は必須です。
修復方法
2025年3月時点で既存クラスターへオンラインで TLS を適用できるのは Redis OSS 7.0 以上/Valkey 7.2 以上 です。それ以前のバージョンでは新規クラスターを作成してデータを移行してください。
AWSコンソールでの修正手順
- ElastiCache > Redis OSS キャッシュに移動します。
- 対象のキャッシュ名を選択後、「アクション」から変更を選択
- セキュリティ一覧で「転送中の暗号化」にチェック
- チェック後、変更をプレビューで変更内容に問題ければ「変更する」を選択


既存バージョンが 7 未満の場合
- 最新バージョンへインプレースアップグレード → その後 TLS を有効化
- あるいは TLS 有効な新規クラスターを作成 →
redis-cli --rdb
などでデータ移行 → 切り替え
Terraformでの修復手順
ElastiCache for Redisの転送時暗号化を有効にするTerraformコードと、主要な修正ポイントを説明します。
# ------------------ ① KMS キー ------------------
resource "aws_kms_key" "redis" {
description = "KMS key for ElastiCache encryption"
enable_key_rotation = true
policy = jsonencode({
Version = "2012-10-17"
Statement = [
# 管理者
{
Sid = "Enable IAM User Permissions"
Effect = "Allow"
Principal = { AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root" }
Action = "kms:*"
Resource = "*"
},
# ElastiCache からの利用
{
Sid = "Allow ElastiCache Use"
Effect = "Allow"
Principal = { Service = "elasticache.amazonaws.com" }
Action = [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey*" ]
Resource = "*"
}
]
})
}
# ------------------ ② 基本リソース ------------------
resource "aws_elasticache_subnet_group" "redis" {
name = "redis-${var.environment}-subnet"
subnet_ids = var.private_subnet_ids
}
resource "aws_security_group" "redis" {
vpc_id = var.vpc_id
ingress {
from_port = 6379
to_port = 6379
protocol = "tcp"
security_groups = var.app_security_group_ids
description = "TLS/Redis access from application"
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
# ------------------ ③ Replication Group ------------------
resource "aws_elasticache_replication_group" "redis" {
replication_group_id = "redis-${var.environment}"
replication_group_description = "Redis TLS cluster (${var.environment})"
engine = "redis"
engine_version = "7.0" # 7.0 以上を推奨
node_type = "cache.t3.medium"
num_cache_clusters = 2
automatic_failover_enabled = true
multi_az_enabled = true
subnet_group_name = aws_elasticache_subnet_group.redis.name
security_group_ids = [aws_security_group.redis.id]
# --- 転送時暗号化 (TLS) ---
transit_encryption_enabled = true
auth_token = var.auth_token # 16 文字以上必須
# --- 保管時暗号化 ---
at_rest_encryption_enabled = true
kms_key_id = aws_kms_key.redis.arn
maintenance_window = "mon:03:00-mon:04:00"
snapshot_retention_limit = 7
snapshot_window = "02:00-03:00"
tags = var.tags
}
チェック内容 | 摘要 |
---|---|
Redis OSS 7.0 / Valkey 7.2 以上か | 7 未満の場合はバージョンアップまたは新規構築が必要 |
AUTH token を 16 文字以上で設定 | TLS 有効時は必須、アプリ側も AUTH コマンドで接続 |
新しい TLS エンドポイントに更新 | 旧 (非 TLS) エンドポイントは削除されるためアプリを更新 |
接続ライブラリの TLS 対応 | redis-py , go-redis , ioredis などで rediss:// を使用 |
ネットワーク | プライベートサブネット/SG で接続元を最小化 |
最後に
転送時暗号化を有効にすることで 盗聴・改ざんリスクを大幅に低減 できます。ElastiCache (Redis/Valkey) を利用している環境では必ず TLS 化を検討してください。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。