Amazon RedshiftクラスターのSSL接続が必須化されていない

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

今回は、Amazon Redshiftクラスターのパラメータグループで 「[Redshift.2] Amazon Redshift クラスターへの接続は転送中に暗号化する必要があります」について、そのリスクと対策を解説します。

ポリシーの説明

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

[Redshift.2] Amazon Redshift クラスターへの接続は転送中に暗号化する必要があります

このコントロールは、Amazon Redshift クラスターへの接続において、転送中に暗号化を使用する必要があるかどうかをチェックします。Amazon Redshift クラスターパラメータ require_SSL が True に設定されていない場合、チェックは失敗します。

リスク

Amazon Redshiftは、ペタバイト規模のデータウェアハウスサービスであり、大量のデータを分析するために利用されます。Redshiftクラスターへの接続においてSSL/TLS暗号化が必須になっていない場合、以下のようなセキュリティ上のリスクが発生します。

  • データ傍受 (盗聴) のリスク: SSL/TLS暗号化が有効になっていない場合、クライアントアプリケーション(BIツール、ETLツールなど)とRedshiftクラスター間のネットワーク通信は暗号化されません。これにより、転送中の機密データ(例: 顧客情報、財務データ、分析クエリ結果)が、悪意のあるアクターによって傍受(盗聴)されるリスクが生じます。これは、データ漏洩の直接的な原因となりえます。
  • 中間者攻撃 (Man-in-the-Middle Attack) の可能性: SSL/TLSは、通信相手の身元を証明する役割も果たします。証明書検証が行われない場合、攻撃者がクライアントとRedshiftクラスターの間に割り込み、正規の通信相手になりすましてデータを操作したり、誤った情報をクライアントに送信させたりする中間者攻撃のリスクが高まります。
  • データの整合性の欠如: 暗号化されていない通信は、データの改ざんに対する保護も弱くなります。攻撃者が転送中のデータを変更しても、クライアントやRedshift側でその改ざんを検知することが困難になります。
  • コンプライアンス違反: 多くの業界規制やコンプライアンス基準(例: GDPR、HIPAA、PCI DSS、ISO 27001)では、機密データの転送中に暗号化を義務付けています。Redshiftクラスターへの接続でSSL/TLSが必須になっていない場合、これらの要件を満たせず、監査での指摘、法的リスク、高額な罰金につながる可能性があります。
  • 信頼性の低下: セキュアでない接続は、システムの全体的な信頼性を低下させ、予期せぬデータ破損やセキュリティインシデントを引き起こす可能性があります。

対策

RedshiftクラスターのパラメータグループでSSL接続を必須にすることは、データ転送中の機密性、整合性、および可用性を保護するための基本的なセキュリティ対策です。

  • パラメータグループの変更: Redshiftクラスターは、パラメータグループを使用して設定を管理します。SSL接続を必須にするには、このパラメータグループ内の require_ssl パラメータを true に設定します。
  • クライアントアプリケーションの設定: require_ssltrue に設定すると、Redshiftクラスターへのすべての接続がSSL/TLSを使用するように強制されます。したがって、Redshiftに接続するすべてのクライアントアプリケーション(SQLクライアント、BIツール、ETLツール、アプリケーションコードなど)も、SSL/TLS接続を使用するように設定する必要があります。
  • CA証明書の取得と設定: クライアントアプリケーションがRedshiftクラスターのSSL証明書を検証できるように、AWSが提供するRedshiftのCA証明書をダウンロードし、クライアント側のトラストストアに設定する必要があります。これにより、中間者攻撃を防ぎ、接続の信頼性を確保できます。
  • セキュリティグループ/ネットワークACLの確認: RedshiftクラスターのセキュリティグループおよびネットワークACLが、必要なポート(デフォルトは5439)でインバウンド接続を許可していることを確認します。SSL/TLS接続自体はポート番号を変更しません。
  • 定期的な監視: Redshiftクラスターへの接続ログ(CloudTrailなど)を監視し、SSL/TLS接続が適切に行われているか、不審な接続試行がないかを確認します。

修復方法

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

AWSコンソールを使用して、RedshiftクラスターのパラメータグループでSSL接続を必須にします。

  1. Redshiftサービスへ移動: AWSコンソールにログインし、Amazon Redshift サービスを開きます。
  2. パラメータグループの選択: 左側のナビゲーションペインで「設定」の下にある「パラメータグループ」を選択します。
  3. パラメータグループの作成または選択:
    • 既存のパラメータグループを修正する場合: 対象のパラメータグループを選択し、「アクション」から「編集」をクリックします。デフォルトのパラメータグループは直接編集できないため、コピーして新しいパラメータグループを作成する必要があります。
    • 新しいパラメータグループを作成する場合: 「パラメータグループの作成」をクリックします。
      • パラメータグループファミリー」で、Redshiftクラスターのノードタイプに合ったファミリー(例: redshift-1.0)を選択します。
      • グループ名」と「説明」を入力し、「作成」をクリックします。
  4. require_ssl パラメータの編集: 作成または選択したパラメータグループの詳細画面で、パラメータリストから require_ssl を検索します。
    • require_ssl パラメータを選択し、「パラメータの編集」をクリックします。
    • 」を「true」に設定します。
    • 変更を保存」をクリックします。
  5. クラスターへのパラメータグループの関連付け:
    • 左側のナビゲーションペインで「クラスター」を選択します。
    • SSL接続を必須にしたいRedshiftクラスターを選択し、「アクション」から「変更」をクリックします。
    • データベース構成」セクションで、「クラスターパラメータグループ」ドロップダウンメニューから、先ほど設定した(または新しく作成した)パラメータグループを選択します。
    • 変更を保存」をクリックします。
    • クラスターの再起動: パラメータグループの変更を適用するには、Redshiftクラスターを再起動する必要がある場合があります。変更を保存した後、クラスターのステータスを確認し、必要であれば手動で再起動します。
  6. クライアントアプリケーションの設定 (重要): Redshiftに接続するすべてのクライアントアプリケーションがSSL/TLS接続を使用するように設定されていることを確認します。
    • AWSが提供するRedshiftのCA証明書をダウンロードし、クライアント側のトラストストアにインポートします。
    • 接続文字列や設定ファイルで、SSL/TLSを有効にするオプション(例: sslmode=requiresslmode=verify-full)を指定します。

