EFSボリュームの暗号化手順について

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

ポリシーの説明
[EFS .8] EFS ファイルシステムは保管中に暗号化する必要があります
Amazon EFS の Security Hub コントロール – AWS Security Hub
このコントロールは、Amazon EFS ファイルシステムが AWS Key Management Service (KMS) でデータを暗号化しているかどうかをチェックします。ファイルシステムが暗号化されていない場合、コントロールは失敗します。
Amazon EFSは、複数のEC2インスタンスやコンテナ、サーバーレス関数などから同時にアクセスできる共有ファイルシステムです。保管時の暗号化を有効にすることで、EFSファイルシステムに保存されたデータが不正アクセスから保護されます。暗号化されたファイルシステムでは、データはディスクに書き込まれる際と、ファイルシステムとクライアント間で転送される際に自動的に暗号化されます。
修復方法
AWSコンソールでの修正手順
- Amazon EFS → [ファイルシステムを作成] → [カスタマイズ] を選択。
- [暗号化] セクションで [保管時のデータの暗号化を有効にする] がオンになっていることを確認。カスタム KMS キーを使う場合は [カスタム KMS キー] を選択し ARN を指定します。
- ネットワークやパフォーマンス設定を完了して 作成。
- 既存の非暗号化 FS がある場合は、両方をマウントして rsync / AWS DataSync でデータをコピーし、アプリ設定を切り替えてから旧 FS を削除します。

Terraformでの修復手順
EFSファイルシステムの暗号化を有効にするためのTerraformコードと、重要な修正ポイントを説明します。
##########################################
# KMS キー(任意。指定が無い場合は AWS 管理キー aws/elasticfilesystem が使用される)
##########################################
resource "aws_kms_key" "efs" {
description = "EFS-at-rest encryption key"
enable_key_rotation = true
}
##########################################
# EFS ファイルシステム
##########################################
resource "aws_efs_file_system" "main" {
creation_token = "efs-${var.env}"
# ---------- 暗号化 ----------
encrypted = true # ★必須
kms_key_id = aws_kms_key.efs.arn # カスタムキーを使う場合のみ
performance_mode = "generalPurpose"
throughput_mode = "bursting"
# 省コスト化: ライフサイクル
lifecycle_policy {
transition_to_ia = "AFTER_30_DAYS"
}
tags = {
Name = "efs-${var.env}"
Environment = var.env
Encrypted = "true"
}
}
##########################################
# マウントターゲット(各 AZ)
##########################################
resource "aws_efs_mount_target" "this" {
for_each = toset(var.private_subnet_ids)
file_system_id = aws_efs_file_system.main.id
subnet_id = each.value
security_groups = [aws_security_group.efs.id]
}
##########################################
# セキュリティグループ
##########################################
resource "aws_security_group" "efs" {
name = "sg-efs-${var.env}"
description = "Allow NFS 2049 from app SG"
vpc_id = var.vpc_id
ingress {
from_port = 2049
to_port = 2049
protocol = "tcp"
security_groups = var.app_sg_ids
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
##########################################
# バックアップポリシー(推奨)
##########################################
resource "aws_efs_backup_policy" "main" {
file_system_id = aws_efs_file_system.main.id
backup_policy { status = "ENABLED" }
}
項目 | 説明 |
---|---|
encrypted = true | これが無いと暗号化されません |
kms_key_id | 省略すると AWS 管理キー、指定すればカスタムキー |
既存 FS | Terraform で encrypted を後付けすると 強制再作成 になります (データ消失)。計画段階で差分を確認し、移行手順を別途用意してください。Terraform Registry |
- CloudWatch:
BurstCreditBalance
低下 /PercentIOLimit
超過を監視 - KMS: カスタムキーを使用した場合、キーのローテーションとアクセス権を定期レビュー
- コスト: KMS API 呼び出し課金が増加するため、想定コストを見積もる
最後に
今回は、EFSファイルシステムを保管時に暗号化する方法についてご紹介しました。共有ファイルシステムに機密データを保存する場合は、保管時の暗号化を有効にすることで、セキュリティを強化することが重要です。新規にファイルシステムを作成する際はもちろんのこと、既存の暗号化されていないファイルシステムについても、計画的に暗号化されたファイルシステムへの移行を検討してください。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。