ElastiCacheクラスターでのサブネットグループの設定について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
クラウドセキュリティで検出される課題を改修するシリーズです。 今回は、Amazon ElastiCacheクラスターでデフォルトサブネットグループが使用されている状態について、そのリスクと対策を解説します。

リスク
Amazon ElastiCacheは、インメモリキャッシュサービスであり、Webアプリケーションのパフォーマンスを向上させるために広く使用されます。ElastiCacheクラスターをVPC内で起動する際、そのネットワーク配置を制御するためにサブネットグループを使用します。
デフォルトでは、ElastiCacheはVPC内のすべてのサブネットを含む「デフォルトサブネットグループ」を自動的に作成します。このデフォルト設定は、以下のようなセキュリティ上の重大なリスクを引き起こします。
- ネットワークアクセス制御の欠如: デフォルトサブネットグループには、VPC内のすべてのサブネットが含まれています。そのため、ElastiCacheクラスターがデプロイされるサブネットを細かく制御できません。これにより、本来アクセスを許可すべきでないサブネットにElastiCacheがデプロイされ、不必要なネットワーク経路が生まれてしまう可能性があります。
- 意図しないデータ暴露: アプリケーションサーバーは通常、特定のプライベートサブネットに配置されます。デフォルトサブネットグループを使用すると、ElastiCacheクラスターがセキュリティレベルの低いサブネット(例:公開されたサブネット)にデプロイされる可能性があります。これにより、キャッシュデータが意図せず露出し、セキュリティ侵害のリスクが高まります。
- 最小特権の原則違反: セキュリティのベストプラクティスは、リソースが必要な最小限のネットワークにのみ配置されることです。デフォルトサブネットグループは、この原則に違反し、ElastiCacheクラスターに過剰なネットワークアクセスを許可してしまいます。
対策
ElastiCacheクラスターには、カスタムサブネットグループを使用することが、上記のすべてのリスクを軽減し、セキュリティとネットワークの健全性を確保するための重要なベストプラクティスです。
- 厳密なネットワーク分離: カスタムサブネットグループを使用することで、ElastiCacheクラスターを特定の、かつセキュリティ要件を満たすプライベートサブネットにのみ配置できます。これにより、意図しないアクセス経路を排除し、ネットワークの分離を強化できます。
- 最小特権の原則の適用: カスタムサブネットグループでは、キャッシュクラスターが必要とするサブネットのみを明示的に含めます。これにより、リソースが最小限のネットワークにのみ配置されるため、最小特権の原則が適用されます。
- ネットワーク構成の一貫性: カスタムサブネットグループは、インフラストラクチャのIaC(Infrastructure as Code)管理において、ネットワーク構成をより明確で一貫性のあるものにします。これにより、監査や管理が容易になります。
修復方法
ElastiCacheクラスターをカスタムサブネットグループに移行する方法は、AWSコンソールまたはTerraformで行えます。この設定は、クラスターの作成時または既存のクラスターの変更時に適用できます。
AWSコンソールでの修復手順
AWSコンソールを使用して、カスタムサブネットグループを作成し、ElastiCacheクラスターに適用します。
ステップ 1: カスタムサブネットグループの作成
- ElastiCacheサービスへ移動: AWSコンソールにログインし、Amazon ElastiCache サービスを開きます。
- サブネットグループへ移動: 左側のナビゲーションペインで「サブネットグループ」を選択し、「サブネットグループの作成」をクリックします。
- サブネットグループの設定:
- 名前:
my-secure-cache-subnet-group
など、わかりやすい名前を入力します。 - VPC: 該当するVPCを選択します。
- サブネット: ElastiCacheクラスターを配置したいプライベートサブネットを複数選択します。高可用性のために、複数のアベイラビリティゾーンにまたがるサブネットを選択することを強く推奨します。
- 名前:
- 作成:
- 「作成」をクリックしてサブネットグループを保存します。

ステップ 2: ElastiCacheクラスターへの適用
- ElastiCacheクラスターを選択: 左側のナビゲーションペインで「Redis」または「Memcached」を選択し、設定を変更したいクラスターを選択します。
- 「変更」ボタンをクリック: クラスターの詳細ページで「変更」をクリックします。
- 「サブネットグループ」の変更:
- 変更画面が表示されたら、「サブネットグループ」のドロップダウンメニューで、ステップ1で作成したカスタムサブネットグループを選択します。
- 変更の適用:
- 変更内容を確認し、「変更」をクリックします。
- 変更の適用タイミングを選択し、適用します。
これで、ElastiCacheクラスターが、より厳密に制御されたカスタムサブネットグループに紐付けられます。
Terraformでの修復手順
Terraformでカスタムサブネットグループを作成し、ElastiCacheクラスターに適用するには、aws_elasticache_subnet_group
と aws_elasticache_cluster
リソースを使用します。
# (前提) VPCとプライベートサブネットは別途定義済み
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "private_a" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "${data.aws_region.current.name}a"
}
resource "aws_subnet" "private_b" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.2.0/24"
availability_zone = "${data.aws_region.current.name}b"
}
# 1. カスタムサブネットグループの作成
resource "aws_elasticache_subnet_group" "my_secure_subnet_group" {
name = "my-secure-cache-subnet-group"
subnet_ids = [
aws_subnet.private_a.id,
aws_subnet.private_b.id
]
description = "Custom subnet group for ElastiCache in private subnets"
}
# 2. ElastiCacheクラスターにカスタムサブネットグループを適用
resource "aws_elasticache_cluster" "my_secure_cluster" {
cluster_id = "my-secure-cluster"
engine = "redis"
node_type = "cache.t3.micro"
num_cache_nodes = 1
engine_version = "6.x" # 適切なバージョンを指定
# **重要: 作成したサブネットグループ名を指定**
subnet_group_name = aws_elasticache_subnet_group.my_secure_subnet_group.name
tags = {
Name = "MyElastiCacheCluster"
Environment = "Production"
}
}
上記のTerraformコードでは、まずaws_elasticache_subnet_group
リソースで特定のプライベートサブネットを指定したカスタムサブネットグループを作成しています。次に、aws_elasticache_cluster
リソースのsubnet_group_name
パラメータに、作成したサブネットグループ名を指定することで、クラスターをそのサブネットグループに配置しています。
terraform apply
を実行することで、ElastiCacheクラスターがよりセキュアなカスタムサブネットグループでプロビジョニングまたは更新されます。
最後に
この記事では、ElastiCacheクラスターでデフォルトサブネットグループが使用されていることのリスクと、それを修正することの重要性について解説しました。カスタムサブネットグループを使用することで、ネットワークのセキュリティを強化し、最小特権の原則に基づいた運用を実現できます。 貴社のElastiCacheクラスターは、デフォルトサブネットグループを使用していませんか?この機会にぜひ設定を確認・強化してみてください。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。