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機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。