My Home NW Lab

逸般の誤家庭のネットワーク

Cisco Duo SecurityによるMeraki DashboardへのSingle Sign-Onの利用イメージ

概要

Cisco Duo SecurityによるMeraki DashboardへのSSO (Single Sign-On)では、Duo Centralと呼ばれるPortalを介したSSOとなります。 Duo CentralにはSSOのアクセス先がアイコン (Tile)として表示されます。

Duo Central

Duo Centralは専用のURLが発行されます。サブ ドメインのカスタマイズも可能です。ただし、評価期間中の場合は自動発行されたURLとなります。

Duo Centralのサブ ドメインのカスタマイズ

注意点

注意点ですが、Meraki Dashboard Loginの画面でDuoによる認証対象のアカウントでログインしようとすると、 DuoによるMFA (Multi-Factor Authentication)が行われるわけではありません。 あくまでも、Duo CentralからMeraki DashboardへSSOを行う過程でDuoのMFAが行われるのです。

DuoによるSSOと通常のログインの違い

Meraki Dashboard LoginのMFA

ちなみに、Meraki Dashboard LoginでMFAを行いたい際は、Google Authenticatorを使用します。 SMSによるMFAもありますが、対象地域が限られておりBETA版の扱いになります。

documentation.meraki.com

Google Authenticatorによる認証コードの入力画面

Cisco Duo SecurityによるMFAの採択価値

  • ビジネス的な視点で見ると、元々Cisco Duo Securityにより各SaaSなどに対してSSOを行いたいといった要望があり、 その一環でMeraki DashbaordにもSSOを行えるようにするのがDuo Securityの本筋的な使い方だと思われます。

  • 表現を変えると、Google Authenticatorの認証コードが手入力になるユーザビリティが気に入らずに、Duo Pushによるワンタッチの認証が好ましくて、 Meraki DashboardへのログインのためだけにDuoによるMFAを行いたいような背景となると、コスト パフォーマンスに見合わない可能性があります。

前者はSSO (MFAを含む)に価値を見出して、後者はMFAのみに価値を見出したとも表現できると思います。 そのため、関係者同士でCisco Duo Securityの利用イメージの認識を合わせるのが好ましいです。 本記事を執筆したのも利用イメージのすり合わせを行いやすくするための意図があります。

補足

補足となりますが、各OrganizationにSAMLの設定をしてDuo Cetnralからのアクセス先としてOrganizationを登録している都合上、 Duo側にはSSO対象の各Organizationを個々に設定する必要があり、MSP事業者の場合は顧客数 (テナント数)に比例して設定負荷がかかる可能性があります。 また、SSO環境下では各Organizationに対しての個別のログインとなるため、MSP Portalによる横断的な移動が出来なくなります。

Duo側の設定

Duo Centralからの画面遷移のイメージ

関連ドキュメント

関連記事

MerakiのSAMLによる認証のログはSAML login historyから確認する

Meraki DashboardSAMLによる認証時のログをトラブルシューティングなどの目的で追いたい場合は、 メニュー: Organization > Administrators の画面内にある SAML login history から確認できます。

f:id:myhomenwlab:20220415175720j:plain
メニュー: Organization > Administrators
f:id:myhomenwlab:20220415175737j:plain
SAML login history

メニュー: Organization > Login attempts でも認証の成否に関しては確認を行えますが、認証の失敗理由までは確認が行えない点に違いがあります。

f:id:myhomenwlab:20220415175914j:plain
メニュー: Organization > Login attempts

Meraki vMX向けの冗長化切り替え用AWS Lambdaスクリプトの挙動

Meraki vMX向けのAWS Quick Startsには、冗長化切り替え用のAWS Lambdaスクリプトが用意されておりますが、 実案件で使用するには挙動を把握しておく必要があるため各種情報を整理しました。

CloudFormationのテンプレートを用いたデプロイは下記の記事を参照してください。

myhomenwlab.hatenablog.com

本記事は2022年04月頃の情報に基づいています。今後、スクリプトに改修が入った場合は本記事と内容と差異が出る可能性があります。

AWS Lambdaスクリプト本体の公開先

AWS Lambdaスクリプトの動作イメージ

AWS Lambdaスクリプトからの各種ステータス情報の取得や設定の更新があるため、関連要素との連携箇所を整理します。

AWS Lambdaスクリプトの動作イメージ

  1. Amazon CloudWatch Events (Amazon EventBridge)から、AWS Lambdaスクリプトを定期的に実行します。
  2. AWS LambdaスクリプトAWS Secrets ManagerからMeraki Dashboard APIAPI Keyを入手します。
  3. AWS LambdaスクリプトMeraki Dashboard APIによりAuto VPN Routeの情報を取得します。
  4. Meraki vMXのEC2 Instanceのステータス情報を取得して、AWS Lambdaスクリプトは障害状況の判断を行います。
  5. 障害状況を加味して、Transit Gateway Route TableとRoute Tableに対して、AWS LambdaスクリプトがAuto VPN Routeを反映します。

Amazon CloudWatch Events (Amazon EventBridge)による定期実行

Amazon CloudWatch Events (Amazon EventBridge)にて定期的にAWS Lambdaスクリプトを呼び出します。 CloudFormationのテンプレートでは、実行間隔のデフォルト値が10分間隔となっております。そして、最短でも1分間隔になります。

Amazon CloudWatch Events (Amazon EventBridge)のEvent scheduleの設定

Amazon CloudWatch Events (Amazon EventBridge)のEvent scheduleの実行間隔の指定箇所

Amazon CloudWatch Events (Amazon EventBridge)からのAWS Lambdaスクリプトの呼び出し指定

