My Home NW Lab

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

Meraki Dashboard API Python Libraryでコンソールとログ ファイルのロギング出力を抑制

Meraki Dashboard API Python Libraryはコンソールとログ ファイルにロギング出力を行いますが meraki.DashboardAPI() に引数を与えると個別に制御が可能になります。

  • コンソールへのロギング出力の抑制print_console=False の引数を与えます。デフォルトでは True になっています。

  • ログ ファイルへのロギング出力の抑制output_log=False の引数を与えます。デフォルトでは True になっています。

Meraki Dashboard API Python Libraryでコンソールとログ ファイルのロギング出力を抑制

抑制対象がコンソールとログ ファイルの2つあるため、どちらを対象にしているのか混同しないように注意してください。

Meraki Dashboard API Python Libraryのロギング出力の抑制対象

なお、検証時の meraki パッケージは Version: 1.27.0 になります。

サンプル スクリプト

参考程度にOrganization名を表示するスクリプトで、コンソールとログ ファイルの出力を抑制するコードを掲載します。

#!/usr/bin/env python3

import meraki
import pprint

dashboard = meraki.DashboardAPI(print_console=False, output_log=False)

orgs = dashboard.organizations.getOrganizations()

org_list = []

for org in orgs:
    org_list.append(org['name'])

org_list.sort()

pprint.pprint(org_list)

ロギング出力の抑制を行っているのは、下記のコードの部分です。

dashboard = meraki.DashboardAPI(print_console=False, output_log=False)

情報源

class DashboardAPI の情報と、引数のデフォルト値が定義されている config.py の情報から処理内容を確認しております。

class DashboardAPI

  • class DashboardAPI の情報は下記URLから参照できます。

    dashboard-api-python/__init__.py at master · meraki/dashboard-api-python
    https://github.com/meraki/dashboard-api-python/blob/master/meraki/__init__.py

    コードから引数の説明箇所を抜粋します。

    • - print_console (boolean): print logging output to console?

    • - output_log (boolean): create an output log file?

config.py

  • config.py の情報は下記URLから参照できます。

    dashboard-api-python/meraki/config.py
    https://github.com/meraki/dashboard-api-python/blob/master/meraki/config.py

    • print_console は変数 PRINT_TO_CONSOLE でデフォルト値がセットされています。

      # Print output logging to console?
      PRINT_TO_CONSOLE = True
      
    • output_log は変数 OUTPUT_LOG でデフォルト値がセットされています。

      # Create an output log file?
      OUTPUT_LOG = True
      

Catalyst 9800-CLの適切な電源の停止の仕方

仮想アプライアンスであるCatalyst 9800-CLの電源を適切に停止するには reload pause コマンドを実行してから仮想マシンPower Off します。

情報源は下記のドキュメントになります。

www.cisco.com

Cisco Catalyst 9800 Series Configuration Best Practices - Cisco (2023年02月時点)

If you want to shut down the 9800-CL it is recommended that you do it gracefully following this simple procedure:

● Before you power off the VM from the hypervisor, run the exec command reload pause – this command will reload the box and then pause, waiting for the user input to start.

● At this point, go ahead and power off the VM.

