yamamototis1105’s tech blog

ネットワークを中心とした技術ブログです

Site-to-Site VPN over Direct Connectのプライベート接続でハマった落とし穴3選

はじめに

近年、セキュリティ要件が高まっており、「通信経路の暗号化」が必須となるケースが増えています。ただ、アプリケーションレイヤでの暗号化が難しい場合には、ネットワークレイヤでの暗号化が必要となってきます。さらに、ハイブリッドネットワークのDirect Connet接続構成においては、MAC暗号化は10G以上の接続が必要なため、Site-to-Site VPN over Direct Connectのプライベート接続が候補になります。

本記事では、Site-to-Site VPN over Direct Connectのプライベート接続の導入・運用でハマった事例を紹介します。対象者としてDirect ConnectやSite-to-Site VPNの基本的な仕組みや導入・運用経験はあるものの、Site-to-Site VPN over Direct Connectのプライベート接続は経験がない、といった方に実際の経験で得られた教訓を共有します。本記事の内容は2026年4月時点の情報に基づいており、最新の仕様や機能については公式情報をご確認下さい。

ネットワーク概要

本記事では、オンプレミスとAWSがWANサービスで接続されたハイブリッドネットワークをベースに見ていきます。構成や条件の概要は以下に示し、落とし穴の各項目で関連するパラメータ詳細を示しています。

環境 説明
オンプレミス
  • ルータはCISCO製で二重化
  • ルータ間はiBGP、WAN向けはeBGP、LAN向けはスタティックルート
WAN
  • 網は異なるキャリアで二重化
  • 主系網はL3サービスでBGP接続、副系網はL2サービスで直接接続
AWS
  • リソースはTGW + DXGW + DX + Site-to-Site VPN
  • DXはSite-to-Site VPNピアアドレスをルーティングするために利用

落とし穴①:ルーティング設計誤りによる意図しないルート選択

事象
運用中のハイブリッドネットワークにおいて、暗号化要件のある業務通信を流すことになりました。Transit Gatewayは既存リソースを流用し、Site-to-Site VPNとCustomer Gatewayは新規リソースを作成したところ、エンドツーエンドの通信は問題なく成功しました。ただ、肝心のルートを確認した結果、主系ルートが故障した場合に副系ルートのみSite-to-Site-VPNでなくDirectConnect経由のままになっており、暗号化要件を満たしていない状態になっていました。
原因
Direct ConnectとSite-to-Site VPN経由のBGP属性/条件の違いにより、意図しないルートを選択したためでした。オンプレミスルータで明示的にルート制御を行っていなかったため、主にはAS_PATHおよびoldest pathによりルートが決定されていました。
AS_PATH
Direct Connet経由ではL2サービス利用時はDXGWのみ、L3サービス利用時はDXGWとWANのAS番号が追加されます。一方、Site-to-Site VPNではL2/L3サービスを問わずに、Transite GatewayのAS番号のみが追加されます。

そのため、L3サービスを利用していた主系ルートはDirect Connect経由のAS_PATHが長くなり、Site-to-Site VPN経由のルートが選択されました。一方、L2サービスを利用していた副系ルートはDirect ConncetとSite-to-Site VPN経由のAS_PATHが等しいため、この時点ではルートがまだ決定されませんでした。

Direct Connet経由でL2サービス利用時は、DXGWだけではなくTransit GatewayのAS番号も追加されるのでは?と思った方もいるのではないでしょうか。こちらは、DXGWがAS PATH OverrideしているかのようにDXGWのAS番号のみ連携する仕様のためです。
aws.amazon.com
oldest path
L2サービス利用時などのAS_PATH長が等しい場合、安定性を優先するため既存ルートを維持する動作により、結果として先に接続していたルートが選択される場合があります。

そのため、L2サービスを利用していた副系ルートは後から接続したSite-to-Site VPN経由でなく、先に接続していたDirect Connect経由のルートが選択される結果となりました。

ただし、oldest pathはRFC 4271で定義されておらず、ベンダ実装へ依存します。あくまで安定性を優先する仕様と捉え、より手堅いBGP属性/条件でルート制御することが重要です。
datatracker.ietf.org
対処
事象と原因だけ見れば、DirectConnectよりSite-to-Site VPN経由の方が優先されるようにメトリック調整することで解決します。しかし、以下の理由により、DirectConnect経由はVPNトンネルのピアアドレスのみ、Site-to-Site VPN経由は業務通信アドレスのみ許可するルート制限を行いました。
  • ルーティング設計をシンプルにすることで維持の負担を軽減するため
  • VPNトンネルが故障した場合、暗号化されていない通信が流れる可能性があるため
  • 不要な通信が流れること自体がセキュリティ上よろしくないため

Direct ConnectとSite-to-Site VPNを併用する場合、BGPのデフォルト動作だけでは意図したルートが選択されるとは限りません。BGPメトリック調整のほかルート制限などを用いることで、暗号化要件を確実に満たす設計とすることが重要です。

落とし穴②:アドレス設計誤りによるVPN切断

事象
ハイブリッドネットワークの主系ルート故障試験で、オンプレミスルータのWAN抜線やTunnel閉塞で疑似故障を再現し、副系ルートに問題なくフェイルオーバーすることを確認していました。ところが、主系ルートのDirect ConnectでBGPフェイルオーバーテスト機能を実行してみると、副系ルートにフェイルオーバーするものの、Site-to-Site VPNのIPsecトンネルがダウンしていました。その他の確認できた内容は、以下の通りです。
  • 主系ルートが復旧すると、副系ルートも復旧する
  • 試験を3回実施し、事象が3回とも発生しているため再現性あり
  • Direct ConnectのBGPセッションは、アップしたまま
  • キャプチャデータを見る限り、AWSからオンプレミスへのパケットが届いていない
  • その他、設定・ログ・ステータスは異常なし
原因
Direct ConnectのBGPピアとSite-to-Site VPNのIPsecピアの両方ともに同一アドレスを利用していたためでした。オンプレミスネットワークでは不要なアドレス割り当てを避けるため常套手段でしたが、AWSネットワークでは不具合が生じる仕様のようでした。

AWSドキュメントでは、Direct ConnectのBGPピアはpoint-to-pointのアドレスを、Site-to-Site VPNのIPsecピアはオンプレミスルータのLoopbackまたはLANインタフェースのアドレスを使用することが推奨されています。
docs.aws.amazon.com
対処
AWSドキュメントに記載の通り、Site-to-Site VPNのIPsecピアをオンプレミスルータのWANからLoopbackインタフェースへ変更し、事象が解消することを確認できました。変更で必要な設定作業は、以下の通りです。
  • オンプレミスルータにて、Loopbackインタフェースを作成
  • オンプレミスルータにて、IPsecトンネルのローカルアドレスをLoopbackアドレスに変更
  • オンプレミスルータにて、Direct ConnectにLoopbackアドレスをアドバタイズするように変更
  • オンプレミスルータにて、ACLでLoopbackアドレスを許可するように変更
  • AWS Customer Gatewayにて、WANからLoopbackのアドレスに変更

オンプレミスネットワークで通用してもAWSネットワークで通用しないことは多々あります。AWSはサービス進化が速いことから、導入実績があってもプロジェクト導入直前にドキュメントを改めて見直すことは重要かと思います。

落とし穴③:頻繁なメンテナンスによるSNMP Trap多発

事象
ハイブリッドネットワークの運用開始直後から、1~2ヶ月あたり1度、また1度あたり数回の頻度でIPsecトンネル/BGPセッションダウンのSNMP Trapメッセージが発生していました。一方、これらのメッセージに関連し、業務通信に影響することはありませんでした。
原因
SNMP Trap多発の原因は、Site-to-Site VPNのメンテナンスでした。時期や環境による差もありますが、Site-to-Site VPNはDirect Connectと比べてメンテナンス頻度が高い傾向があります。

AWS側ではSite-to-Site VPNのライフサイクル制御機能やHealth Dashboardのイベント通知機能などでメンテナンスと判別できますが、オンプレミス側ではルータログなどでメンテナンスと故障が判別できません。そのため、オンプレミスルータからの不要なSNMP trapによる運用業務への影響が課題となりました。