AWS Lambdaスクリプトの設定確認

CloudFormationのテンプレートからデプロイすると複数のFuntionが設定されます。 冗長化切り替え用のFunction名は接頭辞が Cisco-Meraki-Sd-Wan-Vmx-W-vMXTransitGatewayRTLambd- になります。

AWS Lambdaスクリプトの設定確認 (1/2)

AWS Lambdaスクリプトの設定確認 (2/2)

AWS Lambdaスクリプト環境変数

環境変数を用いてAWS Lambdaスクリプトに環境個別の情報を与えます。
CloudFormationでデプロイすると、テンプレートに入力した項目が自動的に反映されます。

AWS Lambdaスクリプト環境変数

設定項目 設定例 備考
MERAKI_ORG_ID MerakiのOrganization IDを指定
RT_ID (例) rtb-xxxx Route TableのIDを指定します。
TGW_ATTACH_ID (例) tgw-attach-xxxx Transit Gateway AttachmentのIDを指定します。
TGW_RT_ID (例) tgw-rtb-xxxx Transit Gateway Route TableのIDを指定します。
vMX1Tag (例) AWS_vMX1 CloudFormationのテンプレートを用いた場合のTagのデフォルト値は vMX1 です。複数セット構築する場合は一意な値になるように調整します。
vMX2Tag (例) AWS_vMX2 CloudFormationのテンプレートを用いた場合のTagのデフォルト値は vMX2 です。複数セット構築する場合は一意な値になるように調整します。

筆者がCloudFormationでデプロイした際は、環境変数MERAKI_API_KEY が存在してMeraki Dashboard API Keyが設定されていました。 ですが、API KeyはAWS Secrets Managerによる管理となるため本来は MERAKI_API_KEY の設定は不要となります。

追記: 2022年06月08日に筆者のPull Requestがマージされて MERAKI_API_KEY は設定されなくなりました。

github.com

EC2 InstanceとMeraki Dashbaord上のTag情報の紐付け

Meraki vMXのEC2 Instanceと、Meraki Dashboard上のNetworkに同名のTagを付与して、Primary vMXとSecondary vMXを紐付ける必要があります。

設定対象 Key Value 備考
Primary vMXのEC2 Instance MerakiTag (例) AWS_vMX1 CloudFormationのテンプレートを用いた場合のTagのデフォルト値は vMX1 です。複数セット構築する場合は一意な値になるように調整します。
Secondary vMXのEC2 Instance MerakiTag (例) AWS_vMX2 CloudFormationのテンプレートを用いた場合のTagのデフォルト値は vMX2 です。複数セット構築する場合は一意な値になるように調整します。

vMX1TagvMX2Tag はPrimary vMXとSecondary vMXの識別に使われているので別々の値を指定してください。
また当たり前の話になりますが、冗長化対象のペアとなるPrimary vMXとSecondary vMXはAvailability Zoneを分けてください。

Primary vMXのEC2 Instanceに対するTagの例
Secondary vMXのEC2 Instanceに対するTagの例

MerakiのNetworkに対するTag

EC2 Instanceのイメージが破損するなどして再デプロイした際は、Tagの設定をし忘れないように留意してください。

AWS Secrets ManagerにAPI Keyを格納

AWS Secrets ManagerにはMeraki Dashboard APIで情報を取得するためのAPI Keyが格納されます。

設定項目 設定名
Secret Name MerakiAPIKey

AWS Secrets ManagerのAPI Key (1/2)

Secret key Secret value
MerakiAPIKey Meraki Dashboard APIAPI Key を格納します。

Issue #31 の修正によってAPI Keyを格納するためのSecret keyの名称が変更されました。merakiapikey からキャメル ケースの MerakiAPIKey に変わっています。画面キャプチャは修正前の掲載当時のままになっております。(2022年10月07日に追記)

github.com

AWS Secrets ManagerのAPI Key (2/2)

Meraki Dashboard API

Meraki Dashboard APIは大まかに分けて下記の2つのAPIによって、Auto VPN Routeの情報を取得しています。

Meraki Dashboard APIにはMeraki vMXのルーティング テーブルの情報を直接取得する手段がないため、 Auto VPNに関わる情報からMeraki vMXが学習しているAuto VPN Routeを割り出しています。

処理内容を例えるなら、Cisco IOS系で言うところの show ip route が実装されていないので、 show running-config の設定情報からルーティング テーブルを理論的に構築するような挙動になっています。

また、Meraki Dashboard APIの呼び出しは、下記のPythonのライブラリ経由で行っております。

github.com

上記の処理内容に関わる補足ですが、 AWS LambdaスクリプトのAuto VPN Routeの取得対象は、Spoke側のMXがHubsでPrimary vMXとSecondary vMXを直接指定している場合に限ります。 そのため、現状のAWS LambdaスクリプトではFull MeshやPartial Meshの環境には適用できません。

Auto VPN Routeの取得対象とMeraki Dashboard上の設定の関連性

そして、Meraki MXおよびvMXのDC-DC Failover構成ではHub間のループを無効化する必要があり、 DC-DC Failover構成では事実上のFull MeshやPartial Meshがサポートされないにも等しい状況となります。 そのため想定動作を正とするならば、スクリプトの改修でMesh対応にするのは実質的に不可能となります。

myhomenwlab.hatenablog.com

障害検知の仕組み

Meraki vMXの障害の検知では、Boto3の describe_instance_status のMethodを用いてEC2 Instanceのステータス情報を取得して障害の有無を判断しています。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_instance_status