電源停止の流れ

  1. 特権モード (# プロンプト)で下記のコマンドを実行します。

     reload pause
    
  2. 下記の [confirm] の確認メッセージが表示された際にEnterキーを押下すると、約20秒ほどPauseした後に再起動処理が走ります。

     Reload command is being issues on Active unit, this will reload the whole stack Proceed with reload? [confirm]
    
  3. Pauseしている最中に仮想基盤やPublic Cloud側で電源の停止処理を行います。

参考: 実際の操作画面

検証環境

操作画面

  • vSphere ClientのWeb Consoleから reload pause コマンドを実行します。

    Catalyst 9800-CLでの reload pause コマンドの実行

  • vSphere Clientから仮想マシンPower Off します。

    vSphere Clientからの Power Off の実行

Meraki MRとOneLoginによるWPA2 Enterprise

Meraki MRとOneLoginによるWPA2 Enterpriseの設定方法を整理します。

OneLoginはRADIUSの機能があり、Meraki MRからRADIUSの認証先として指定するとWPA2 Enterpriseによる認証が行えます。 OneLoginのRADIUSはInternet側に存在しており、RADIUSのAuthenticatorとなるMeraki MRを送信元IPアドレスとSecretで識別します。

Meraki MRとOneLoginの設定要素

OneLogin, Meraki, 無線クライアントの3ヵ所で設定が必要になるため、各構成要素を意識してください。

  • OneLoginではRADIUSの設定と資格情報のUsersの設定が必要になります。

  • MerakiではMeraki DashboardにてMeraki MRのSSIDに対するRADIUSの設定が必要になります。

  • 無線クライアントではWPA2 Enterpriseの無線LAN接続設定が必要になります。

前提情報

OneLoginのRADIUS設定が参照するIP Addressは、Meraki MRの LAN IP ではなく PUBLIC IP になります。

Meraki Dashboard - Meraki MRのPUBLIC IP

そのため本番環境での導入時は、Meraki MRの上流にあるWAN RouterのPublic IP Addressは固定アドレスの割り当て方式にしてください。 PPPoEのIPCPやDHCPによる動的アドレスの割り当て方式の場合は、InterfaceのDown/Upなどによって割り当てアドレスが変動したタイミングで、OneLoginのRADIUS設定で指定したPublic IP Addressの修正が必要になるケースがあります。

OneLoginのCredentials設定のマッピング

OneLoginのRADIUS設定では、WPA2 Enterpriseの認証時に用いる User-NameUser-Password に資格情報を Users の登録要素とマッピングが必要になります。

本記事では下記の表のようにデフォルト値のままにしております。

設定項目 Usersの該当要素 備考
User-Name Email (デフォルト値) 例: wireless-test@lab.test
User-Password Password (デフォルト値)

OneLogin - Credentials設定 (デフォルト値)のマッピング

検証時の情報

2023年02月頃に検証しています。 Meraki MRのモデルはMR33でVersionは MR 29.4.1 (Stable)になります。

設定

OneLoginの設定

OneLoginではRADIUSとUserの設定が必要になります。本記事ではUserはOneLogin上に直接手動で作成します。

RADIUSの設定

  • メニュー: Authentication > RADIUS に移動し、New Configuration ボタンを押下してRADIUS configを新しく作成します。

    OneLogin - RADIUSの設定画面への移動 (1/2)

    OneLogin - RADIUSの設定画面への移動 (2/2)

  • RADIUS config の設定を行います。

    • Name (RADIUS config / に続く名称の指定箇所)には任意の名称を指定します。本記事ではMeraki MRとの認証連携を示すために RADIUS_For_Meraki_MR としています。
    • Configuration セクションの Secret を設定します。Merakiの設定と一致させる必要があります。
    • IP Address にはMeraki MRに紐付くPublic IP Addressを設定します。

    OneLogin - RADIUS config の設定

Userの設定

  • メニュー: Users > Users に移動し、New User ボタンを押下して検証用Userを作成します。

    OneLogin - Userの設定画面への移動 (1/2)

    OneLogin - Userの設定画面への移動 (2/2)

  • 必須項目である First nameLast name に任意の情報を指定し、Email にはWPA2 Enterpriseの認証用メール アドレスを指定します。RADIUSCredentials 設定でマッピングを変えている場合は、必要な項目にも適宜入力してください。

    OneLogin - Userの作成

  • More Actions ボタンのサブ メニューより、Change Password を選択して任意のPasswordを指定します。

    OneLogin - Passowrdの変更 (1/2)

    OneLogin - Passowrdの変更 (2/2)

Meraki Dashboardの設定

  • メニュー: Wireless > SSIDs から任意のSSIDedit settings を押下します。

    Meraki Dashboard - 対象SSIDの選択

  • 必要に応じて SSID (name) を任意の名称に修正します。また、SSID status が無効になっている場合は Enabled にしてください。

    Meraki Dashboard - SSID名の修正と有効化

  • Security セクションにて Enterprise with のラジオ ボタンを選択してから、ドロップダウン リストは my RADIUS server に設定します。

    Meraki Dashboard - 認証方式の選択

  • RADIUS セクションの RADIUS servers を設定します。

    Meraki Dashboard - RADIUS serversの設定

    • Host IP or FQDNPort の設定情報はOneLoginのドキュメントから最新の情報を確認してください。US ShardとEU Shardがあるようですが本記事ではUS Shardで設定します。

      2023年02月頃の情報では下記のように設定します。Meraki MRは名前解決ができるためFQDN指定が可能です。適宜、IPアドレス指定と使い分けてください。本記事ではUS Shardの情報で設定しているため、EU Shardの場合は読み替えてください。

      # Host IP or FQDN Port
      #1 radius.us.onelogin.com (52.34.255.206) 1812
      #2 radius2.us.onelogin.com (18.216.23.112) 1812
    • Secret はOneLoginのRADIUS設定と一致させます。

    • Done ボタンを押下して RADIUS servers の設定の確定を忘れないようにしてください。

      Meraki Dashboard - RADIUS設定の確定

無線LANクライアントの設定 - Windows想定

OneLoginのドキュメントにはWindows 10とmacOSの設定方法の情報があります。

本記事ではWindows 10での設定を掲載します。

ワイヤレス ネットワークの追加

  • ネットワークと共有センター を開いて、新しい接続またはネットワークのセットアップ を押下します。
    ファイル名を指定して実行 (ショートカット: Windowsキー + R) から画面を開く場合は control.exe /name Microsoft.NetworkAndSharingCenter と入力します。

    Windows 10 - ネットワークと共有センター

  • ワイヤレス ネットワークに手動で接続します を選択して 次へ を押下します。

    Windows 10 - 接続またはネットワークのセットアップ

  • ネットワーク名 に接続先のSSIDを入力し、セキュリティの種類WPA2-エンタープライズ に指定してから 次へ を押下します。

    Windows 10 - ワイヤレス ネットワークに手動で接続します

  • 接続の設定を変更します を押下します。

    Windows 10 - 接続の設定を変更します

接続の設定の変更 (ワイヤレス ネットワークのプロパティの編集)

  • ワイヤレス ネットワークのプロパティのセキュリティ タブを押下します。

    Windows 10 - ワイヤレス ネットワークのプロパティ

  • セキュリティ タブ内の ネットワークの認証方法の選択Microsoft: EAP-TTLS を選択します。

Windows 10 - ネットワークの認証方法の選択

  • セキュリティ タブ内の Microsoft: EAP-TTLS設定 ボタンを押下します。

    Windows 10 - Microsoft: EAP-TTLS の設定

  • これらのサーバーに接続US Shardの *.us.onelogin.com を指定します。EU Shardの場合は *.eu.onelogin.com に読み替えてください。

    Windows 10 - これらのサーバーに接続

  • 信頼されたルート証明機関DigiCert Global Root CA にチェックを入れます。編集が完了したら OK ボタンを押下して設定を保存します。

    Windows 10 - 信頼されたルート証明機関

  • セキュリティ タブ内の 詳細設定 ボタンを押下します。

    Windows 10 - セキュリティ タブの詳細設定

  • 802.1X の設定 タブで 認証モードを指定する にチェックを入れて、ドロップダウン リストで ユーザー認証 を選択します。編集が完了したら OK ボタンを押下して設定を保存します。

    Windows 10 - 認証モード

SSIDへの接続

  • 対象のSSIDへ接続します。

    Windows 10 - SSIDへの接続

  • Windows セキュリティ のポップアップが表示されるため、事前にOneLoginで設定していたUserの Email とPasswordを入力します。OneLoginの Credentials 設定のマッピングを変更している場合は適宜読み替えてください。

    Windows 10 - 資格情報の入力

  • 証明書の詳しい内容の表示 を押下して、OneLoginの証明書が表示されるのを確認してから 接続 ボタンを押下します。
    備考: 下記の画面キャプチャでは既に 証明書の詳しい内容の表示 を押下したため、 証明書の詳細の非表示 となっています。

    Windows 10 - 証明書の確認と接続

  • 接続が完了したら設定が完了です。

    Windows 10 - WPA2 Enterprise接続完了状態

関連ドキュメント

documentation.meraki.com

documentation.meraki.com

【サポート対象外】ThousandEyes Virtual Appliance (TE VA)での sudo コマンドの制限緩和

本記事の内容はサポート対象外になる内容を含んでいます。

ThousandEyes Virtual Appliance (TE VA)では sudo コマンドを介して実行可能なLinuxコマンドが制限されています。 ですが、te-va-unlock パッケージを導入すると Unlocked のステータスとなって サポート対象外にはなりますが sudo コマンドの制限が緩和されます。

強調しますが、sudo コマンドの制限緩和はサポート対象外になるため注意してください。

docs.thousandeyes.com

NOTE: Changes which require unlocking the Virtual Appliance will not be supported by ThousandEyes. A Virtual Appliance which becomes inaccessible, unstable or otherwise unusable after such changes will require reinstallation of the Virtual Appliance.

サポート対象外になるのを踏まえると、現実的な活用方法としては検証目的でThousandEyes Virtual Applianceの内部的な挙動を追って確かめるような用途になると想定されます。

設定方法

設定方法はThousandEyes Virtual Appliance (TE VA)に Username: thousandeyesSSH接続して、te-va-unlock パッケージの導入します。

sudo apt-get update
sudo apt-get install te-va-unlock

SSH接続は公開鍵認証となって一手間かかるため、未設定の方は下記の記事を参考にしてください。

myhomenwlab.hatenablog.com

Unlocked 状態の確認

te-va-unlock パッケージを導入すると、Virtual ApplianceのWeb UI上に Unlocked のロゴが表示されるようになります。

Virtual ApplianceのWeb UI上の Unlocked 表示

ThousandEyes Portal上では Installation Type の括弧書きの中に Unlocked と表示されます。

ThousandEyes Portal上の Unlocked 表示

補足情報: te-va-unlock パッケージの中身

te-va-unlock パッケージをインストールすると、sudo コマンドの設定ファイルである /etc/sudoers.d/te-va-sudoers が展開されます。

thousandeyes@thousandeyes-va:~$ dpkg -L te-va-unlock
/.
/etc
/etc/sudoers.d
/tmp
/tmp/.te-va-sudoers-unlocked
thousandeyes@thousandeyes-va:~$

設定ファイルには Username: thousandeyes がパスワード入力なしで sudo コマンドを実行可能となる設定が施されています。

thousandeyes@thousandeyes-va:~$ sudo cat /etc/sudoers.d/te-va-sudoers
thousandeyes ALL=(ALL) NOPASSWD: ALL
thousandeyes@thousandeyes-va:~$

なお、/etc/sudoers.d/te-va-sudoers ファイル自体は元々存在しており、te-va-unlock パッケージの導入に際して上書きされてました。(ファイルのタイム スタンプがOVAデプロイ日時より過去に遡っていました。)

thousandeyes@thousandeyes-va:~$ ls -l /etc/sudoers.d/
total 12
-r--r----- 1 root root  958 Jan 18  2018 README
-r--r----- 1 root root 2081 Dec  7 18:03 te-va-sudoers
-r--r----- 1 root root   83 Dec  8 22:25 tools
thousandeyes@thousandeyes-va:~$
thousandeyes@thousandeyes-va:~$ sudo apt-get install te-va-unlock
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  te-va-unlock
0 upgraded, 1 newly installed, 0 to remove and 7 not upgraded.
Need to get 952 B of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 https://apt.thousandeyes.com bionic/main amd64 te-va-unlock all 0.182-1~bionic [952 B]
Fetched 952 B in 1s (1,357 B/s)
Selecting previously unselected package te-va-unlock.
(Reading database ... 45765 files and directories currently installed.)
Preparing to unpack .../te-va-unlock_0.182-1~bionic_all.deb ...
Unpacking te-va-unlock (0.182-1~bionic) ...
Setting up te-va-unlock (0.182-1~bionic) ...
thousandeyes@thousandeyes-va:~$
thousandeyes@thousandeyes-va:~$ ls -l /etc/sudoers.d/
total 12
-r--r----- 1 root root 958 Jan 18  2018 README
-r--r----- 1 root root  37 Apr  7  2020 te-va-sudoers
-r--r----- 1 root root  83 Dec  8 22:25 tools
thousandeyes@thousandeyes-va:~$

更にOVAファイルを展開して元々 (上書き前のオリジナル)/etc/sudoers.d/te-va-sudoers ファイルの情報を追うと、下記のようになっておりました。

# All the shutdown commands (consider enabling in the future)
# Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/reboot, /sbin/halt

# Service start/stop/restart commands for te- services
Cmnd_Alias TE_VA_SERVICE_CMDS = /bin/systemctl start te-va, /bin/systemctl stop te-va, /bin/systemctl restart te-va, /bin/systemctl status te-va
Cmnd_Alias TE_AGENT_SERVICE_CMDS = /bin/systemctl start te-agent, /bin/systemctl stop te-agent, /bin/systemctl restart te-agent, /bin/systemctl status te-agent
Cmnd_Alias TE_BROWSERBOT_SERVICE_CMDS = /bin/systemctl start te-browserbot, /bin/systemctl stop te-browserbot, /bin/systemctl restart te-browserbot, /bin/systemctl status te-browserbot
Cmnd_Alias TE_OS_SERVICE_CMDS = /sbin/reboot, sudoedit /etc/hosts, /usr/bin/dig, /usr/bin/lsof
Cmnd_Alias TE_SERVICE_CMDS = TE_VA_SERVICE_CMDS, TE_AGENT_SERVICE_CMDS, \
                             TE_BROWSERBOT_SERVICE_CMDS, TE_OS_SERVICE_CMDS

# te-agent-utils
# /usr/local/bin should be removed once the packages are updated to /usr/bin
Cmnd_Alias TE_AGENT_UTILS_CMDS = /usr/bin/te-*, \
                                 /usr/local/bin/te-*, \
                                 /usr/local/sbin/te-*

# apt-get install commands for te- services
Cmnd_Alias APT_GET_INSTALL_CMDS = /usr/bin/apt-get update, \
                                  /usr/bin/apt-get install te-agent, \
                                  /usr/bin/apt-get install te-browserbot, \
                                  /usr/bin/apt-get install te-va, \
                                  /usr/bin/apt-get install te-pa, \
                                  /usr/bin/apt-get install te-va-unlock, \
                                  /usr/bin/apt-get install te-intl-fonts, \
                                  /usr/bin/apt-get install te-agent-utils, \
                                  /usr/bin/apt-get install ntpdate, \
                                  /usr/bin/apt-cache

thousandeyes ALL=(ALL) NOPASSWD: TE_SERVICE_CMDS, \
                                 APT_GET_INSTALL_CMDS, \
                                 TE_AGENT_UTILS_CMDS

以上の情報より、元々の設定ファイルではThousandEyesの運用に必要なコマンドに絞られており、パッケージの導入を契機にして制限緩和用の設定情報で上書きしたのが分かります。

ThousandEyes Virtual Appliance (TE VA)へのSSH接続

ThousandEyes Virtual Appliance (TE VA)のSSH接続はパスワード認証には対応しておらず、事前にWeb UIから公開鍵の登録が必要になります。

ThousandEyes Virtual Appliance (TE VA)へのSSH接続

ログイン情報の整理

ThousandEyes Virtual ApplianceではWeb UIとSSHでログイン情報が異なります。

接続方式 Username Password 備考
Web UI admin welcome デフォルト値を記載しています。
SSH thousandeyes 公開鍵認証です。

Web UIにログインしていた時の癖で、SSH接続でもUsernameに admin を指定しないように注意してください。

設定方法

  • 予めSSH接続に用いる鍵 (秘密鍵と公開鍵)を用意しておきます。ターミナル ソフトのTerratermやPuTTYに内蔵されてるSSH鍵生成ツールや、ssh-keygen コマンドなどを用いて適宜作成してください。

    例: TeratermでのSSH鍵の生成

  • ThousandEyes Virtual ApplianceのWeb UIからメニュー: Appliance Access に移動して、SSH Access セクションの Add new SSH keySSH公開鍵を貼り付けて Add Key ボタンを押下します。

    公開鍵の登録

  • Authorized SSH keysSSHの公開鍵が登録されたのを確認します。

    公開鍵の登録状況の確認

  • SSHクライアント側で秘密鍵を指定した上でThousandEyes Virtual Applianceに対してSSH接続ができるのを確認します。
    SSH接続時のUsernameは thousandeyes になります。

    例: SSH接続

関連ドキュメント

docs.thousandeyes.com

docs.thousandeyes.com

Merakiアカウントに紐付くOrganization数の推奨値は2,000以下

1つのMerakiのアカウントに対してOrganizationを複数紐付けると、MSP Portalを介してOrganizationの移動が可能になります。 そのOrganization数の紐付け数には上限はありませんが、Meraki Dashboardのレスポンス低下を招く可能性があるため推奨値は2,000以下になっております。

2022年11月頃にサポートに問い合わせて確認した情報です。

Merakiアカウントに紐付くOrganization数

注意点

「推奨値は2,000以下」だからと言って、1アカウント毎に丁度2,000分のOrganizationを紐付けるのが推奨されてるわけではありません。 推奨値の範囲内であってもOrganization数が多いとレスポンスは低下します。 そのため、マルチ テナントな設計の場合はレスポンスが想定範囲になるように適切な値を事前検証などで見極めてください。

検証時の情報

筆者がOrganization数に対するレスポンス時間を検証した際の情報を参考程度に掲載します。

Organization移動時のレスポンス時間

レスポンス時間の測定方法

測定にはChromeの開発者ツールを用いました。 Webページの非同期処理があるようでFinish時間ではロードが完全に収まるタイミングを断定できなかったため、Load時間を指標にしています。 そのため、ページが完全にロードされるまでのレスポンス時間ではない点に留意してください。しかしながら、Organization数が増えるにつれてLoad時間が長くなっていくのは分かると思います。

ページが完全にロードされるFinishの時間であれば、Organization数が4,000だと感覚的に数分単位の時間がかかるように見受けられました。 Organizationを10,000 (1万)まで作って試しましたが、数が多くなるにつれてページのロードに失敗したり、Server errorでMeraki Dashboardへのアクセス自体が困難になりました。 特にMSP PortalでOrganization選択せずに放置した際は認証タイムアウトになる挙動であったため、Meraki Dashboardへのログイン時からMSP PortalでのOrganization選択までの間にServer errorが発生すると延々と再ログインが必要になる可能性があります。

ページのロードに失敗: An error occurred loading portions of your organizations

Meraki Dashboardへのアクセス困難: Server error

補足ですが、本検証を行うにあたりMeraki Dashboard APIを用いて大量のOrganizationの作成と削除を実行しました。 その際、削除対象のOrganization数に比例して大量の削除通知がメールで届いたので、検証時はメール ボックスが溢れないように注意してください。

Organizationの削除通知メール

Meraki vMXの認証トークンをPython Libraryで取得する

Meraki vMXの認証トークン (Authentication Token)は、Meraki向けのPython Libraryを用いて取得が可能です。

具体的には、Meraki Dashboard API Python Libraryにて

def createDeviceApplianceVmxAuthenticationToken(self, serial: str):

の関数を用いて取得ができます。

github.com

当該関数は appliance.py に定義されています。

https://github.com/meraki/dashboard-api-python/blob/master/meraki/api/appliance.py

サンプル スクリプト

Meraki vMXの認証トークンを発行するサンプル スクリプトを掲載します。第1引数にMeraki vMXのSerial Numberを渡します。 参照系ではなく設定系の操作であるため、対象デバイスを誤らないように注意してください。

cat > ./create_meraki_vmx_authtoken.py << EOF
#!/usr/bin/env python3

import sys
import meraki

if len(sys.argv) != 2:
    print('The first argument is a Meraki vMX Serial Number.')
    exit(1)

dashboard = meraki.DashboardAPI(print_console=False, output_log=False)

res = dashboard.appliance.createDeviceApplianceVmxAuthenticationToken(serial=sys.argv[1])

print('token: ' + res['token'])

EOF

サンプル スクリプトの内容がファイルに書き込めているか確認します。

cat ./create_meraki_vmx_authtoken.py

サンプル スクリプトに実行権限を与えます。

chmod u+x ./create_meraki_vmx_authtoken.py

サンプル スクリプトの実行にあたってMeraki Dashboard API Keyを変数に指定します。YOUR_API_KEY の部分は自身のAPI Keyに書き換えてください。

export MERAKI_DASHBOARD_API_KEY='YOUR_API_KEY'

実行時のサンプル出力は下記のようになります。

$ ./create_meraki_vmx_authtoken.py XXXX-XXXX-XXXX
token: 3c52xxxx80d7xxxx8193xxxx682dxxxx/bfaxxxxdff9xxxxd6b7xxxx0b68xxxx46c0xxxx5dbcxxxx728exxxxdb6exxxxa496xxxx00c6xxxx9f98xxxx4173xxxxcc8fxxxx1a81xxxx3be1xxxxc660xxxx5/b0xxxx060cxxxx5411xxxx924exxxxac3dxxxx4dc4xxxx95c3xxxx49e7xxxx1e
$ 

関連記事

Meraki向けのPython開発環境の準備は下記を参考にしてください。

myhomenwlab.hatenablog.com

Meraki向けのPythonライブラリではなく、Meraki Dashboard APIREST APIを直接操作する方法は下記を参考にしてください。

myhomenwlab.hatenablog.com