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アラームを設定します。
- VPNトンネルのステータス確認:
- AWSコンソールにログインし、VPCサービスを開きます。
 - 左側のナビゲーションペインで、「VPN接続」の下にある「Site-to-Site VPN接続」を選択します。
 - 対象のVPN接続を選択し、「トンネルの詳細」タブを確認します。両方のトンネルの「ステータス」が「UP」になっているかを確認します。もし「DOWN」になっているトンネルがあれば、その原因を調査します。
 
 - CloudWatchアラームの設定:
- AWSコンソールにログインし、CloudWatchサービスを開きます。
 - 左側のナビゲーションペインで**「アラーム」を展開し、「アラームの作成」**をクリックします。
 - **「メトリクスを選択」**をクリックします。
 - 「AWS/VPN」名前空間を展開し、**「VPN接続」**を選択します。
 - 対象のVPN接続に関連するメトリクスの中から、**「TunnelState」**を選択します。通常、VPN接続ごとに2つの
TunnelStateメトリクスが表示されます(例:vpn-xxxxxxxx–TunnelState)。両方のトンネルのメトリクスを選択します。 - 「グラフ化したメトリクス」タブで、各トンネルについて次の設定を行います。
- 統計: 「最小」
 - 期間: 「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-name、your-cloudtrail-bucket、your-organization-id、your-email@example.comなどのプレースホルダーは、実際の環境に合わせて修正してください。
最後に
この記事では、AWS Site-to-Site VPN接続用の両方のVPNトンネルがUPステータスではない状態について、リスクと対策を解説しました。VPNトンネルの状態を継続的に監視し、異常を迅速に検知・対応することで、オンプレミスとAWS間の通信の安定性とビジネスの継続性を確保できます。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。
CSPMについてはこちらで解説しております。併せてご覧ください。
            