AWS Site-to-Site VPN 接続用の VPN トンネルの設定手順

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

この記事では、AWS Site-to-Site VPN接続用の両方のVPNトンネルがUPステータスではない状態について、リスクと対策を解説します。

リスク

AWS Site-to-Site VPN接続は、オンプレミスネットワークとAWS VPC間のセキュアな通信を確立するための重要な要素です。このVPN接続は、高可用性を提供するために2つの独立したVPNトンネルで構成されています。一方または両方のトンネルが「DOWN」ステータスである場合、以下のようなリスクが発生します。

  • 可用性の低下: 両方のトンネルが稼働していることが理想ですが、片方のトンネルがダウンすると、VPN接続はもう一方のトンネルに依存することになります。もし残りのトンネルもダウンした場合、オンプレミスとAWS間の通信が完全に途絶し、アプリケーションやサービスに重大な影響を及ぼします。
  • 冗長性の喪失: VPN接続が2つのトンネルを持つのは、冗長性を確保し、単一障害点のリスクを軽減するためです。トンネルの片方がダウンしている状態は、この冗長性が失われた状態であり、予期せぬ障害に対する脆弱性が増大します。
  • データ転送の遅延または中断: ダウンしているトンネルがある場合、データ転送が遅延したり、一部のトラフィックがルーティングされずに中断したりする可能性があります。これはビジネスの継続性に悪影響を与えます。
  • セキュリティの懸念: VPNトンネルのダウンは、オンプレミス側のVPNデバイスの問題、ネットワーク設定の誤り、AWS側の問題など、様々な原因で発生します。これらの原因の中には、潜在的なセキュリティ上の問題を示すものもあります。

対策

AWS Site-to-Site VPN接続の両方のVPNトンネルが常に「UP」ステータスであることを確認し、高可用性冗長性を維持することが非常に重要です。

  • VPNトンネルの状態監視: Amazon CloudWatchを使用して、VPNトンネルのステータス(TunnelStateメトリクス)を継続的に監視します。トンネルのステータスが「DOWN」に変わった場合にアラートを発するように設定しましょう。
  • アラート通知の設定: VPNトンネルがダウンした際に、AWS SNS (Simple Notification Service) を通じて、担当者や運用チームにEメールやチャットなどで即座に通知が届くように設定します。
  • 根本原因の調査と対応: トンネルがダウンした場合は、AWS側の問題(Service Health Dashboardの確認)またはオンプレミス側のVPNデバイス、ネットワーク、ファイアウォールなどの根本原因を迅速に調査し、必要な復旧措置を講じます。
  • VPN構成の定期的なレビュー: VPN接続の設定(ルーティング、キー交換、暗号化など)を定期的にレビューし、ベストプラクティスに準拠していることを確認します。
  • 自動復旧の検討: AWS Lambdaなどを使用して、特定のVPNトンネルダウンイベントに対して自動的に復旧プロセスをトリガーする仕組みを検討することもできます。

修復方法

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

AWSコンソールを使用して、AWS Site-to-Site VPNトンネルのステータスを確認し、CloudWatchアラームを設定します。

  1. VPNトンネルのステータス確認:
    • AWSコンソールにログインし、VPCサービスを開きます。
    • 左側のナビゲーションペインで、「VPN接続」の下にある「Site-to-Site VPN接続」を選択します。
    • 対象のVPN接続を選択し、「トンネルの詳細」タブを確認します。両方のトンネルの「ステータス」が「UP」になっているかを確認します。もし「DOWN」になっているトンネルがあれば、その原因を調査します。
  2. CloudWatchアラームの設定:
    • AWSコンソールにログインし、CloudWatchサービスを開きます。
    • 左側のナビゲーションペインで**「アラーム」を展開し、「アラームの作成」**をクリックします。
    • **「メトリクスを選択」**をクリックします。
    • 「AWS/VPN」名前空間を展開し、**「VPN接続」**を選択します。
    • 対象のVPN接続に関連するメトリクスの中から、**「TunnelState」**を選択します。通常、VPN接続ごとに2つのTunnelStateメトリクスが表示されます(例: vpn-xxxxxxxxTunnelState)。両方のトンネルのメトリクスを選択します。
    • 「グラフ化したメトリクス」タブで、各トンネルについて次の設定を行います。
      • 統計: 「最小」
      • 期間: 「1分」
    • 「条件」セクションで、次のように設定します。
      • しきい値の種類: 「静的」アラームが次の場合は常に: 「次以下」しきい値: 0 (VPNトンネルがダウンすると値が0になるため)
    • 「追加のアクションの設定」セクションで、アラームがトリガーされた場合の通知先を設定します(例: 既存のSNSトピックを選択するか、新しいSNSトピックを作成してEメールアドレスなどを登録します)。
    • アラーム名と説明を入力し、「アラームの作成」をクリックします。
    • 各VPNトンネルに対して個別にこのアラーム設定を繰り返します。