ちなみに、何故SNMP Trapが発生しているにも関わらず、業務通信には影響しないのでしょうか。理由は、Site-to-Site VPNのメンテナンス開始直前にAWSがメトリックを調整し、メンテナンス開始予定のトンネルから冗長化されたもう一方トンネルに業務通信がフェイルオーバーされるためです。詳しい動作については、以下の記事をご覧ください。
yamamototis1105.hatenablog.com
対処
オンプレミス側とAWS側のそれぞれで対処方針を検討しました。
まず、オンプレミス側はルータログなどでメンテナンスと故障が判別できないため、IPsecトンネルおよびBGPセッションダウンに関するSNMP Trapを停止することとしました。一方、SNMP Trapを停止するだけでは故障で発報できなくなります。そこで、AWS側はメンテナンス時を除いて故障時のみ発報する仕組みを検討・実装しました。

AWS側での実装方法の一つとして、CloudWatch Synthetic Monitorを用いてオンプレミスルータのLoopbackアドレスへポーリングし、遅延もしくはパケット損失率が閾値を超過した場合に発報する方法が挙げられます。この方法を実装するうえで、重要なポイントは以下の通りです。
  1. ポーリングがIPsecトンネルのフェイルオーバーに追従できるよう、Loopbackアドレスはオンプレミスルータから冗長化された両方のIPsecトンネルへアドバタイズすること。
  2. IPsecトンネルの単一故障では発報しないため、Site-to-Site VPNのTunnelState(トンネル接続状態)メトリクスも別途監視し、一定時間ダウンした場合に発報すること。
Site-to-Site VPNのメンテナンスによるダウンタイムは1~2分のため、一例としては1分間隔・5回連続でダウンした場合などのCloudWatch Alarm条件が考えられます。

CloudWatch Synthetic Monitorは、ハイブリッドネットワークの通信品質を管理するうえでも有効なサービスです。例えば、遅延やパケット損失率が上昇するようなグレー障害に対して大きな力を発揮します。CloudWatch Synthetic Monitorについては、以下の記事をご覧下さい。
yamamototis1105.hatenablog.com

Site-to-Site VPNではメンテナンスが頻繁に実施されるため、オンプレミス側のSNMP Trapだけでは不要なアラームを避けられません。AWS側の監視サービスを活用することにより、メンテナンス時に発報させず、故障時のみ発報させる監視設計を行うことが重要です。

まとめ

本記事では、Site-to-Site VPN over Direct Connectのプライベート接続の導入・運用でハマった事例、そこから得られた教訓を紹介しました。

これからSite-to-Site VPN over Direct Connectを導入・運用する方にとって、本記事が参考になりますと幸いです。

AWS Interconnectによるマルチクラウド接続

はじめに

 2025年11月30日にAWS Interconnect - multicloud(以下、Interconnectと記載)のプレビューが発表されました。高速かつ安定性の高い閉域接続により、AWSとその他のクラウド間を接続するサービスです。

 ベンダロックインやBest-of-Breedなどの考え方を背景にしてマルチクラウド接続が注目される中で、本記事では実際にInterconnectを検証した結果とともに、今後のマルチクラウド接続を考察します。

 マルチクラウド環境におけるネットワーク接続の方式にお悩みをお持ちの方や、Interconnectによるマルチクラウド接続にご興味をお持ちの方は是非ご覧ください。

マルチクラウド接続の構成パターン

 Interconnectを理解する前提として、そもそもマルチクラウド接続はどのような構成があるかご存じでしょうか。ここではAWSとGoogle Cloudの閉域接続時における構成例を挙げ、一般的なマルチクラウド接続構成とその特徴を整理します。

➊オンプレミス拠点経由
  • AWSとGoogle Cloudハイブリッドネットワークをオンプレミスで接続する構成です。
  • オンプレミスがボトルネックとなりやすいです。
➋WANサービス
  • 通信キャリアが提供するWANサービスを介し、AWSとGoogle Cloudを接続する構成です。
  • 高速かつ安定性が高く、今までのネットワークを活用できるため導入しやすいです。
➌インターコネクトサービス
  • DC事業者が提供するDCサービスを介し、AWSとGoogle Cloudを接続する構成です。
  • 高速かつ安定性が高く、単なる接続だけでなく機能が豊富であることが多いです。
➍インターネットVPN
  • AWSとGoogle Cloudをインターネット経由で接続する構成です。
  • コストは安価で抑えられますが、その他構成と比べると通信品質が劣ります。
➎閉域接続サービス
  • クラウド事業者が提供する閉域接続サービスでAWSとGoogle Cloudを接続する構成です。
  • 高速かつ安定性が高く、直接接続されるため構成が最適化されています。


 本記事で取り扱っているInterconnectは、閉域接続サービスに該当します。上記のような特徴を備えつつもサービスが少なかったこともあり、注目を浴びています。

AWS Interconnectとは

 Interconnectは、高速かつ安定性が高く、AWSとその他のクラウド間を接続します。マネージドサービスにより構築・運用の負荷が軽減され、またオープンな仕様によりネットワーク相互運用性を高められることから、今後も多くのクラウド接続が進むことが期待されます。

 構成は、AWS・Google Cloudとも物理構成を公開していますが、手順等から想定される論理構成を追記しました。今までの方式では接続(AWSはVIFなど・Google CloudはVlan Attachmentなど)を多重度に応じて作成する必要がありました。しかし、この方式ではAWSでInterconnectを作成のうえアクティベーションキーを作成し、GoogleCloudでアクティベーションキーを設定のうえTransport・Peeringを作成するだけでよく、構成が簡素化されたことは明らかです。

 AWSへ接続されるリソースはDirect Connect Gatewayですが、アタッチメントとしてInterconnectのほかPrivate VIFやTransit VIFを追加、ゲートウェイとしてVGW、TGW、CloudWANを関連付けることが可能です。

 AWSとGoogle Cloudのリージョン対応状況は、以下の通りです。

AWS Google Cloud
米国東部(北バージニア) us-east-1 北バージニア(us-east4)
米国西部(北カリフォルニア) us-west-1 ロサンゼルス (us-west2)
米国西部(オレゴン) us-west-2 オレゴン (us-west1)
ヨーロッパ(ロンドン) eu-west-2 ロンドン(europe-west2)
Europe (フランクフルト) eu-central-1 フランクフルト (europe-west3)
➊運用性
 CloudWatchで帯域利用率のメトリクス、SyntheticMonitorで遅延とパケット損失率のメトリクスをモニタリングし、アラームで検知可能です。ただし、ネットワークヘルスインジケータは未対応で、ヘルス状態が確認できないためご注意下さい。
➋セキュリティ
 AWSとその他のクラウドの暗号化は、デフォルトでエッジデバイス間のMACsec暗号化が行われます。Direct Connectでは10G以上しか利用できませんが、Interconnectのプレビューでは1Gで利用できるようです。GAでも1Gで利用できるよう期待したいですね。
➌信頼性
 AWSとその他のクラウドの冗長化は、デフォルトでファシリティ・デバイスが二重化、ルートが四重化されます。Direct Connectでは最大限の回復性となる、重要な本番ワークロード向けのマルチサイト冗長デプロイ構成と同等です。
➍パフォーマンス
 帯域はプレビュー時に1Gですが、GA時に最大100Gまで拡張する予定です。その他の性能関連のパラメータとしては、受信可能なプレフィクスはIPv4・IPv6とも1000個、MTUサイズは8500byteとなります。
➎コスト
 プレビュー時は1Gが無料利用できます。GA時における時間あたりの料金や通信料あたりの料金は発表待ちとなります。

AWS Interconnect検証

 InterconnectでAWSとGoogle Cloud間を接続する検証を実施しました。AWS・Google Cloudの手順は以下を参照しております。

docs.aws.amazon.com docs.cloud.google.com
Interconnect作成 (AWS)

 Interconnect作成を参照したい場合、こちらをご覧下さい。
  1. AWSマネジメントコンソール上で、「Direct Connect」画面で「AWS Interconnect」メニューを選択し、「マルチクラウド相互接続を作成」を押下
  2. 「プロバイダーを選択」画面で以下の項目を入力し、「次へ」を押下
    • Providerは、「Google Cloud」を選択
  3. 「Select Regions」画面で以下の項目を入力し、「次へ」を押下
    • AWSリージョンは、「us-east-1」を選択
    • Google Cloudリージョンは、「us-east4」を選択
  4. 「オプションを選択」画面で以下の項目を入力し、「次へ」を押下
  5. 「レビューとリクエスト」画面で「Finish」を押下
  6. 「マルチクラウド相互接続が正常にリクエストされました」というメッセージを確認し、「アクティベーションキーをコピー」を押下