そのため、OSがクラッシュしてEC2 Instanceが停止するような障害が想定されています。 表現を変えると、NICに割り当てられているIPアドレスに対してpingを打つような実トラフィックを伴う動作にはなっていない点に留意してください。

Primary vMXの障害復旧時のPreemptの動作

AWS Lambdaのスクリプトは、VRRPで言うところのPreemptが有効になってるような挙動となります。

具体的には、まずvMX1が障害になると、vMX2にNext hopが書き換わります。 その状態でvMX1が障害から復旧すると、Next hopがvMX2からvMX1に自動的に書き換わる挙動になります。

AWS Lambdaスクリプトの該当処理ですが、 get_all_vpn_routes の関数内にて、 vMX1 に該当するAuto VPN Routeが見つかると for ループを break して抜けるため、 vMX2が同一のAuto VPN Routeを学習していてもNext hopがvMX2に上書きされないようになっています。

https://github.com/aws-quickstart/quickstart-cisco-meraki-sd-wan-vmx/blob/main/functions/source/lambda_function.py

補足

AWS LambdaスクリプトMerakiのサポートは受けられないため、実導入する際は必ず挙動を把握しておく必要があります。

また、一例となりますが、Firmware Upgrade時のルーティングの片寄せには対応していないため、サービス断時間を極限までに短くしたいような要件があると改修が必要になってきます。 ただし、そもそも改修が必要なほど厳格な要件がある環境には、シンプルが売りのMerakiの導入は向かない可能性があります。

関連記事

myhomenwlab.hatenablog.com

AWS環境でのMeraki vMXのDC-DC Failover構成 (AWS Quick StartsによるVPC新規作成パターン)

Meraki vMXはWarm-Spareを組めないため、AWS環境ではVIP (Virtual IP)を用いたGateway冗長化が行えません。
そのため、Primary vMXとSecondary vMXの2台のMeraki vMXを用意しても、AWS側のRoute TableにはNext hopを1つしか設定できず、 障害時には何かしらの手段を用いてNext hopを切り替える必要があります。

幸いにもMeraki vMXのFailoverを自動的に行うためのAWS Lambdaスクリプトが存在するため、本記事ではCloudFormationによるデプロイ方法を紹介します。

Meraki vMX向けのAWS Quick Startsの概要

Meraki vMXをAWSのBest Practicesに従ってデプロイするためのAWS CloudFormationのテンプレートが、Cisco社とAWS社により共同で作成されています。

aws-quickstart.github.io

本CloudFormationのテンプレートは、Transit Gatewayを使用する構成を前提としています。 AWS基盤が管理するRoute tableのNext hopの切り替えが必要なため、 シンプルな設計にするにはトラフィックをTransit Gateway経由にしてルーティング情報を集中的に管理し、 Next Hopの操作対象のRoute Tableを限定する必要があるのが背景にあります。

そのため、Transit Gatewayを使用しない構成にはそのままでは適用できない点に留意してください。

Meraki vMXの設計・構築前に

Meraki vMX向けのAWS Quick Startsは、導入におけるあらゆる問題を解決するような銀の弾丸ではありません。 導入環境に応じての細かな調整が必要になる可能性があります。 そのため、関連する資料は全て目を通して、スクリプトの挙動なども把握して考慮点がないか確認してください。

Meraki vMXはネットワーク機器の分類になるため、大きくはネットワーク エンジニアの範疇になると思われます。 しかしながら、スクリプトの挙動や、Public CloudであるAWSの特性を加味した設計が必要になってくるため、 実案件ではプログラミングやPublic Cloudの知見があるエンジニアの存在が必要不可欠になります。

GitHub上のリポジトリにCloudFormationのテンプレートやAWS Lambdaのスクリプトが公開されているので、必ず情報の把握に努めてください。

github.com

AWS QuickStartsはCloudFormationのテンプレートを用いたデプロイを前提としているため、 既存のAWS環境の構成によってはCloudFormationによるデプロイが行えない可能性があります。 そうなると、CloudFormationで行われる設定内容を把握して、AWS Lambdaのスクリプトも個別にデプロイする必要が出てきてしまいます。 そのような状態になった際に、知見がなくてGitHub上に公開されている情報が把握できないなら目も当てられません。

本記事の設定方針

Meraki vMX向けのAWS Quick Startsによるデプロイは2種類のパターンがあります。

  • Deploy Cisco Meraki Virtual MX into a new VPC
    Meraki vMXを新しいVPCにデプロイする方法です。本記事ではこの手順を扱います。

  • Deploy Cisco Meraki Virtual MX into an existing VPC
    Meraki vMXを既存のVPCに展開する方法です。

DC-DC Failoverに関して

Meraki vMXの冗長化は、DC-DC Failoverの構成となります。

  • DC-DC Failover自体に関しては下記の記事を参照してください。

    myhomenwlab.hatenablog.com

  • DC-DC Failoverの構成はHub間のループが発生してしまうため、対処方法は下記を参照してください。

    myhomenwlab.hatenablog.com

検証構成

筆者の検証構成では、 AWS側のVPCに 10.253.0.0/16 を割り当てて、そのアドレスの範囲から Public Subnet 1 には 10.253.0.0/24 と、Public Subnet 2 には 10.253.1.0/24 を払い出しています。
拠点のLAN側には 10.255.11.0/24 のサブネットが存在し、AWS側のMeraki vMXが学習するAuto VPN Routeとなっています。

なお、本記事の中では疎通確認用のEC2インスタンスは作成せず、AWS Quick Startsによるデプロイのみを取り扱います。

検証構成 (AWS視点)

検証構成 (Meraki視点)