Terraformでの修復手順

TerraformでAWS Site-to-Site VPN接続用のCloudWatchアラームを設定するには、aws_cloudwatch_metric_alarm リソースを使用します。VPN接続自体はaws_vpn_connectionリソースで管理されていると仮定します。

# 既存のVPN接続IDを取得 (または Terraform で作成した VPN 接続の ID を参照)
data "aws_vpn_connection" "example" {
  tags = {
    Name = "your-vpn-connection-name" # 実際のVPN接続名に置き換えてください
  }
}

# アラート通知用のSNSトピック (既に存在する場合は data "aws_sns_topic" で参照)
resource "aws_sns_topic" "vpn_alert_topic" {
  name = "vpn-tunnel-status-alerts"
}

# SNSトピックへのサブスクリプション (例: Eメール)
resource "aws_sns_topic_subscription" "email_subscription" {
  topic_arn = aws_sns_topic.vpn_alert_topic.arn
  protocol  = "email"
  endpoint  = "your-email@example.com" # あなたのメールアドレスに置き換えてください
}

# VPNトンネル1の監視アラーム
resource "aws_cloudwatch_metric_alarm" "vpn_tunnel_1_down_alarm" {
  alarm_name          = "${data.aws_vpn_connection.example.tags.Name}-tunnel-1-down-alarm"
  comparison_operator = "LessThanOrEqualToThreshold"
  evaluation_periods  = 1
  metric_name         = "TunnelState"
  namespace           = "AWS/VPN"
  period              = 60 # 1分
  statistic           = "Minimum"
  threshold           = 0 # 0以下になったらアラーム
  alarm_description   = "VPN Tunnel 1 for ${data.aws_vpn_connection.example.tags.Name} is DOWN!"
  
  dimensions = {
    VpnId         = data.aws_vpn_connection.example.id
    TunnelIpAddress = data.aws_vpn_connection.example.vgw_telemetry[0].outside_ip_address # 最初のトンネルの外部IPアドレス
  }

  alarm_actions       = [aws_sns_topic.vpn_alert_topic.arn]
  ok_actions          = [aws_sns_topic.vpn_alert_topic.arn] # オプション: OK状態への遷移時も通知
}

# VPNトンネル2の監視アラーム
resource "aws_cloudwatch_metric_alarm" "vpn_tunnel_2_down_alarm" {
  alarm_name          = "${data.aws_vpn_connection.example.tags.Name}-tunnel-2-down-alarm"
  comparison_operator = "LessThanOrEqualToThreshold"
  evaluation_periods  = 1
  metric_name         = "TunnelState"
  namespace           = "AWS/VPN"
  period              = 60 # 1分
  statistic           = "Minimum"
  threshold           = 0 # 0以下になったらアラーム
  alarm_description   = "VPN Tunnel 2 for ${data.aws_vpn_connection.example.tags.Name} is DOWN!"
  
  dimensions = {
    VpnId         = data.aws_vpn_connection.example.id
    TunnelIpAddress = data.aws_vpn_connection.example.vgw_telemetry[1].outside_ip_address # 2番目のトンネルの外部IPアドレス
  }

  alarm_actions       = [aws_sns_topic.vpn_alert_topic.arn]
  ok_actions          = [aws_sns_topic.vpn_alert_topic.arn] # オプション: OK状態への遷移時も通知
}

上記の例では、既存のVPN接続を参照し、その2つのトンネルそれぞれに対してTunnelStateメトリクスを監視するCloudWatchアラームを設定しています。dimensionsブロックのTunnelIpAddressは、data.aws_vpn_connection.example.vgw_telemetryから取得しています。

your-vpn-connection-nameyour-cloudtrail-bucketyour-organization-idyour-email@example.comなどのプレースホルダーは、実際の環境に合わせて修正してください。

最後に

この記事では、AWS Site-to-Site VPN接続用の両方のVPNトンネルがUPステータスではない状態について、リスクと対策を解説しました。VPNトンネルの状態を継続的に監視し、異常を迅速に検知・対応することで、オンプレミスとAWS間の通信の安定性ビジネスの継続性を確保できます。

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

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

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

この記事をシェアする

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

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

料金プランを詳しく見る