Transport・Peering作成 (Google Cloud)

 Transport・Peering作成を参照したい場合、こちらをご覧下さい。
  1. Google Cloudマネジメントコンソール上で、CloudShellを起動
    ※ NetworkConnectivityのAPIが有効化されていない場合、あらかじめ有効化しておくこと
    gcloud services enable networkconnectivity.googleapis.com
  2. トランスポート(AWS~Google Cloudの接続)を以下のパラメータで作成
    エラーコードが出力されていないことを確認
    ※ dataオプションのjsonフォーマットが誤っている場合、400コードがレスポンスされる
    ※ URLのプロジェクト名が誤っている場合、403コードがレスポンスされる
    • プロジェクト名は、「(作成済みのプロジェクト名)」を入力
    • トランスポートIDは、「(任意テキスト)」を入力
    • bansdwidthは、「BPS_1G」を入力
    • networkは、「(Google CloudのVPC名)」を入力
    • advertisedRoutesは、「(Google CloudのSubnetアドレス)」を入力
    • providedActivationKeyは、「(取得済みのアクティベーションキー)」を入力
    • stackTypeは、「IPV4_ONLY」を入力
      ※ 2025年12月30日時点で公式ドキュメントは、「"」が抜けていたため要注意
    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://networkconnectivity.googleapis.com/v1beta/projects/project-name/\
    locations/us-east4/transports?transportId=transport \
    --data '
    {
    "bandwidth": "BPS_1G",
    "network": "vpc",
    "advertisedRoutes": ["10.1.0.0/16"],
    "providedActivationKey": "xxxxxxxxxxxxxxx",
    "stackType": "IPV4_ONLY"
    }'
  3. トランスポートに紐付いたピアネットワークを以下のコマンドで確認
    ※ 状態は数分~数十分でCREATING→PENDINGCONFIGへ遷移し、
     Direct Connect Gateway~ゲートウェイ接続でPENDINGCONFIG→ACTIVEへ遷移する
    ※ 状態がPENDINGCONFIGもしくはACTIVEの場合のみ、
     ピアネットワークはpeeringNetworkとして出力されるため控えること
    gcloud beta network-connectivity transports describe transport --region=us-east4
  4. ピアリング(ピアネットワーク~ユーザが作ったVPCの接続)を以下のパラメータで作成
    ピアリング状態がACITIVEであることを確認
    ※ ピアネットワーク名が誤っている場合、ピアリング状態がINACTIVEとなる
     BGPセッションを確立するが、ルートを送信できるものの受信できない
    • トランスポートIDは、「(任意テキスト)」を入力
    • networkは、「(Google CloudのVPC名)」を入力
    • peer-networkは、「(ピアネットワーク名)」を入力
    • stackTypeは、「IPV4_ONLY」を入力
      ※ 2025年12月30日時点で公式ドキュメントは、「\」が抜けていたため要注意
    gcloud compute networks peerings create "transport" \
        --network="vpc" \
        --peer-network="xxxxxxxxxxxxxxx" \
        --stack-type="IPV4_ONLY" \
        --import-custom-routes \
        --export-custom-routes

接続確認

 接続確認を参照したい場合、こちらをご覧下さい。
  1. AWSマネジメントコンソール上で、「VPC」画面で「TGWルートテーブル」メニューを選択し、対象ルートテーブルを選択。AWSの持つ10.0.0.0/16だけでなく、Google Cloudの持つ10.1.0.0/16を学習していることを確認
  2. Google Cloudマネジメントコンソール上で、「VPCネットワーク」画面で「ルート」メニューを選択し、対象ネットワーク・リージョンを選択。Google Cloudの持つ10.1.0.0/16だけでなく、AWSの持つ10.0.0.0/16を学習していることを確認

Transport・Peering削除(Google Cloud)

 Transport・Peering削除を参照したい場合、こちらをご覧下さい。
  1. ピアリングを以下のパラメータで削除
    ピアリング数が0であることを確認
    • トランスポートIDは、「(任意テキスト)」を入力
    • networkは、「(Google CloudのVPC名)」を入力
    gcloud compute networks peerings delete transport \
      --network=vpc
    gcloud compute networks peerings list --network=vpc
    
  2. トランスポートを以下のパラメータで削除
    トランスポートリストが一つも表示されないことを確認
    • トランスポートIDは、「(任意テキスト)」を入力
    gcloud beta network-connectivity transports delete transport \
      --region=us-east4
    gcloud beta network-connectivity transports list --region=us-east4
    

Interconnect削除(AWS)

 Interconnect削除を参照したい場合、こちらをご覧下さい。
  1. Interconnectは、Transport・Peering削除時点で合わせて削除されるため対応不要

今後のマルチクラウド接続

 Interconnectはマネージドサービスにより構築・運用の負荷が軽減され、またオープンな仕様によりネットワーク相互運用性を高められることから、今後はクラウド・サービス間の直接接続はより一般的になってきます。

 一方で、接続のハードルが下がることにより、要件ごとにアドホック(行き当たりばったり)な接続を繰り返した結果、複雑な構成に陥るリスクも高まります。マルチクラウド環境ではただ単に接続できるだけでなく、全体構成を意識した設計が重要になります。

 そのため、AWSやGoogle Cloudなどに接続ポイントを集約し、無秩序なフルメッシュ構成を避けるための設計ポリシーを持つことがポイントです。こうした設計上のポイントを踏まえて、以下のような利用シーンが今後拡がっていくと考えられます。

DRやバックアップ
 単一クラウドにおける冗長化に加えて、クラウド障害や運用ミスなどの広域リスクに備える手段として、異なるクラウドを活用した DR/バックアップ構成の検討が進むと考えられます。
クラウド・サービスごとの役割分担
 AWSは運用基盤、Google Cloudはデータ分析基盤として活用するなど、クラウドの特徴や自社の環境を踏まえた役割分担により、より最適化された構成が選択できると考えられます。

まとめ

 本記事では、AWS Interconnectの概要および検証結果、さらにはマルチクラウド接続の構成パターンや今後についてご紹介しました。Interconnect導入をご検討される方がいらっしゃいましたら、本記事を参考にして頂けると幸いです。

AWS VPCネットワークにおける暗号化を再考する ― Nitro Systemと暗号化制御 ―

はじめに

 2025年11月21日にAWS VPCネットワークの暗号化制御が公表されました。「物理層やNitro Systemで暗号化されているのでは?」「新しい暗号化機能?」と思った方もいらっしゃるかもしれませんが、どのような機能でしょうか。

 本記事では、AWS VPCネットワークにおける暗号化ニーズ、暗号化サービス、暗号化制御、暗号化検証および結果の流れでご紹介します。セキュリティへの関心が高まる中、本機能導入をご検討される際などに是非ご覧下さい。

aws.amazon.com

暗号化ニーズ

 金融業界を初めとして、 これまで主に拠点間ネットワークに対する暗号化が求められてきました。一方、最近ではオンプレミス環境におけるLANネットワーク、クラウド環境におけるVPCネットワークに対して暗号化を求められるケースも見受けられています。

 背景としては、ゼロトラストの考え方が広まり、「閉域ネットワーク=安全」が成り立たないことがあります。例えば「NIST SP 800-53 / SC-8 TRANSMISSION CONFIDENTIALITY AND INTEGRITY(通信の機密性および完全性)」は改訂されていないものの、内部/外部ネットワークを問わずという考えのもとで、スコープや解釈が拡大しているケースなどが見られます。

 このような状況下においては、暗号化機能をクラウドマネージドサービスへオフロードすることが、運用負荷を抑える有効な手段になります。さらに、各サービスが有する機能を正しく理解しておくことで、効率的なサービス導入が可能になります。

暗号化サービス

 VPCネットワークにおける暗号化方法として、物理暗号化およびNitro Systemによる暗号化をご紹介します。クラウドマネージドサービスへオフロードする考え方に基づき、ユーザがデバイスやトンネルを構成するSite-to-Site VPNやClient VPNは対象外としています。