また、AWSのRegionは Asia Pacific (Tokyo): ap-northeast-1 を指定しています。 筆者の検証時の所感ですが、拠点間の物理距離が離れているとAuto VPN経由の通信のパケットのドロップが気になったので、国内のRegionを指定しています。

AWS MarketplaceからCisco Meraki vMXのSubscribe

Meraki vMXのインスタンスを作成するには、AWS MarketplaceでCisco Meraki vMXをSubscribeしておく必要があります。

  • AWS Marketplaceで下記の Cisco Meraki vMX にアクセスして、Continue to Subscribe ボタンを押下します。

    aws.amazon.com

    AWS MarketplaceからCisco Meraki vMXのSubscribe (1/3)

  • Terms and Conditions をよく読んだ上で、合意するのであれば Accept Terms ボタンを押下します。

    AWS MarketplaceからCisco Meraki vMXのSubscribe (2/3)

  • Cisco Meraki vMX がSubsrcibeされると AWS Marketplace > Manage subscriptions に表示されます。

    AWS MarketplaceからCisco Meraki vMXのSubscribe (3/3)

Meraki Dashboard API Keyの用意

Meraki Dashboard APIを用いるため、Meraki Dashboard上で予めAPI Keyの発行が必要になります。

AWS Lambdaのスクリプトを確認すると、読み取り系のMeraki Dashboard APIしか使用していなかったため、 筆者の場合はOrganizationに対してRead Onlyの権限を設定したAccountでAPI Keyを発行しました。

AWS Lambdaスクリプト向けのアクセス権限

Meraki Dashboard APIを使用するには、大きく分けて2つの手順があります。 セキュリティ観点を含めたAPI Keyの設定の詳細に関しては、下記の記事にまとめているので参考にしてください。

myhomenwlab.hatenablog.com

本記事内ではAPI Keyの発行までを簡潔に紹介します。

OrganizationレベルでAPIの有効化

  • メニュー: Organization > Settings より Dashboard API access セクションにある API Access にて、Organizationに対するAPIアクセスを有効にします。

    API Access

AccountでAPI Keyを生成

  • メニュー: Account名 > My profile より API access セクションにある Generate new API keyAPI Keyを生成して情報を控えます。API Keyが漏洩すると悪用される危険性があるため厳重に管理します。

    API keys

Meraki vMXのNetwrokの作成

  • Meraki vMXはWarm-Spare構成を組めないため、1台目 (Primary vMX)と 2台目 (Secondary vMX)のNetworkで個別に作成します。
    筆者は下記のようなNetwork名で作成しております。適宜読み替えてください。

    Network名 用途
    NW_AWS_vMX1 Primary vMX向け
    NW_AWS_vMX2 Secondary vMX向け
  • メニュー: Organization > Create network に移動します。

  • 設定項目: Network type には Security appliance を指定して、任意の名称でNetworkを作成します。
    備考: AWS向けのNetworkには、Meraki vMX以外を所属させる余地がないため Combined hardware にする必要がありません。

    Meraki DashboardでNetwrokの作成

  • Networkを作成すると、メニュー: Security & SD-WAN > Appliance status の画面に移動します。 Meraki vMXのライセンス登録状況に応じて、Add-vMX-S, Add-vMX-M, Add-vMX-L のボタンが表示されるので、追加対象のボタンを押下します。

    Meraki vMXデバイスの追加ボタン
    Meraki vMXデバイスの追加後の表示

Meraki vMX用NetworkへのTagの追加

  • メニュー: Organization > Overview に移動します。

  • Cisco Meraki vMXのPrimary MXとSecondary MXになるNetworkに対して、一意なTagを追加します。
    筆者の環境では下記のように指定しております。AWS Lambdaのスクリプトから参照される情報になります。

    Network名 用途 Tag
    NW_AWS_vMX1 Primary vMX向け AWS_vMX1
    NW_AWS_vMX2 Secondary vMX向け AWS_vMX2

    対象のNetworkを一つずつ選択して、Tag ボタンから追加します。

    MerakiのNetworkにTagの追加 (1/2)

    MerakiのNetworkにTagの追加 (2/2)

AWS Quick Startsによるデプロイ

Regionの移動

  • AWS ConsoleからRegionを明示的に選択します。
    筆者は Asia Pacific (Tokyo) に指定しています。適宜読み替えてください。

    AWSのRegionの選択

EC2 DashboardからKey Pairの用意

EC2 Dashboard から メニュー: Security & Network > Key PairsSSH Keyを予め発行しておきます。
CloudFormationでデプロイする際にKey Pairの指定が必須になっているためです。 ですが、Meraki vMXはSSHログインしてのコマンド操作には対応していないため、実質的にはSSHで接続する必要性はありません。

Key Piarの用意

CloudFormationによるデプロイ

  • AWS Quick StartsのMeraki vMXのページに移動して、How to deploy タブより Deploy Cisco Meraki Virtual MX into a new VPC を押下します。

    aws.amazon.com

    AWS Quick StartsのMeraki vMX

Step 1: Specify template

  • デプロイ先のRegionに移動します。

    AWSのRegionの指定

  • Amazon S3 URLAWS Quick StartsのMeraki vMX向けのURLが指定されているのを確認します。
    筆者が確認した際のURLは下記となっております。

    URL: https://aws-quickstart.s3.us-east-1.amazonaws.com/quickstart-cisco-meraki-sd-wan-vmx/templates/quickstart-cisco-meraki-sdwan-vmx-entrypoint-new-vpc.template.yaml

Step 2: Specify stack details

環境に応じたパラメータを入力してデプロイします。筆者が検証した際の情報を参考に記載します。
補足が必要なパラメータは個別に解説していきます。

