EBSのデフォルト暗号化が有効化されていない場合のデフォルト設定化の手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。

この記事では、EC2インスタンスにアタッチされたEBSボリュームの暗号化に関するセキュリティポリシーについて解説します。

画像に alt 属性が指定されていません。ファイル名: 13e11608c3ab504725ce4500088eb55e-1024x341.webp

ポリシーの説明

[EC2.3] アタッチされた Amazon EBS ボリュームは、保管時に暗号化することをお勧めします

Amazon EC2 の Security Hub コントロール – AWS Security Hub

このコントロールは、添付済みの EBS ボリュームが暗号化されているかどうかをチェックします。このチェックに合格するには、EBS ボリュームが使用中 (in-use) であり、かつ暗号化されている必要があります。EBS ボリュームがアタッチ済みでない場合、このチェックは対象外です。

このポリシーは、EC2インスタンスにアタッチされたEBSボリュームが保管時に暗号化されることを推奨しています。EBSボリュームに保存されたデータは、不正アクセスやデータ漏洩のリスクがあるため、暗号化によって保護する必要があります。

修復方法

AWSコンソールでの修正手順(デフォルト暗号化の有効化)

注意: この手順は、今後作成される新しいEBSボリュームにデフォルトで暗号化を適用するための設定です。既存の非暗号化ボリュームを暗号化するには、スナップショットを作成し、暗号化を有効にしてコピーし、そのスナップショットから新しいボリュームを作成する手順が必要です。

AWSコンソールでの修正手順

  1. EC2 に移動し、左側のメニューで一番下までスクロール後、「設定」をクリック

2. 「管理」をクリック後、「常に新しいEBSボリュームを暗号化」をクリックする

  1. 「EBS 暗号化を更新する」をクリックし、設定を反映する

Terraformでの修復手順

# プロバイダー設定
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = var.aws_region
}

# EBSデフォルト暗号化の有効化
resource "aws_ebs_encryption_by_default" "default" {
  enabled = true
}

# カスタムKMSキーの作成(オプション)
resource "aws_kms_key" "ebs_encryption_key" {
  count                   = var.use_custom_kms_key ? 1 : 0
  description             = "KMS key for EBS default encryption"
  deletion_window_in_days = 10
  enable_key_rotation     = true

  tags = {
    Name = "ebs-encryption-key"
  }
}

# カスタムKMSキーをデフォルトのEBS暗号化キーとして設定(オプション)
resource "aws_ebs_default_kms_key" "default" {
  count   = var.use_custom_kms_key ? 1 : 0
  key_arn = aws_kms_key.ebs_encryption_key[0].arn
}

# 変数定義
variable "aws_region" {
  description = "The AWS region to deploy to"
  type        = string
  default     = "ap-northeast-1"
}

variable "use_custom_kms_key" {
  description = "Whether to use a custom KMS key for EBS encryption"
  type        = bool
  default     = false
}

# 出力
output "ebs_encryption_enabled" {
  description = "Whether EBS encryption by default is enabled"
  value       = aws_ebs_encryption_by_default.default.enabled
}

output "custom_kms_key_arn" {
  description = "ARN of the custom KMS key used for EBS encryption (if applicable)"
  value       = var.use_custom_kms_key ? aws_kms_key.ebs_encryption_key[0].arn : "N/A"
}
  • aws_ebs_encryption_by_default :
    • enabled = true と設定することで、そのAWSリージョンにおけるデフォルトのEBS暗号化を有効にします。今後作成されるEBSボリュームは、明示的に無効にしない限り暗号化されます。
  • aws_kms_key および aws_ebs_default_kms_key リソース (オプション):
    • これらを使用して、AWS管理のデフォルトキー (aws/ebs) の代わりに、カスタマー管理のKMSキー (CMK) を作成し、それをEBSのデフォルト暗号化キーとして設定することができます。キー管理ポリシーをより細かく制御したい場合に利用します。
    • var.use_custom_kms_key 変数で、カスタムキーを使用するかどうかを制御しています。

最後に

今回は、EC2インスタンスにアタッチされたEBSボリュームの暗号化設定について解説しました。EBSボリュームに保存されたデータを保護するために、デフォルト暗号化を有効にし、既存の非暗号化ボリュームも暗号化することを強く推奨します。

この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。

運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。

最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る