物理暗号化
 リージョン間やAZ間のバックボーンネットワークでは、物理層(レイヤ1)の暗号化が実施されています(同AZ内の暗号化は明記されていません)。トラフィックに対して透過的に行われるため、ユーザが設定/制御するものではありません。[1] [2]

[1] AWS Prescriptive Guidance - General Encryption Best Practices
"All data transmitted between AWS Regions over the AWS global network is automatically encrypted by AWS at the physical layer"
docs.aws.amazon.com

[2] Encrypting Data at Rest and In Transit - Logical Separation on AWS
"All network traffic between AWS data centers is transparently encrypted at the physical layer. "
docs.aws.amazon.com
Nitro Systemによる暗号化
 同リージョン内のNitro Systemが搭載されたインスタンス間では、ネットワーク層(レイヤ3)の暗号化が実施されています。こちらもトラフィックに対して透過的に行われるため、ユーザが設定/制御するものではありません。[3]

[3] Amazon Elastic Compute Cloud - Data protection in Amazon EC2
"To support this additional in-transit traffic encryption between instances, the following requirements must be met:
  • The instances use the following instance types:
    • General purpose: M5dn, M5n, M5zn, M6a, M6i, M6id, M6idn, M6in, M7a, M7g, M7gd, M7i, M7i-flex, M8a, M8g, M8gb, M8gd, M8gn, M8i, M8i-flex, Mac-m4, Mac-m4pro
    • Compute optimized: C5n, C6a, C6gn, C6i, C6id, C6in, C7a, C7g, C7gd, C7gn, C7i, C7i-flex, C8a, C8g, C8gb, C8gd, C8gn, C8i, C8i-flex
    • Memory optimized: R5dn, R5n, R6a, R6i, R6id, R6idn, R6in, R7a, R7g, R7gd, R7i, R7iz, R8a, R8g, R8gb, R8gd, R8gn, R8i, R8i-flex, U-3tb1, U-6tb1, U-9tb1, U-12tb1, U-18tb1, U-24tb1, U7i-6tb, U7i-8tb, U7i-12tb, U7in-16tb, U7in-24tb, U7in-32tb, U7inh-32tb, X2idn, X2iedn, X2iezn, X8g, X8aedz
    • Storage optimized: D3, D3en, I3en, I4g, I4i, I7i, I7ie, I8g, I8ge, Im4gn, Is4gen
    • Accelerated computing: DL1, DL2q, F2, G4ad, G4dn, G5, G6, G6e, G6f, Gr6, Gr6f, Inf1, Inf2, P3dn, P4d, P4de, P5, P5e, P5en, P6-B200, P6-B300, P6e-GB200, Trn1, Trn1n, Trn2, Trn2u, VT1
    • High-performance computing: Hpc6a, Hpc6id, Hpc7a, Hpc7g
  • The instances are in the same Region.
  • The instances are in the same VPC or peered VPCs, and the traffic does not pass through a virtual network device or service, such as a load balancer or a transit gateway."
docs.aws.amazon.com

 Nitro Systemによる暗号化は、様々な条件に基づき実施されています。トラフィックの暗号化状態を可視化し、暗号化されたトラフィックのみ流れる状態を実現するうえで、今回リリースしたAWS VPCネットワークの暗号化制御が有効です。

暗号化制御

 VPCネットワークの暗号化制御は、MonitorモードとEnforceモードが選択できます。MonitorモードはVPCフローログで暗号化状態を確認できるようにします。EnforceモードはNitro Systemによる暗号化をサポートしてないリソースの作成やアタッチを禁止します。

docs.aws.amazon.com


 以上の内容を踏まえ、暗号化制御のEnforceモードは以下のような理解が適切かと思います。

  • 「トラフィックを直接暗号化する機能ではない」
  • 「Nitro Systemにより暗号化されていないトラフィックが成立しないように制御する」
  • 「結果として、暗号化されたトラフィックのみ流れる状態を実現する」
暗号化制御を作成したい場合、以下の手順をご参照下さい。
  • 新規VPCで作成する場合、「VPCを作成」画面で以下を入力し、「VPCを作成」を押下
    • 暗号化モードは、「なし」「モニタリングモード」「強制モード」から一つだけ選択
    • 除外リソースは、「IGW」「Egress-only IGW」「NATGW」「VGW」「Lambda」「VPC Peering」「VPC Lattice」「EFS」から一つ以上選択
  • 既存VPCで作成する場合、「お使いのVPC」画面で「VPC暗号化コントロール」を選択し、「暗号化コントールを作成」を押下
  • 「暗号化コントロールを作成」画面で以下を入力し、「暗号化コントロールを作成」を押下
    • 名前は、任意のリソース名称を入力
    • VPCは、暗号化制御を作成したいVPCを選択
    • モードは、「モニタリングモード」「強制モード」から一つだけ選択
  • 暗号化制御を作成したら、「VPC暗号化コントロール」画面で状態が「使用可能」であることを確認

暗号化検証および結果

 今までご紹介した機能を確認するために、暗号化状態の可視化、暗号化をサポートしてないリソースの作成失敗について検証を実施しました。

暗号化状態の可視化
 暗号化制御がMonitorモードで動作する中、暗号化されていない通信と暗号化された通信を流し、VPCフローログで可視化できることを検証しました。
  1. Nitro対応~Nitro非対応インスタンス間でicmp送信
  2. Nitro対応インスタンス間でicmp送信
 VPCフローログの1枚目がNitro対応~Nitro非対応インスタンス間で暗号化されておらず、2枚目がNitro対応インスタンス間で暗号化されていることを確認しました。
 9番目のフィールドが「encryption-status」であり、「0」は暗号化されておらず、「1」は暗号化されていることを意味します。


暗号化をサポートしてないリソースの作成失敗
 暗号化制御がEnforceモードで動作する中、Nitro非対応インスタンスを作成しようとしたら、失敗することを検証しました。
  1. Nitro非対応インスタンスを作成
 「インスタンスを起動」画面でエラーメッセージが表示され、インスタンスが作成されないことを確認しました。


まとめ

 本記事では、AWS VPCネットワークにおける暗号化ニーズ、暗号化サービス、暗号化制御、暗号化検証および結果の流れでご紹介しました。
 今後、VPCネットワークにおける暗号化制御を利用される方がいらっしゃいましたら、本記事を参考にして頂けると幸いです。

Amazon Q CLIでシューティングゲームを作ってみた

はじめに / Introduction

 Amazon Q Developer CLIを用いてゲームを作成したら、Tシャツを貰えるイベントがあったのでチャレンジしてみました。本記事では、Amazon Q Developer CLIでゲームの計画から実装までご説明し、簡単に誰でも作れることをご紹介します。

 ※ ゲームと言っても簡単なミニゲームレベルですのでご注意下さい。

community.aws

ゲームアイデアの発想 / Game Concept

 一番初めに思い付いたのは、自機がオンプレミスサーバーから飛び立って、敵を倒しながら、ハイブリッドネットワークやゲートウェイを超えて、エンドポイントを目指す誰得な横スクロール型のシューティングゲームでした。

 ネットワークの変人玄人な皆様がよく言われる「パケットの気持ちになって...」を具現化したゲームですね。ただ、自身がAIもコーディングもポンコツのため、今回はシンプルな横スクロール型のシューティングゲーム作成を目標にしました。

開発環境の準備 / Environment Setup

 自分の環境はWindowsでしたので、下記のサイトを参考にしつつ、Amazon Q Developerのほか、WSLやPythonなどのソフトウェアをインストールしました。環境の違いによって必要な準備も異なるため、参考程度に留めて下さい。

community.aws
  1. WSL(Ubuntu)をインストールし、再起動
    wsl --install
  2. WSL上でunzip、pip、venvをインストール
    sudo apt update
    sudo apt install -y unzip curl python3-pip python3-venv
  3. WSL上でAmazon Q Developerをインストール ※ついでに認証やログインも実施される
    curl -# -o q.zip "https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip"
    unzip -o q.zip
    chmod +x q/install.sh
    ./q/install.sh
    echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
    source ~/.bashrc
  4. Windows上でpygameをインストール
    pip install pygame
  5. WSL上でq chat実行
    q chat