設定項目 設定値 備考
Stack name Cisco-Meraki-Sd-Wan-Vmx CloudFormationのStackの名称です。Stackを識別しやすい任意の名称を指定します。
Meraki organization ID MerakiのOrganization IDを指定
Meraki organization API key MerakiAPI Keyを指定
Number of vMX instances 2 デフォルト値のままです。最小冗長構成の2台でvMXのInstanceを作成します。
Authentication token, first vMX instance 1台目のvMXの認証トーク vMXの1台目の認証トークンを発行して貼り付けます。都度変わるため毎回手動で貼り付けが必要です。
Authentication token, second vMX instance 2台目のvMXの認証トーク vMXの2台目の認証トークンを発行して貼り付けます。都度変わるため毎回手動で貼り付けが必要です。
Availability Zones to use for the SD-WAN VPC subnets ap-northeast-1a , ap-northeast-1c 筆者の環境の例です。Regionに応じたAZを指定します。
Meraki network tag, first vMX instance AWS_vMX1 Tagのデフォルト値は vMX1 です。複数セット構築する場合は一意な値になるように調整します。
Meraki network tag, second vMX instance AWS_vMX2 Tagのデフォルト値は vMX1 です。複数セット構築する場合は一意な値になるように調整します。
CIDR block for the VPC 10.253.0.0/16 筆者の環境の例です。VPCのCIDR Blockを指定します。
CIDR block for public subnet 1 10.253.0.0/24 筆者の環境の例です。1台目のvMXが配置されるPublic Subnetを指定します。
CIDR block for public subnet 2 10.253.1.0/24 筆者の環境の例です。2台目のvMXが配置されるPublic Subnetを指定します。
Transit gateway ASN 65001 筆者の環境の例です。AS番号を指定します。
Amazon EC2 instance type vMXのライセンスに応じて指定 vMX-S, vMX-M の場合は c5.large を指定し、vMX-L の場合は c5.xlarge を指定します。
CloudWatch Events rule rate rate(1 minutes) デフォルト値は10分ですが、障害検知時間の短縮のために1分に変更しています。
Key pair name 事前に用意したKey Pairを指定 Key pair name を指定しないとエラーでCloudFormationの処理が止まってしまいます。

参考情報としてデフォルト値の画面を掲載します。

Step 2: Specify stack detailsのデフォルト値

Meraki Organization IDの確認

Meraki Dashboard の画面下部に organization ID の情報が表示されます。

Meraki Organization IDの確認

Meraki organization API keyと権限

Meraki vMXのルーティング情報を読み込むのにAWS LambdaのスクリプトMeraki Dashboard APIを使用しています。
AWS LambdaからのMerakiに対する設定の権限は不要であるため、Read-only の権限で専用のAccountを用意してAPI Keyを発行するのが好ましいです。

認証トークンに関して

Authentication token, first vMX instanceAuthentication token, second vMX instance にはMeraki vMXの認証トークンを指定します。
Meraki Dashboardのメニュー: Security & SD-WAN > Appliance status に移動して、Meraki vMXのデバイスの画面から Generate authentication token... ボタンを押下すると認証トークンが発行が可能です。
なお、Meraki vMXがMeraki Cloudに接続して認証できる状態になるまで1時間以内になるようにしてください。

認証トークンの発行 (1/2)

認証トークンの発行 (2/2)

Meraki vMXのインスタンスのタイプ

Meraki vMXは、vMX-S, vMX-M, vMX-Lのライセンス種別によってAWS側で指定すべきインスタンスのタイプが異なります。
ドキュメントを確認にして適切なインスタンスのタイプを指定します。

documentation.meraki.com

vMX Comparison Datasheet

AWS Lambdaスクリプトの実行間隔

AWS Lambdaスクリプトの実行間隔は CloudWatch Events rule rate で指定します。 デフォルトでは rate(10 minutes) となっており、障害の検知時間を短くするのであれば rate(1minutes) に変更してください。

Step 3: Configure stack options

Step 3ではCloudFormationのStackのオプションを適宜指定します。
参考情報としてデフォルト値の画面を掲載します。

Step 3: Configure stack optionsのデフォルト値

筆者は生成されたリソースを追いやすくするために、Tag情報のみを明示的に設定しました。

Tag情報の指定

Step 4: Review

CloudFormationのテンプレート内でIAM (Identity and Access Management)リソースを作成する可能性があるため、 続行するには Capabilities のセクションで下記の2点に同意する必要があります。

  • I acknowledge that AWS CloudFormation might create IAM resources with custom names.

  • I acknowledge that AWS CloudFormation might require the following capability: CAPABILITY_AUTO_EXPAND

Step 4: Review の Capabilities

Meraki vMXのステータスの確認

Primary vMXとSecondary vMXがMeraki Cloudとの接続性があり、Portsの状態が取得できているかを確認します。 もしMeraki vMXがMeraki Cloudとの接続性がなければ、Portsの状態が取得できないままになります。

Meraki vMXのステータスの確認

AWSのRoute Table & Transit Gateway Route Tableの事後 (After)確認

Meraki vMXの冗長化が関係するAWSのルーティングの設定には Route Table と Transit Gateway Route Table があります。 Meraki vMXのAuto VPNの設定をまだ行っていない場合にどうなるか確認しておきます。

なお、Meraki Dashboard側の設定も完了してAWS Lambdaスクリプトが動作すると、 Meraki vMXが学習しているAuto VPN RouteがAWS側の Route Table と Transit Gateway Route Table に反映されます。

AWSのRoute Tableの事前 (Before)確認