Terraformでの修復手順

TerraformでRedshiftクラスターのパラメータグループでSSL接続を必須にするには、aws_redshift_parameter_group リソースと aws_redshift_cluster リソースを使用します。

# Redshift パラメータグループの作成
resource "aws_redshift_parameter_group" "redshift_ssl_parameter_group" {
  name        = "redshift-ssl-required-group"
  family      = "redshift-1.0" # あなたのRedshiftクラスターのファミリーに合わせる
  description = "Redshift parameter group requiring SSL connection"

  parameter {
    name  = "require_ssl"
    value = "true" # SSL接続を必須に設定
  }

  tags = {
    Environment = "Production"
  }
}

# Redshift クラスターの定義
resource "aws_redshift_cluster" "my_redshift_cluster" {
  cluster_identifier       = "my-secure-redshift-cluster"
  node_type                = "dc2.large" # あなたのノードタイプに合わせる
  cluster_type             = "single-node" # または "multi-node"
  master_username          = "admin"
  master_password          = "MySecurePassword123!" # 実際にはSecrets Managerなどを使用推奨
  skip_final_snapshot      = true # テスト用。本番環境ではfalseを推奨
  publicly_accessible      = false # セキュリティのためfalse推奨
  vpc_security_group_ids   = [aws_security_group.redshift_sg.id]
  cluster_subnet_group_name = aws_redshift_subnet_group.redshift_subnet_group.name

  # 作成したパラメータグループをクラスターに適用
  cluster_parameter_group_name = aws_redshift_parameter_group.redshift_ssl_parameter_group.name

  # クラスターの再起動が必要な変更の場合、apply_immediately を true に設定
  # apply_immediately = true # パラメータグループの変更をすぐに適用する場合

  tags = {
    Name = "MySecureRedshiftCluster"
  }
}

# (例) Redshift クラスター用のセキュリティグループ
resource "aws_security_group" "redshift_sg" {
  name        = "redshift-cluster-sg"
  description = "Allow inbound traffic to Redshift cluster"
  vpc_id      = "vpc-0abcdef1234567890" # あなたのVPC IDに置き換え

  ingress {
    from_port   = 5439 # Redshiftのデフォルトポート
    to_port     = 5439
    protocol    = "tcp"
    cidr_blocks = ["10.0.0.0/16"] # あなたの許可したいIP範囲に置き換え
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

# (例) Redshift クラスター用のサブネットグループ
resource "aws_redshift_subnet_group" "redshift_subnet_group" {
  name        = "redshift-subnet-group"
  description = "Subnet group for Redshift cluster"
  subnet_ids  = ["subnet-0abcdef1234567890", "subnet-0fedcba9876543210"] # あなたのサブネットIDに置き換え
}

上記のTerraformコードでは、以下のリソースを定義しています。

  1. aws_redshift_parameter_group.redshift_ssl_parameter_group: require_ssl パラメータを true に設定した新しいRedshiftパラメータグループを作成します。family は、使用しているRedshiftクラスターのノードタイプに合わせてください。
  2. aws_redshift_cluster.my_redshift_cluster: 作成したパラメータグループ (aws_redshift_parameter_group.redshift_ssl_parameter_group.name) を cluster_parameter_group_name パラメータでRedshiftクラスターに関連付けます。

重要な注意点:

  • require_ssl パラメータの変更は、Redshiftクラスターの再起動が必要になる場合があります。apply_immediately = true を設定することで、Terraform適用時にすぐに再起動がトリガーされますが、本番環境ではダウンタイムを考慮して手動での再起動を検討してください。
  • Redshiftクラスターに接続するすべてのクライアントアプリケーションは、SSL/TLS接続を使用するように設定する必要があります。

my-secure-redshift-clustervpc-0abcdef1234567890 などのプレースホルダーは、実際の環境に合わせて修正してください。

最後に

この記事では、RedshiftクラスターのパラメータグループでSSL接続を必須にすることの重要性について解説しました。Redshiftへの接続にSSL/TLS暗号化を強制することは、転送中の機密データを保護し、中間者攻撃やデータ傍受のリスクを軽減するために不可欠です。

貴社のRedshiftクラスターでは、SSL接続が必須になっていますか?この機会にぜひ設定を確認・強化してみてください。

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

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

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

この記事をシェアする

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

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

料金プランを詳しく見る