開発の流れ / Development Flow

 基本的には、チャットに要件を入力し、Amazon Q CLIが実装し、Pythonでテストする、という流れの繰り返しです。以下はチャットに要件を入力している画面ですが、環境の違いによって実際の画面と異なる可能性もありますのでご留意下さい。

ザコステージの実装 / Enemy Stage

 横スクロール型のシューティングゲームの簡単な仕様を入力しただけで、以下のような遊べるものができました。雑な要件だけで形を成すところがスゴすぎる...  

 ザコは、移動も弾も直進する三角形と、移動はジグザグで弾は全方向発射する六角形へ変更。三角形は編隊組ませたが、縦1列と横1列の認識齟齬があり、2~3ターンのやりとり消費汗。  

ボスステージの実装 / Boss Stage

 ボスは、ザコを何体かやっつけると出現し、弾を何体か当てると撃破。ただ見た目はデフォルトだと単なる四角形で威厳も無く...  

 マザーシップっぽい造形、ビットからの弾幕、定期的な回転式のレーザービーム。弾の速度や角度、インターバルなどの細かい注文へお付き合い頂きました笑  

画面構成 / Screens

 いきなりゲームが開始したり終了したりとゲームらしくなかったので、タイトル画面、ゲームオーバー画面やゲームクリア画面などを差し込んでもらいました。  

 文字とボタンで味気なかったため、SFっぽいカッコよくしてほしいとお願いしたら、Galactic Warというサブタイトルまで勝手に付けてくれました。  

 我ながらバランス良いかも?ただ自分はシューティングゲームが下手なので、無敵モードをすぐさま実装しましたが、、、汗

所感とまとめ / Reflection and Takeaways

 Amazon Q CLIは、「ノーコードでゲームが出来上がる」体験が衝撃的でした。今後もユースケースや最新動向はぜひウォッチしていきたいと思いました。

  • 開発者でなくプレイヤーとして好き勝手言うだけでゲームが出来上がる。
  • 要件理解やソースコード変更で時々間違えるが、自発的にテストしたり修正したりとかなり賢い。
  • コードを書くことより仕様を考えることに集中したい場合に強力なツールになる。

GitHubリポジトリ / GitHub Repository

 Amazon Q CLIで作成したシューティングゲームのソースコードおよびREADMEは、GitHubへアップロードしてます。ご興味を持たれた方はそちらを是非ご確認下さい。

github.com

AWS VPC Route Server vs TGW Connect Attachment 非機能観点で比べてみた

はじめに

 2025/04/01にVPC Route ServerがGAされ、仮想アプライアンスのHA構成として新しい選択肢が増えました。類似サービスのTGW Connect Attachmentと比べ、どのような違いがあるのでしょうか。

 本記事では、VPC Route ServerとTGW Connect Attachmentの非機能観点で比べてみた結果をご紹介します。他もこんな違いがあるよというのがあれば教えていただけると幸いです。

aws.amazon.com

仮想アプライアンスの課題

 本記事でご紹介する仮想アプライアンスは、VPC上でEC2インスタンスとしてデプロイし、オンプレミス向けのトラフィックをインスペクションするような構成を前提にしています。具体的には、SD-WANアプライアンスなどをイメージしていただければと思います。

 VPC上でEC2インスタンスとしてデプロイした仮想アプライアンスは、ユーザ側で冗長化のうえフェイルオーバーの仕組みを実装する必要があります。この仕組みを実装する方式として、冒頭に述べたVPC Route ServerやTGW Connect Attachmentを用いた方式があります。


 ちなみに、仮想アプライアンスのHA方式は、以下の記事で取り上げていますので是非ご覧下さい。

yamamototis1105.hatenablog.com

VPC Route Server/TGW Connect Attacmentとは

 VPC Route Serverは、仮想アプライアンスとBGPセッションを確立のうえルーティング情報を学習し、VPCルートテーブルへアドバタイズします。万が一、仮想アプライアンスの主系が故障した場合、副系からのルーティング情報に更新されてフェイルオーバーします。また、仮想アプライアンスの主系が復旧した場合、主系からのルーティング情報に更新されてフェイルバックします。


 TGW Connect Attachmentは、仮想アプライアンスとGREトンネル上でBGPセッションを確立のうえルーティング情報を相互に学習し、アドバタイズします。VPC Route Serverは、 トラフィックがGREカプセル化されずに流れますが、TGW Connect Attachmentは、トラフィックがGREカプセル化されたうえで流れる点が異なります。


 このような両サービスですが、次以降のセクションで非機能性の観点毎の違いをご紹介します。

パフォーマンス

 VPC Route Serverはスループット上限がありませんが、ルート上限が100で制限されています。一方で、TGW Connect Attachmentはスループット上限が5Gbpsで制限されていますが、ルート上限は1000まで利用可能です。ボトルネックになる可能性がありそうなクォータをピックアップしましたが、その他のクォータは以下のドキュメントをご参照下さい。

docs.aws.amazon.com
docs.aws.amazon.com

 TGW Connect AttachmentはトラフィックがGREカプセル化され、アドレスやポートが固定化されるため、Security Groupの接続追跡数が上限値に達する可能性はありません。一方で、VPC Route ServerはトラフィックがGREカプセル化されず、アドレスやポートは業務次第となるため、Security Groupの接続追跡数が上限値に達する可能性があります。Security Groupの接続追跡は、以下の記事をご参照下さい。

yamamototis1105.hatenablog.com

信頼性

 TGW Connect Attachment、VPC Route Serverは、BGPセッションのエンドポイントやピアが冗長化されている点が共通していますが、BFD対応の差でTGW Connect AttachmentよりVPC Route Serverの方がフェイルオーバー時間を短縮可能です。

 TGW Connect Attachmentは運用実績に基づき、メンテナンス影響は瞬断レベルで抑えられることが確認できています。一方で、VPC Route Serverはリリースから間も無く運用実績も少ないため、具体的な影響が確認できていません。TGW Connect Attachmentのメンテナンス影響は、以下の記事をご参照下さい。

yamamototis1105.hatenablog.com

セキュリティ

 TGW Connect Attachmentは、トラフィックがGREカプセル化されているため、Security GroupやNACLを用いてもアドレスやポートでアクセス制御ができません。一方で、VPC Route Serverは、トラフィックがGREカプセル化されていないため、Security GroupやNACLを用いればアドレスやポートでアクセス制御可能です。

 

運用性

 TGW Connect Attachmentは、BGPセクションのエンドポイントやピアのほか、GREトンネルのパラメータなどの管理が必要となり負荷が高くなります。一方で、VPC Route Serverは、BGPセクションのエンドポイントやピアのみの管理で済むため負荷が抑えられます。

 TGW Connect Attachmentは、Network Managerに登録しておくことでBGPイベントログを確認できます。一方で、VPC Route Serverは、メインルートだけでなくバックアップルートもBGPメトリックを確認できるなど、それぞれに優位性を持っています。

 TGW Connect AttachmentはGREカプセル化されているため、トラブルシューティング等の際に仮想アプライアンスがデプロイされたVPC上でVPCフローログを取得しても分析できず、TGW上で取得・分析する必要があります。

 VPC Route ServerはSNS統合されており、Cloud Watchアラームを利用せずにメッセージを連携するなども可能です。例えば、エンドポイントがメンテナンス状態となった場合、運用担当者にメールを送信するなども可能です。

コスト

 TGW Connect Attachmentは、Attachmentごとの接続料金およびデータ処理料金がかかりますが、VPC Route Serverは、Endpointごとの接続料金がかかります。VPC Route Serverは高レートのため、ご利用の際はその他要件とのトレードオフを考慮のうえご利用下さい。

aws.amazon.com
aws.amazon.com

まとめ

 本記事では、AWS VPC Route ServerとTGW Connect Attachmentの非機能観点で比べてみた結果をご紹介しました。新規サービスのVPC Route Serverの優位性が確認できたものの、コストが厳しいため現状はTGW Connect Attachmentが選択されるケースが多いのではないかという印象を受けました。

VPC Route Server TGW Connect Attachment
パフォーマンス
  • スループットのクォータは「制限なし」
  • ルート数のクォータは「100」
  • Security Groupの接続追跡は「確認必要」