Route Table: Public Subnets には local と igw (Internet Gateway) しか載りません。

AWSのRoute Tableの事前 (Before)確認

AWSのTransit Gateway Route Tableの事前 (Before)確認

Transit Gateway Route Table: Cisco-Meraki-Sd-Wan-Vmx-WorkloadStack-... には CIDR block for the VPC で指定したVPCのCIDRブロックしか載りません。

AWSのTransit Gateway Route Tableの事前 (Before)確認

MerakiのAuto VPNの設定

AWS環境のMeraki vMXをHubとして、AWS環境の各拠点がHub & Spoke構成になるように設定します。

Meraki vMXのAuto VPNの設定

  • Primary vMXとSecondary vMXのそれぞれに設定します。

  • メニュー: Security & SD-WAN > Site-to-site VPN に移動します。

  • Type の設定を Hub に指定します。

  • Local networks を下記のように設定します。

    Name Subnet 備考
    AWS_NW 10.253.0.0/16 Name は任意の名称を指定します、Subnet にはCloudFormationのテンプレートの項目にあった CIDR block for the VPC と同じサブネットの範囲を指定します。

Hub側のSite-to-site VPNの設定

  • Primary vMXとSecondary vMXの両方に設定を行うのを忘れないようにしてください。

SpokeのAuto VPNの設定

  • Auto VPNに参加する各Spokeに対して設定します。

  • メニュー: Security & SD-WAN > Site-to-site VPN に移動します。

  • Type の設定を Spoke に指定します。

  • Hubs を下記のように設定します。

    # Name IPv4 default route 備考
    1 NW_AWS_vMX1 Uncheck Primary vMXを1番目に指定します。
    2 NW_AWS_vMX2 Uncheck Secondary vMXを2番目に指定します。

Spoke側のSite-to-site VPNの設定

  • 全てのSpokeに設定を行うのを忘れないようにしてください。

AWSのRoute Table & Transit Gateway Route Tableの事後 (After)確認

Meraki Dashboard上でAuto VPNのHub & Spoke構成が適切に設定されると、 Primary vMXとSecondary vMXによって学習されるAuto VPN Routeの情報が、AWS LambdaスクリプトによってAWS側の Route Table と Transit Gateway Route Table に反映されます。

AWSのRoute Tableの事後 (After)確認

AWSのTransit Gateway Route Tableの事後 (After)確認

ここまでの手順でCloudFormationによるデプロイと、AWS Lambdaスクリプトが動作しているかの簡単な確認が終わりとなります。

関連記事

myhomenwlab.hatenablog.com

myhomenwlab.hatenablog.com

Meraki Dashboard APIでスクリプトを組むときは、必要なAPIが実装されているか事前に確認すべき

Meraki導入環境において、運用の効率化などのためにMeraki Dashboard APIを用いた作業の効率化を検討される場合は、 事前に必要なAPIが実装されているか確認するのが好ましいです。

Meraki DashboardのWeb UIには機能として表示されるものの、APIとしては実装されていない場合も多々あります。 具体的には、出始めたばかりの機能やBETA機能、サポートに個別に依頼が必要な機能が想定されます。 そのため、Meraki Dashboard APIのドキュメントから使用可能なAPIのリストを予め確認してください。

developer.cisco.com

f:id:myhomenwlab:20220410192755j:plain
Meraki Dashboard APIのリスト

具体的に想定される失敗例としては、 Configuration Tempalteを使用していないMeraki環境にて、各Networkに一律的に共通の設定を行いたいシナリオで、 当該設定に対するAPIが提供されてなくて手作業で全Networkに設定を行う必要が出てくるかもしれません。

技術の進歩に伴って「ネットワーク機器がAPIの登場によりプログラマブルになったため、柔軟な制御が可能になっています。」と言った宣伝文句を見かける機会がありますが、 アイデアを実現するためのAPIが提供されていないのであれば、ただの夢物語になってしまいます。

そのような宣伝文句を鵜呑みにして、SIerが自動化の案件を請け負うというものなら、 APIに該当機能がないとWebスクレイピングのような力業で対応せざるを得なくなります。

そのため、予め実現性の担保が必要になってきます。

本記事では「APIがあるからできるだろう。」で安易に進めるのは、とても危険性があるのを伝えたい次第です。

Meraki MXにおけるDC-DC Failoverの特性

Meraki MXでDC間の冗長化や、Warm-Spareに非対応なMeraki vMX (Virtual MX)で冗長化する場合は、DC-DC Failoverの構成を取る必要があります。
DC-DC Failoverの情報は下記の公式ドキュメントに記載がありますが、「何故そのような仕組みになっているのか?」までは明記されていません。 そのため、DC-DC Failoverを成り立たせている要素を本記事では整理して紹介します。

documentation.meraki.com

下記のイメージ図は、DC-DC Failoverを成り立たせている必須級の要素を表したものです。 表現を変えると、MXでDC間の冗長化を行うには、この必須級の要素を満たさなければならないため、 DC-DC Failover構成における設計の要所を理解しておく必要があります。

DC-DC Failoverの構成

Meraki MX, vMXのModeとDC-DC Failoverの関係性

DC-DC Failover構成では、DC側のMXは Passthrough or VPN Concentrator Mode である必要があるため、その理屈を順を追って紹介します。

Meraki MXのMode

Meraki MXには2種類のModeがあります。

  • Routed Mode
  • Passthrough or VPN Concentrator Mode

Meraki MXのMode

Routed Mode は拠点のInternetを収容するのに向いているModeです。 DC-DC Failover構成では、DC側に設置するMXは必然的に Passthrough or VPN Concentrator Mode となります。 表現を変えると、DCのInternet収容をMXですべきではありません。 DC側を Routed Mode にしてしまうと、Primary DCとSecondary DCによるDC間の冗長化が行えなくなってしまいます。

