OpenSearchドメインでTLS1.2未満のバージョンを用いている場合の設定修正手順

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

この記事では、TLS1.2未満のバージョンを用いているOpenSearchドメインについて、そのリスクと対策を解説します。

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

ポリシーの説明

[Opensearch.8] OpenSearch ドメインへの接続は最新の TLS セキュリティポリシーを使用して暗号化する必要があります

OpenSearch Service の Security Hub コントロール – AWS Security Hub

このコントロールは、Amazon OpenSearch Service ドメインエンドポイントが最新の TLS セキュリティポリシーを使用するように設定されているかどうかを確認します。OpenSearch ドメインエンドポイントが最新のサポートされているポリシーを使用するように設定されていない場合、または HTTPS が有効になっていない場合、コントロ―ルは失敗します。

リスクとしては、OpenSearch ドメインへの接続で最新の TLS (Transport Layer Security) セキュリティポリシーが使用されていない場合、古い暗号化方式やプロトコルが使用され、セキュリティ上の脆弱性が生じる可能性があります。これにより、データの盗聴や改ざんといったリスクが高まります。

このリスクを回避するために、OpenSearch ドメインの TLS セキュリティポリシーを最新のものに更新することが望ましいです。

修復方法

AWS CLIでの修正手順

前提条件

  • AWS CLIがインストールされ、適切に設定されていること
  • 必要なIAM権限が付与されていること(OpenSearchの読み取りと更新の権限)
  • jqがインストールされていること(JSONの処理に使用)

手順

  1. ドメイン名の取得と確認 AWSマネジメントコンソールまたはCLIを使用してOpenSearchドメイン名を取得します。
  • CLIを使用する場合:
aws opensearch list-domain-names --query 'DomainNames[*].DomainName' --output table

2. 現在の設定の確認

  • ドメインの現在のTLSセキュリティポリシーを確認します。
domain_name="your-domain-name"
aws opensearch describe-domain-config --domain-name $domain_name --query 'DomainConfig.DomainEndpointOptions.Options' --output json | jq .

3. TLSセキュリティポリシーの更新

  • TLSセキュリティポリシーを最新の “Policy-Min-TLS-1-2-2019-07” に更新します。

aws opensearch update-domain-config –domain-name $domain_name \\ –domain-endpoint-options ‘{“TLSSecurityPolicy”: “Policy-Min-TLS-1-2-2019-07”}’ \\ –output json | jq .

4. 更新の確認 更新が正常に適用されたことを確認します。

aws opensearch describe-domain-config --domain-name $domain_name --query 'DomainConfig.DomainEndpointOptions.Options' --output json | jq .

5. ドメインステータスの監視 更新プロセス中、ドメインのステータスを監視します。

watch -n 10 'aws opensearch describe-domain --domain-name $domain_name --query "DomainStatus.Processing" --output text'

6. クライアント接続のテスト 更新完了後、クライアントアプリケーションが新しいTLS設定で正常に接続できることを確認します。

エラーハンドリング

  • 更新コマンドが失敗した場合、エラーメッセージを確認し、必要に応じてAWSサポートに連絡してください。
  • 一般的なエラー:
    • 権限不足: IAM権限を確認してください。
    • サービス制限: AWSサポートに制限緩和をリクエストしてください。
    • ドメインが処理中: 現在の処理が完了するまで待ってから再試行してください。

ベストプラクティス

  1. 更新前にドメインのスナップショットを取得してください。
  2. 低トラフィック時間帯に更新を実行してください。
  3. テスト/ステージング環境で先に更新をテストしてください。
  4. 更新後、セキュリティグループとネットワークACLが適切に設定されていることを確認してください。
  5. 定期的にTLSセキュリティポリシーを確認し、最新の推奨事項に従ってください。

自動化のヒント

  1. 上記の手順をシェルスクリプトにまとめ、複数のドメインに対して一括で実行できるようにします。
  2. AWS Systems Managerのオートメーションを使用して、定期的なTLSポリシーチェックと更新を自動化することを検討してください。
  3. AWS Configのカスタムルールを作成して、非準拠のTLSポリシーを検出し、自動的に修正するワークフローをトリガーすることができます。

注意事項

  • この更新にはダウンタイムが発生する可能性があります。
  • 更新後、一部のレガシークライアントが接続できなくなる可能性があります。事前に互換性を確認してください。
  • TLS 1.2への移行は多くの組織でセキュリティ要件となっていますが、アプリケーションの互換性を十分にテストしてください。

この手順に従うことで、OpenSearchドメインのTLSセキュリティを効果的に強化し、最新のベストプラクティスに準拠することができます。

Terraformでの修復手順

# プロバイダーの設定
provider "aws" {
  region = "ap-northeast-1"  # 東京リージョン
}

# 既存のOpenSearchドメインのデータソース
data "aws_opensearch_domain" "existing" {
  domain_name = "your-domain-name"  # 既存のドメイン名を指定
}

# 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
  }

  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_security_options {
    enabled                        = true
    internal_user_database_enabled = true
    master_user_options {
      master_user_name     = var.master_user_name
      master_user_password = var.master_user_password
    }
  }

  domain_endpoint_options {
    enforce_https       = true
    tls_security_policy = "Policy-Min-TLS-1-2-2019-07"  # TLS v1.2のみを許可する最新のポリシー
  }

  encrypt_at_rest {
    enabled = true
  }

  node_to_node_encryption {
    enabled = true
  }

  tags = data.aws_opensearch_domain.existing.tags
}

# マスターユーザー名を変数として定義
variable "master_user_name" {
  description = "Master user name for OpenSearch domain"
  type        = string
}

# マスターユーザーのパスワードを変数として定義
variable "master_user_password" {
  description = "Master user password for OpenSearch domain"
  type        = string
  sensitive   = true
}

# 出力:更新されたドメインの情報
output "domain_id" {
  value = aws_opensearch_domain.updated.domain_id
}

output "domain_endpoint" {
  value = aws_opensearch_domain.updated.endpoint
}

output "tls_security_policy" {
  value = aws_opensearch_domain.updated.domain_endpoint_options[0].tls_security_policy
}

最後に

今回は、OpenSearch ドメインへの接続で最新の TLS セキュリティポリシーを使用していない場合のリスクとその対策についてご紹介しました。最新の TLS セキュリティポリシーを適用することで、セキュリティ上の脆弱性を低減し、データの保護を強化できます。設定を確認し、必要に応じて本記事を参考に修正してみてください。

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

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

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

この記事をシェアする

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

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

料金プランを詳しく見る