など
  • スループットのクォータは「5Gbps」
  • ルート数のクォータは「1000」
  • Security Groupの接続追跡は「確認不要」
など
信頼性
  • エンドポイントは「冗長化」
  • ピアは「冗長化」
  • BFDは「対応」
  • メンテナンス影響は「不明」
など
  • エンドポイントは「冗長化」
  • ピアは「冗長化」
  • BFDは「非対応」
  • メンテナンス影響は「原則なし」
など
セキュリティ
  • Security Groupは「制御可」
  • NACLは「制御可」
など
  • Security Groupは「制御不可」
  • NACLは「制御不可」
など
運用性
  • 運用負荷は「シンプルな設計で小さい」
  • BGPメトリックは「確認可」
  • SNSメッセージは「通知可」
など
  • 運用負荷は「複雑な設計で大きい」
  • BGPイベントログは「確認可」
  • VPCフローログは「分析不可」
    ※仮想アプラアンスのENIにて
など
コスト
  • 接続料は「エンドポイントあたり1.03USD/h」※東京リージョン
など
  • 接続料は「アタッチメントあたり0.07USD/h」※東京リージョン
  • データ処理料は「0.02USD/GB」
など

AWS Cloud WANのService Insertion機能によるグローバルネットワークでのVPCインスペクション

はじめに

 Cloud WANは、グローバルネットワーク上のVPCやオンプレミス間を相互接続するためのマネージドサービスです。Service Insertion機能は、Cloud WAN上のトラフィックに対し、セキュリティサービスやロギングサービスを強制するうえで便利な機能です。

 本記事では、Service Insertion機能を用いた構成パターンおよび実装の流れについてご紹介します。セキュリティサービスやロギングサービスに関する情報は含みませんのでご注意下さい。それらのサービスを確認したい場合には、別の解説サイトをご参照頂けますと幸いです。

Service Insertionとは?

 Cloud WANに接続されたVPCやオンプレミス間でトラフィックが流れる際、セキュリティサービスやロギングサービスがデプロイされたVPCを経由するルートが自動生成されます。
 Service Insertionに関係するリソースやパラメータの説明を以下に示します。Cloud WANに関係する全てのリソースやパラメータを網羅しているわけではないためご了承下さい。

用語説明
➊ワークロードVPC業務アプリケーションやサービスが動作し、トラフィックを送受信するVPC。
➋インスペクションVPCセキュリティやロギングのサービスが動作し、トラフィックを中継するVPC。
➌セグメント相互通信可能なルーティングドメインで、ワークロードVPCがアタッチされる。
➍Network Function Groupネットワーク機能を有するグループで、インスペクションVPCがアタッチされる。
➎ルートテーブルセグメントおよびNetwork Function Groupがリージョン単位で持つルート情報。
➏アタッチメント
Cloud WANと接続するためのリソース。VPC、Site-to-Site VPN、Direct Connect、仮想アプライアンスなどが接続可。

 具体例として、Cloud WANを用いて東京リージョンとバージニア北部リージョンのEC2インスタンスa/b間で通信し、Network Firewallを経由する構成と通信の流れを以下に示しています。
 インスペクションVPC構成はルーティングが複雑化しがちのため、Service Insertionによってルートが自動生成され、管理の手間が抑えられるのは大変助かります。

➊EC2インスタンスaから送信し、セグメントAの東京リージョンへ
➋NFWエンドポイントがあるVPCアタッチメントへ
➌Network Function Groupの東京リージョンへ
➍Network Function Groupのバージニア北部リージョンへ
➎EC2インスタンスbがあるVPCエンドポイントへ、EC2インスタンスbで受信
➏EC2インスタンスbから発信し、セグメントAのバージニア北部リージョンへ
➐NFWエンドポイントがあるVPCアタッチメントへ
➑Network Function Groupの東京リージョンへ
➒EC2インスタンスaがあるVPCエンドポイントへ、EC2インスタンスaで受信

構成パターン

 Service Insertion構成は、「send to」「send via (single hop)」「send via (dual hop)」の3パターンがあります。各パターンのVPCやセグメントの数に応じたフローやユースケースを以下に示します。
 すべてのパターンにおいて、アタッチメント分離は有効化しています。理由は、Service Insertionの仕様により送信元と送信先(共有先)が同一の場合はアタッチメント分離が必須のためです。

1.「send via (single hop)」パターン
 インスペクションVPC×1個を経由するルートを自動的に作成します。例えば、セキュリティサービスやロギングサービスなどを一元管理したいケースなどで有効です。
  • 送信元および送信先のワークロードVPCと同じリージョンか、さらにリージョンの優先順 [1] に従い、インスペクションVPCが選択されます。
  • 上記の仕様に従い、行きと帰りで同じインスペクションVPCを経由するため、ステートフルインスペクションなどでトラフィックが破棄されることはありません。
(1)ワークロードVPC×2個、インスペクションVPC×1個、セグメント×1個 パターン
(2)ワークロードVPC×2個、インスペクションVPC×1個、セグメント×2個 パターン
(3)ワークロードVPC×2個、インスペクションVPC×2個、セグメント×1個 パターン
(4)ワークロードVPC×2個、インスペクションVPC×2個、セグメント×2個 パターン
[1] インスペクションVPC選択時におけるリージョンの優先順
docs.aws.amazon.com
2.「send via (dual hop)」パターン
 インスペクションVPC×2個を経由するルートを自動的に作成します。例えば、セキュリティサービスやロギングサービスなどをリージョン毎に管理したいケースなどで有効です。
  • インスペクションVPC×2個を経由するため、インスペクションVPC×1個のパターンがありません。インスペクションVPC選択時における考え方はsingle hopと同じです。
  • 上記の仕様に従い、行きと帰りで同じインスペクションVPCを経由するため、ステートフルインスペクションなどでトラフィックが破棄されることはありません。
(1)ワークロードVPC×2個、インスペクションVPC×2個、セグメント×1個 パターン
(2)ワークロードVPC×2個、インスペクションVPC×2個、セグメント×2個 パターン
3.「send to」パターン
 インスペクションVPC向けのデフォルトルートを自動的に作成します。例えば、インターネットトラフィックをIGWのあるVPCに集約したいケースなどで有効です。
  • インスペクションVPC×1個を経由し、インターネットへアクセスするため、ワークロードVPC×1個、インスペクションVPC×1個のパターンしかありません。
  • 複数のインスペクションVPCを作成し、セグメントに応じてインスペクションVPCつまりインターネット出入口を分割することも可能です。
(1)ワークロードVPC×1個、インスペクションVPC×1個、セグメント×1個 パターン

 ちなみに、TGWを用いたVPCインスペクション構成は以下の記事で解説してますので、もしご興味ございましたら是非ご参照下さい。

yamamototis1105.hatenablog.com

実装の流れ

 前述の 1~3.「send to」「send via (single hop)」「send via (dual hop)」パターン、それぞれの(1)について実装の流れをご紹介します。ワークロードVPC、インスペクションVPCは割愛します。
 あくまで設定は一例であり、必要最低限しか設定されていないため、実際の要件や設計に応じて設定を追加したり変更したりするようにしてください。

Global Network 作成
  1. 「グローバルネットワーク」画面にて、「グローバルネットワークを作成」を押下。
  2. 「グローバルネットワークを作成」画面にて、以下の情報を入力し、「次へ」を押下。
    • 「Name」は「gnw1」。
Core Network 作成
  1. 「コアネットワークを作成」画面にて、以下の情報を入力し、「次へ」を押下。
    • 「Name」は「cnw1」。
    • 「ASNの範囲」は「65001-65099」。
    • 「エッジロケーション」は「バージニア北部リージョン」と「東京リージョン」。
    • 「セグメント名」は「prd」。
  2. 「レビュー」画面にて、「グローバルネットワークを作成」を押下。
    「ポリシーのバージョン」画面にて、「Policy version - 1」の「変更セットの状態」が「Excution succeeded」に変わるまで待っておく。
