ノード間の通信が暗号化されていないOpenSearchドメインの暗号化設定手順
                このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、OpenSearch Serviceドメインのノード間暗号化設定に関するセキュリティポリシーについて解説します。

ポリシーの説明
[Opensearch.3] OpenSearch ドメインはノード間で送信されるデータを暗号化する必要があります
OpenSearch Service の Security Hub コントロール – AWS Security Hub
このコントロールは、OpenSearch ドメインでノード間の暗号化が有効になっているかどうかをチェックします。ドメインでノード間の暗号化が無効になっている場合、このコントロールは失敗します。
このポリシーは、OpenSearch Serviceドメインのノード間通信が暗号化されることを求めています。ノード間暗号化を有効にすることで、クラスター内のデータ転送中に発生する可能性のある傍受や改ざんのリスクを低減できます。OpenSearch Serviceドメインには機密データが含まれることが多いため、暗号化は重要なセキュリティ対策です。
実行すると違反している場合は以下のように表示されると思います。
修復方法
OpenSearch Serviceドメインのノード間暗号化を有効にします。
AWSコンソールでの修正手順
- AWSマネジメントコンソールにログインし、OpenSearch Serviceコンソールを開きます。
 - 修正対象のドメインを選択し、「アクション」メニューから「セキュリティ設定の編集」を選択するか、ドメイン詳細画面の「セキュリティ設定」タブから「編集」をクリックします。
 - 「暗号化」セクションを見つけ、「ノード間暗号化」の設定項目で「有効化」または「有効」を選択(チェックボックスやトグルの場合あり)します。
 

4. 設定変更後、「変更の保存」をクリックします。
Terraformでの修復手順
# AWSプロバイダーの設定
provider "aws" {
  region = "ap-northeast-1"  # 東京リージョン
}
# 既存のOpenSearchドメインのデータソース
data "aws_opensearch_domain" "existing" {
  domain_name = "ng-opensearch"  # 既存のドメイン名を指定
}
# OpenSearchドメインのアップデート
resource "aws_opensearch_domain" "updated" {
  domain_name    = data.aws_opensearch_domain.existing.domain_name
  engine_version = data.aws_opensearch_domain.existing.engine_version
  cluster_config {
    instance_type            = data.aws_opensearch_domain.existing.cluster_config[0].instance_type
    instance_count           = data.aws_opensearch_domain.existing.cluster_config[0].instance_count
    zone_awareness_enabled   = data.aws_opensearch_domain.existing.cluster_config[0].zone_awareness_enabled
    dedicated_master_enabled = data.aws_opensearch_domain.existing.cluster_config[0].dedicated_master_enabled
    dedicated_master_type    = data.aws_opensearch_domain.existing.cluster_config[0].dedicated_master_type
    dedicated_master_count   = data.aws_opensearch_domain.existing.cluster_config[0].dedicated_master_count
  }
  ebs_options {
    ebs_enabled = data.aws_opensearch_domain.existing.ebs_options[0].ebs_enabled
    volume_type = data.aws_opensearch_domain.existing.ebs_options[0].volume_type
    volume_size = data.aws_opensearch_domain.existing.ebs_options[0].volume_size
  }
  vpc_options {
    subnet_ids         = data.aws_opensearch_domain.existing.vpc_options[0].subnet_ids
    security_group_ids = data.aws_opensearch_domain.existing.vpc_options[0].security_group_ids
  }
  advanced_options = data.aws_opensearch_domain.existing.advanced_options
  access_policies = data.aws_opensearch_domain.existing.access_policies
  # ノード間暗号化を有効化
  node_to_node_encryption {
    enabled = true
  }
  encrypt_at_rest {
    enabled = true
  }
  domain_endpoint_options {
    enforce_https       = true
    tls_security_policy = "Policy-Min-TLS-1-2-2019-07"
  }
  tags = data.aws_opensearch_domain.existing.tags
  # 既存のドメインを置き換える
  lifecycle {
    create_before_destroy = true
  }
}
# アップデートされたドメインの情報を出力
output "updated_domain_id" {
  value = aws_opensearch_domain.updated.domain_id
}
output "updated_domain_name" {
  value = aws_opensearch_domain.updated.domain_name
}
output "updated_domain_endpoint" {
  value = aws_opensearch_domain.updated.endpoint
}
Terraformコードのポイントと注意点:
- 設定箇所:Terraform
aws_opensearch_domainリソース内にnode_to_node_encryptionブロックを追加し、その中のenabled属性をtrueに設定することが、このポリシーに準拠するための中心的な修正です。
# ノード間暗号化を有効化 node_to_node_encryption { enabled = true } - 更新方式(重要):
- このTerraformコード例では、
dataソースで既存ドメインの設定を読み込み、それを基に新しい設定を持つリソースを定義しています。さらにlifecycle { create_before_destroy = true }を指定しているため、Terraformは既存のドメインを削除する前に、新しい設定(ノード間暗号化が有効)で新しいドメインを作成しようとします。これは実質的にドメインの置換(リプレース) となります。 - OpenSearch Serviceの特定の変更(ノード間暗号化の有効化など)はこの置換方式(Blue/Green Deployment)が必要になる場合があります。
 
 - このTerraformコード例では、
 - 影響:
- ドメインの置換には時間がかかります。
 - 一時的に新旧両方のドメインが存在する期間が発生するため、コストが増加する可能性があります。
 - ドメインのエンドポイントが変わる可能性があります(カスタムエンドポイントを使用していない場合)。アプリケーション側の接続先変更が必要になる場合があるので注意が必要です。
 - 適用前に、この置換方式の影響を十分に理解し、計画的に実施してください。
 
 - その他のセキュリティ設定:
- コード例には、ベストプラクティスとして 
encrypt_at_rest(保管時の暗号化) やdomain_endpoint_options(HTTPS強制、TLSポリシー設定) も含まれています。これらも合わせて設定することが推奨されます。 
 - コード例には、ベストプラクティスとして 
 
最後に
今回は、OpenSearch Serviceドメインのノード間暗号化設定について解説しました。ノード間暗号化を有効にすることで、クラスター内のデータ転送中に発生する可能性のある傍受や改ざんのリスクを低減できます。必ず暗号化を有効にし、データを保護してください。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。
CSPMについてはこちらで解説しております。併せてご覧ください。
            