Meraki vMX (Virtual MX)のMode

仮想アプライアンスのvMX (Virtual MX)では、物理アプライアンスのMXとModeの名称が異なります。

vMX Setup Guide for Microsoft AzureよりvMXのMode

Concentrator Mode の中に One-Armed Concentrator と NAT Mode Concentrator の区分があります。 MXのPassthrough or VPN Concentrator Mode は、vMX (Virtual MX) では One-Armed Concentrator に相当します。

そのため、本記事内での Passthrough or VPN Concentrator Mode は vMX の One-Armed Concentrator を含んだ意味合いとして解説します。

Concentrator Mode の中に One-Armed Concentrator と NAT Mode Concentrator の区分がありますが、基本的には One-Armed Concentrator となります。 そしてvMXがどちらのModeであっても、MXで言えば Passthrough or VPN Concentrator Mode に相当します。

そのため、本記事内での Passthrough or VPN Concentrator Mode は vMX を含んだ意味合いとなります。

筆者の解釈に誤りがありましたので、2022年06月21日付けで上述の内容を訂正しております。
NAT Mode Concentrator の詳細は下記の記事で解説しております。

myhomenwlab.hatenablog.com

vMXは各種Public Cloudに対応しているため、Modeの記述は各Public Cloud向けのドキュメントに記載があります。

DC側のMXは原則的にOne-Armed構成

DC側に設置するMXは必然的に Passthrough or VPN Concentrator Mode になる点を紹介しました。 その Passthrough or VPN Concentrator Mode は、Passthrough と VPN Concentrator の言葉が混ざっており、 構成のイメージが大きく分けて2パターンあるように取れますが、原則的にDC側はOne-Armed構成VPN Concentratorとなります。

DC側のMXは原則的にOne-Armed構成

Meraki MXはBPDUを透過するのみでSTPに対応していない点、LAGを組めない点があり、Passthrough構成にすると冗長性に問題が出ます。

Auto VPNへの参加とサブネットの重複

MXがAuto VPNへ参加する際は、Routed Modeの場合はAuto VPN内でサブネットが一意である必要があります。(Routed ModeではAuto VPN内でサブネットの重複が許されません。)

Routed ModeのMXは拠点のInternet収容用途がメインになるため、 例えば拠点1と拠点2で物理的に分かれていてLAN内のネットワークも分断されているのに、 サブネットが重複していたら送るべきAuto VPN Peerが一意に特定できなくなるからです。

Routed ModeではAuto VPNへ参加するサブネットの重複は許されない

それに対して Passthrough or VPN Concentrator Mode がAuto VPNへ参加する際は、サブネットの重複が許容されます。 Auto VPN内にサブネットが重複して広報されていても、DC間接続の渡りによってどちらのDC経由でも到達性が確保されているためです。

DC-DC Failover構成ではDC間接続により到達性を確保

なお、DC側をRouted Modeにして、MXから対向DCにStatic Routeを向けつつ、そのStatic RouteをAuto VPNに広報するのもサブネット重複の制約に引っかかるためできません。

DC-DC Failover構成は、DC側をRouted Modeにはできない = Routed Modeでは成り立たない

更に補足すると、Routed Modeはサブネットの重複が許されないため、 同一拠点内でMX (シングル・Warm-Spare構成)を複数セット用意して、一つの拠点で複数のInternetの出口を向くような構成が実質的にできなくなります。

同一拠点でRouted ModeのMXを複数セット構築しようとすると、サブネット重複の制約に引っかかる

上述のRouted ModeにおけるAuto VPN内のサブネット重複の制約により、DC側に設置するMXは必然的に Passthrough or VPN Concentrator Mode となります。

Spoke発の通信フロー

Spokeの視点で、複数のHubから同一のルートが広報されている場合は「Hubの優先度」に従ってルーティングが行われます。
優先度によって一意に宛先が決まるため、負荷分散が行われない点に留意してください。 また、あくまでもSpoke発の通信に適用されるため、ルーティング設計によって「戻りの通信」が異なるHubから返ってくる可能性があります。 非対称ルーティングは、一般的に通信フローやトラブルシューティングを複雑化してしまうため、DC内のルーティング設計には留意してください。

Spoke発の通信フロー

Hubの優先度の設定箇所

Auto VPN Peerの状態とAuto VPN Routeの関係性

Auto VPN Routeは基本的にAuto VPN Peerの状態 (Up/Down)に関わらず、常にRoute tableにインストールされた状態になります。 一般的なRouting & Switchの知識がある方には不思議な挙動に見受けられると思われます。

理屈的には、Auto VPN Peerの状態をトラッキングしていなくても、Routed Modeはサブネットの重複が許されてないので迂回経路が発生せず、 Auto VPN PeerがDownしているのであれば、トラッキングの有無に関わらずに該当拠点への到達性がないのは当たり前になるからです。

ただし、DC-DC Failover構成ではDC間接続による冗長化を行っていると想定しているため、Primary DCとSecondary DCのどちらのDCからも到達性があります。 そのため、DC-DC Failover構成では例外的な挙動があります。 Passthrough or VPN Concentrator Mode の複数のHubが、同一サブネット長のAuto VPNのルートを広報している場合に、 対象Auto VPN Routeを持つAuto VPN Peerの状態を死活監視して、障害時はルートを切り替える挙動になっています。

DC-DC Failover構成では、DC間接続があるため障害時の迂回が可能

DC-DC FailoverはHubから同一ルートを広報する