Policy 作成
 Core Networkを作ったときのベースとなるPolicyは、詳細なパラメータを設定できなかったため、こちらで改めて詳細なパラメータを設定します。
  1. 「ポリシーのバージョン」画面にて、「Policy version - 1」をチェックし、「編集」を押下。
  2. 「ポリシーの作成」の「セグメント」画面にて、「prd」をチェックし、「編集」を押下。
    「セグメントの編集」画面にて、以下の情報を変更し、「編集」を押下。
    • 「承認を必須にする」は無効化する。
    • 「分離されたアタッチメント」は有効化する。
  3. 「ポリシーの作成」の「Network function groups」画面にて、「作成」を押下。
    「Create network function group」画面にて、以下の情報を入力し、「Create」を押下。
    • 「Name」は「sec」。
  4. 「ポリシーの作成」の「セグメントアクション・オプション」画面にて、「作成」を押下。
    「Create service insertion」画面にて、以下の情報を入力し、「Create」を押下。
     「send via (single hop)」パターンの場合
    • 「Action」は「send via」。
    • 「Mode」は「Single hop」。
    • 「Segment from」は「prd」。
    • 「共有」は「すべて」。
    • 「Send traffic via」は「sec」。
     「send via (dual hop)」パターンの場合
    • 「Action」は「send via」。
    • 「Mode」は「Dual hop」。
    • 「Segment from」は「prd」。
    • 「共有」は「すべて」。
    • 「Send traffic via」は「sec」。
     「send to」パターンの場合
    • 「Action」は「send to」。
    • 「Segment from」は「prd」。
    • 「Send traffic via」は「sec」。
  5. 「ポリシーの作成」の「アタッチメントポリシー」画面にて、「作成」を押下。
    「アタッチメントポリシー」画面にて、以下の情報を入力し、「作成」を押下。
    • 「ルール番号」は「1」。
    • 「アクション」は「セグメント名」。
    • 「セグメントにアタッチする」は「prd」。
    • 「条件」の「タイプ」は「Tag value」。
    • 「条件」の「オペレーター」は「Equals」。
    • 「条件」の「条件値」は「env」と「prd」。
    続けて、上記の要領で以下の情報を入力し、「作成」を押下。
    • 「ルール番号」は「99」。
    • 「アクション」は「Network function group」。
    • 「セグメントにアタッチする」は「sec」。
    • 「条件」の「タイプ」は「Tag value」。
    • 「条件」の「オペレーター」は「Equals」。
    • 「条件」の「条件値」は「env」と「sec」。
  6. 「ポリシーの作成」画面にて、「ポリシーの作成」を押下。
    「ポリシーのバージョン」画面にて、「Policy version - 2」の「変更セットの状態」が
    「Ready to execute」に変わるまで待っておく。
  7. 「ポリシーのバージョン」画面にて、「Policy version - 2」をチェックし、
    「変更セットの表示または適用」を押下。
  8. 「Policy version -2 変更セット」画面にて、「変更セットの適用」を押下。
    「ポリシーのバージョン」画面にて、「Policy version - 2」の「変更セットの状態」が
    「Excution succeeded」に変わるまで待っておく。
Attachment 作成

 Policyさえ定義できていれば、Attachmentはタグ設定のみで、セグメント、AS番号、アドレスなどが自動設定されます。この点こそCloud WANを用いる最大の強みだと思います。

  1. 「アタッチメント」画面にて、「アタッチメントの作成」を押下。
  2. 「アタッチメントの作成」画面にて、以下の情報を入力し、「作成」を押下。
    • 「アタッチメントタイプ」は「VPC」。
    • 「エッジロケーション」は「東京リージョン」。
    • 「VPC ID」は「(ワークロードVPCのVPC ID)」。
    • 「Subnet ID」は「(ワークロードVPCのSubnet ID)」。
    • 「キー」は「env」。
    • 「値」は「prd」。
    続けて、上記の要領で以下の情報を入力し、「作成」を押下。
    • 「アタッチメントタイプ」は「VPC」。
    • 「エッジロケーション」は「バージニア北部リージョン」。
    • 「VPC ID」は「(ワークロードVPCのVPC ID)」。
    • 「Subnet ID」は「(ワークロードVPCのSubnet ID)」。
    • 「キー」は「env」。
    • 「値」は「prd」。
    続けて、上記の要領で以下の情報を入力し、「作成」を押下。
    • 「アタッチメントタイプ」は「VPC」。
    • 「エッジロケーション」は「東京リージョン」。
    • 「VPC ID」は「(インスペクションVPCのVPC ID)」。
    • 「Subnet ID」は「(インスペクションVPCのSubnet ID)」。
    • 「キー」は「env」。
    • 「値」は「sec」。
    続けて、上記の要領で以下の情報を入力し、「作成」を押下。
    • 「アタッチメントタイプ」は「VPC」。
    • 「エッジロケーション」は「バージニア北部リージョン」。
    • 「VPC ID」は「(インスペクションVPCのVPC ID)」。
    • 「Subnet ID」は「(インスペクションVPCのSubnet ID)」。
    • 「キー」は「env」。
    • 「値」は「sec」。
    一番下のアタッチメントは二つ目のインスペクションVPCにあたるため、「send via (dual hop)」パターンのみ必要で、「send via (single hop)」「send to」パターンでは不要。
  3. 「アタッチメント」画面にて、「変更セットの適用」を押下。
    「アタッチメント」画面にて、「状態」が「Available」に変わるまで待っておく。
Core Network 確認

 エンドポイントでの疎通確認、VPCでのルートテーブルやフローログの確認のほか、Cloud WANでのリージョンやセグメント・Network function groupごとのルートテーブルの確認が有効です。

  1. 「コアネットワーク」の「ルート」画面にて、セグメントかNetwork function group、リージョンを選択し、「ルートの検索」を押下。

 これにて実装完了です。

まとめ

 本記事では、 Cloud WANのService Insertionについてご紹介しました。

  • VPCインスペクション構成はルーティングが複雑化しがちだが、Service Insertionによってルートが自動生成されるため管理の手間を抑えられる。
  • Service Insertionは「send via (single hop」「send via (dual hop)」「send to」の構成パターンがあり、パターンごとにトラフィックフローやユースケースが異なる。
 Cloud WANでセキュリティサービスやロギングサービスをインスペクションされる方がいれば、是非ご参考にしていただけると幸いです。

AWS TGW Connect Attachment メンテナンス時における通信影響

はじめに

 TGW~仮想アプライアンスはConnect Attachmentで接続できますが、メンテナンスによる通信影響が気になったことはないでしょうか?パケットロスや遅延というキーワードでビクっとなる自分は気になってました汗

 本記事では、Connect Attachmentメンテナンス時におけるBGP動作と通信断時間を検証しましたのでご紹介します。故障時と違ってメンテナンス時におけるフェイルオーバー動作は意外と知られてない(?)かと思いますので、ご興味ある方は是非ご覧ください。

 思いのほか前置きが長くなったため、結論のみ確認したい方は「まとめ」のみお読み下さい汗

メンテナンス

 TGWは、VPC Attachment / Peering Attachment / VPN Attachment / DXGW Attachment / Connect Attachmentがあります。それぞれのAttachment Typeにおけるメンテナンス事情を見ていきます。

VPC Attachment
 TGWとVPCを接続するAttachmentですが、VPC同士やオンプレミスと接続したいなどのケースで利用します。本構成でメンテナンスによる通信断が生じた話は聞いたことがありません。
Peering Attachment
 TGW同士を接続するAttachmentですが、リージョンを超えてVPC同士で接続したいなどのケースで利用します。本構成もメンテナンスによる通信断が生じた話は聞いたことがありません。
DXGW Attachment
 TGWとDirect Connect接続するAttachmentですが、オンプレミス接続したいなどのケースで利用します。メンテナンスは1接続あたり年数回行われる可能性がありますが、ロケーション毎に別日に行われ、接続をロケーション分散していれば同時にメンテナンス借用されることはありません。
 通信断時間はBGPピアの設定次第となりますが、例えば、BGPキープアライブ/ホールドタイマが10秒/30秒の場合は20~30秒、BFD有効かつインターバル/乗数が300ミリ秒/3の場合は約1秒という感じです。詳細な説明については、Direct ConnectのBlack Belt Online Seminorをご参照下さい。
aws.amazon.com
VPN Attachment
 TGWとVPN接続するAttachmentですが、オンプレミスと接続したいなどのケースで利用します。VPNトンネルを2つ、その中でBGPセッションを1つずつ作成しますが、メンテナンスにより一方のBGPセッションが切断/復旧し、別時間にもう一方のBGPセッションが切断/復旧します。
 一方のBGPセッションが切断/復旧する際は、もう一方のBGPセッションへあらかじめMEDチューニングのうえスイッチオーバーし、通信断が発生しない仕組みとなっています。初めて知ったときは頭良い子過ぎて感動しました。詳細な説明については、下記の記事で触れていますのでご覧下さい。
yamamototis1105.hatenablog.com
Connect Attachment
 TGWと仮想アプライアンス製品を接続するAttachmentですが、SD-WAN接続したいなどのケースで利用します。GREトンネルを1つ、その中でBGPセッションを2つ作成しますが、メンテナンスにより一方のBGPセッションが切断/復旧し、別時間にもう一方のBGPセッションが切断/復旧します。
 前置きが大変長かったですが、Connect Attachmentのメンテナンスについては、「どのようなBGP動作なのか」「どのくらい通信断時間が生じるか」あたり理解できておらず検証してみよう!という流れで本記事テーマへ繋がってます。

検証構成

 VPC上に仮想アプライアンス製品としてCatalyst8000vを作成し、TGWとConnect Attachmentで接続します。その他、通信断有無に気付くためにSynthetic Monitorを作成し、Cloud Watch Alarmでパケットロスや遅延を検知した場合にSNSでメール通知するようにします。

VPC Attachment 作成
 TGWとVPCを接続するVPC Attachmentを作成します。GREトンネルのエンドポイントとなるTGWのCIDRブロックさえルーティングできればよいため、アソシエート(関連付け)は作成しますが、プロパゲート(伝播)は作成する必要がありません。
Connect Attachment 作成
 VPC AttachmentをTransport Attachment(トンネルアドレス交換目的)として、Connect Attachmentを作成します。さらに、TGWとCatalyst8000vのGREトンネル/BGPセッションに関わるパラメータを設定したConnect Peerを作成します。
Catalyst8000v 作成
 GREトンネル/BGPセッションに関わるコンフィグを投入します。ポイントとしてはルーティングテーブルが更新されたときに、ルーティングテーブルが記録されるようにLINE VTY、NTP、EEMを設定してます。
interface Tunnel1
 ip address 169.254.6.1 255.255.255.248
 tunnel source GigabitEthernet1
 tunnel destination 192.168.0.1
!
interface GigabitEthernet1
 ip address 10.0.0.254 255.255.255.0
!
router bgp 64513
 bgp log-neighbor-changes
 network 10.0.0.0 mask 255.255.255.0
 neighbor 169.254.6.2 remote-as 64512
 neighbor 169.254.6.2 ebgp-multihop 255
 neighbor 169.254.6.2 soft-reconfiguration inbound
 neighbor 169.254.6.3 remote-as 64512
 neighbor 169.254.6.3 ebgp-multihop 255
 neighbor 169.254.6.3 soft-reconfiguration inbound
!
line vty 0 4
 exec prompt timestamp
!
ntp server 169.254.169.123
!
event manager applet RoutingMonitor
 event routing network 0.0.0.0/0 le 32
 action 1.0 syslog msg "### RoutingMonitor ###"
 action 2.0 cli command "enable"
 action 3.0 cli command "show ip route | append flash:/show-ip-route.txt"
 action 4.0 cli command "end"
!

検証結果

 あとは、ひたすらメンテナンスが来るのを待つだけ・・・ですが、残念ながらアラームは発動せず、手動確認で気付きました。Catalyst8000vおよびSynthetic Monitorの各種情報を確認していきます。

Catalyst8000vログ
 6時台にBGPピア#1(169.254.6.2)、9時台にBGPピア#2(169.254.6.3)より設定が削除されたメッセージを受信し、BGPセッションがDown/Upしています。さらに、9時台のタイミングでEEMのメッセージが出力されているため、ルーティングテーブルが更新されたことが分かります。
show logging
(省略)
Feb  5 2025 06:02:46.255 JST: %BGP-3-NOTIFICATION: received from neighbor 169.254.6.2 6/3 (Peer De-configured) 0 bytes 
Feb  5 2025 06:02:46.255 JST: %BGP-5-NBR_RESET: Neighbor 169.254.6.2 reset (BGP Notification received)
Feb  5 2025 06:02:46.255 JST: %BGP-5-ADJCHANGE: neighbor 169.254.6.2 Down BGP Notification received
Feb  5 2025 06:02:46.255 JST: %BGP_SESSION-5-ADJCHANGE: neighbor 169.254.6.2 IPv4 Unicast topology base removed from session  BGP Notification received
Feb  5 2025 06:04:18.541 JST: %BGP-5-ADJCHANGE: neighbor 169.254.6.2 Up 
Feb  5 2025 09:53:46.516 JST: %BGP-3-NOTIFICATION: received from neighbor 169.254.6.3 6/3 (Peer De-configured) 0 bytes 
Feb  5 2025 09:53:46.516 JST: %BGP-5-NBR_RESET: Neighbor 169.254.6.3 reset (BGP Notification received)
Feb  5 2025 09:53:46.516 JST: %BGP-5-ADJCHANGE: neighbor 169.254.6.3 Down BGP Notification received
Feb  5 2025 09:53:46.517 JST: %BGP_SESSION-5-ADJCHANGE: neighbor 169.254.6.3 IPv4 Unicast topology base removed from session  BGP Notification received
Feb  5 2025 09:53:46.522 JST: %HA_EM-6-LOG: RoutingMonitor: ### RoutingMonitor ###
Feb  5 2025 09:55:41.072 JST: %BGP-5-ADJCHANGE: neighbor 169.254.6.3 Up
Catalyst8000vルーティングテーブル (ファイル出力)
 Connect Attachment経由で広告されているルート(10.0.1.0/24)について、Catalyst8000v作成時はBGPピア#2(169.254.6.3)がターゲットだったのが、9時台にBGPピア#1(169.254.6.2)がターゲットに変更されていることが分かります。
more bootflash:/show-ip-route.txt
Load for five secs: 0%/0%; one minute: 1%; five minutes: 1%
Time source is NTP, *01:45:10.374 JST Wed Jan 22 2025
(省略)
Gateway of last resort is 10.0.0.1 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 10.0.0.1, GigabitEthernet1
      10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks
C        10.0.0.0/24 is directly connected, GigabitEthernet1
L        10.0.0.254/32 is directly connected, GigabitEthernet1
B        10.0.1.0/24 [20/100] via 169.254.6.3, 00:00:00
      169.254.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        169.254.6.0/29 is directly connected, Tunnel1
L        169.254.6.1/32 is directly connected, Tunnel1

Load for five secs: 0%/0%; one minute: 0%; five minutes: 0%
Time source is NTP, *09:53:46.702 JST Wed Feb 5 2025
(省略)
Gateway of last resort is 10.0.0.1 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 10.0.0.1, GigabitEthernet1
      10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks
C        10.0.0.0/24 is directly connected, GigabitEthernet1
L        10.0.0.254/32 is directly connected, GigabitEthernet1
B        10.0.1.0/24 [20/100] via 169.254.6.2, 00:00:00
      169.254.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        169.254.6.0/29 is directly connected, Tunnel1
L        169.254.6.1/32 is directly connected, Tunnel1
Synthetic Monitorパケットロス
 6時台/9時台とも終始0%推移でした。Synthetic Monitorの30秒インターバルあたり600発のうち1発でも欠けたら、0.17%くらい上がるのですが完全な無風ですね。
Synthetic Monitor遅延
 6時/9時とも終始1.5ミリ秒推移でした。ログとルートテーブルのタイムスタンプを見る限り、200ミリ秒くらい影響あるのでは?と思いましたが、30秒平均では凪そのものです。

まとめ

 結論、Connect Attachmentのメンテナンス時における通信影響は以下の通りでした。

  • TGWから設定が削除されたメッセージを受信し、すぐにDown/Upする
  • パケットロス/遅延ともほぼ影響なしと言えるレベルである

 今回は1回だけ計測しましたが、あと1~2回計測のうえ結果が同じか確認できればと思います。

おわりに

 本記事がTGW Connect Attachmentを取り扱う方のご参考になりますと幸いです。