DC-DC Failoverの構成ではDC側のHubは同一サブネット長のルートを広報する必要があります。同一のルートでなければFailoverの対象にならないためです。 そのため、Logest Matchで一方のDCを優先させる制御はできなくなります。

【NG例】DC-DC FailoverのHubは、同一ルートを広報する必要がある

補足ですが、MX Routing BehaviorDC-DC Failover のセクションによると、サポートへ連絡すればLongest Matchによる制御にも対応可能にはなるようです。

documentation.meraki.com

If you require the spoke MX to be able to failover to a hub with a less specific subnet, please contact Cisco Meraki Support.

ただし、例外的な挙動を許容した設計とすると、MXの製品特性を大きく逸脱しかねないためリスクが伴う点を理解すべきです。 例外的な挙動を許容しなければならない時点で、そもそも論としてシンプルが売りのMeraki MXを導入するのがリスクになります。

DC-DC Failover構成におけるHub間のループ

DC-DC Failover構成ではHub間のループが発生するのが想定動作となります。
そのため、Hub間のループを引き起こされないようにする必要がありますが、注意点もあるため下記の記事に個別にまとめております。

myhomenwlab.hatenablog.com

DC-DC FailoverのFailoverの時間

DC-DC Failover構成では、Spokeから見たHubへのFailoverの時間は 20 ~ 30 秒になっております。

また、HubからSpokeへのFailoverは、ルーティング設計に依存する点に留意してください。 さらに、vMXをPublic Cloudに導入した場合は、Public Cloudの基盤側がRoute Tableの制御を持つため、冗長化の切り替えスクリプトや、BGPによる動的ルーティングの切り替えにFailoverの時間が依存します。

documentation.meraki.com

Warning: Failover between datacenters typically occurs in 20 to 30 seconds after connectivity between the remote site and the datacenter is lost. The failover time will vary if utilizing BGP, due to the iBGP hold-timer.

Meraki SD-WAN のドキュメントの Failover Times のセクションの表には、他のFailoverの観点と一緒に記載があります。

documentation.meraki.com

Failover Times

最後に

Meraki MXはクラウド管理型のため、Internetへの接続性に大きく依存しています。 そして、そのInternetは不特定多数のネットワークが集まって成り立っているため、専用線を用いてSLAが保証されている閉域網よりは不安定と表現できるかもしれません。 その対策として、Meraki MXはルーティングに対してはフラップが発生しにくい仕組みを取っていると推察されます。 そのため、一般的なR&Sと比較すると特殊な挙動となっており、DC-DC Failoverはその最たる例と言えると筆者は考えております。

また、Meraki MXは特殊な挙動同士が密接に関係しているため、意図しない挙動による考慮漏れが生まれないように、原則的にBest Practicesに沿って設計すべきです。
表現を変えると、導入環境がBest Practicesに適合しないのであれば、Meraki MXの導入は避けるべきです。
Meraki MXの特殊な挙動を全て読み切るのは難しく、多機能でもないため設計によるリカバリも困難であり、複雑な要件を個々に対応していくのが実質的に不可能なためです。

要は、プロの料理人が書き残したBest Practicesと呼ばれるレシピに、素人が自己流のアレンジを加えるようなやり方をすべきではありません。 Meraki MXに限らない話ですが、製品特性を踏まえて導入すべきです。

Meraki MXのSite-to-site outbound firewallと非対称ルーティング時の挙動 (Statefulの判定範囲)

Meraki MXのSite-to-site outbound firewallStatefulである点はドキュメントに明示されています。 ですが、DC-DC Failoverの構成にて、非対称ルーティングの状況が生まれた際の挙動は明記されていないためサポートに確認を行いました。(2022年03月頃)

documentation.meraki.com

Administrators have the ability to add firewall rules to restrict the traffic flow through the VPN tunnel for a Cisco Meraki MX Security Appliance. Similar to other Meraki firewall options, this firewall is stateful and will only block traffic if it does not match an existing flow.

サポートの方によると、Site-to-site outbound firewallでは、Auto VPNのTunnel InterfaceではなくMX内部に適用されるため、 行きと戻りのInterface (Auto VPN Tunnel)が別の経路となる場合でもStaetfulの判定となる仕様とのことでした。

そのため、下記のイメージ図のような構成では、Site-to-site outbound firewallで通信はドロップしない[通信は許可される]のが期待動作となります。

f:id:myhomenwlab:20220405200348j:plain
Site-to-site outbound firewallと非対称ルーティング

補足ですが、DC-DC Failoverの構成では、SpokeからのHubの通信は「Hubに対する優先度」によって一意に決まります。 それとは対照的に、HubとなるDCやPublic Cloud側は、内部のルーティング設計次第でHubからSpokeへの通信をPrimaryとSecondaryのMXのどちら経由でもルーティングが可能になります。 そして、Public Cloud環境のAzureやAWSでは、vMXの冗長化の切り替えスクリプトを用意する設計パターンがあるため、 スクリプトの実装と障害状況により、さらに非対称ルーティングが生まれる可能性が高くなります。
そのため、非対称ルーティングになってしまった通信がドロップしないのは、考え方によっては制約が緩和されているとも受け取れます。

しかしながら、非対称ルーティングの構成では、経路上の他のFirewallなどでドロップされる可能性があったり。 非対称ルーティングに伴う通信フローの煩雑化により、環境の把握やトラブル シューティングが困難になる可能性があるので、非対称ルーティングの構成が推奨されているわけではありません。
当たり前のことですが、「できる。」と「できるけど、するべきか?」は違います。その点を留意しての設計が必要になってきます。