19
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# Terraform で Cisco Meraki 管理者を自動化:Infrastructure as Code 実践ガイド

Last updated at Posted at 2025-12-05

はじめに

Cisco Meraki のクラウド管理型ネットワーク基盤が拡大するにつれ、ダッシュボード管理者の手動管理はますます複雑化し、ミスが発生しやすくなっています。本記事では、HashiCorp Terraform を活用した Infrastructure as Code(IaC)による Meraki 管理者ライフサイクル管理の自動化ソリューションを紹介します。

課題:手動管理の限界

大規模な Meraki 環境を運用する組織では、以下のような課題に直面しています。

運用面の課題

  • 複数組織にまたがる管理者アカウントの手動作成
  • 権限管理の煩雑さと標準化の欠如
  • オンボーディング・オフボーディング手順の不統一

セキュリティ面の課題

  • 二要素認証(2FA)の導入状況を把握しづらい
  • API キーを持つ休眠アカウントがセキュリティリスクに
  • 管理者のアクティビティパターンの可視化が困難

コンプライアンス面の課題

  • 管理者変更の監査証跡が不十分
  • コンプライアンスレポートの手動作成
  • 組織間でのポリシー適用の不整合

ソリューション概要

本ソリューションは、以下の 4 つの原則に基づいて設計されています。

  1. 宣言的な構成管理 - CSV ファイルで望ましい状態を定義し、Terraform が自動的に実際の状態と同期
  2. セキュリティファースト - 2FA ステータスの継続的監視、休眠 API キーの検出、リスクスコアリング
  3. 拡張性 - Terraform の external data source と Python スクリプトによる柔軟なカスタマイズ
  4. 運用の卓越性 - Git 連携、CI/CD パイプライン対応、包括的なログ・レポート機能

アーキテクチャ

CSV 管理者データ
      ↓
Terraform による変更計画・適用
      ↓
Meraki Dashboard API への反映
      ↓
Python スクリプトによるセキュリティ指標収集
      ↓
リスク評価アルゴリズムによる分析
      ↓
Web ダッシュボードでの可視化

実装方法

1. プロバイダー設定

terraform {
  required_version = ">= 1.0"
  required_providers {
    meraki = {
      source  = "CiscoDevNet/meraki"
      version = ">= 0.2.0"
    }
  }
}

provider "meraki" {
  # API キーは環境変数 MERAKI_API_KEY から取得(推奨)
}

2. CSV による管理者定義

管理者情報を CSV ファイルで一元管理します。

email,permission_level,organization_id
john.admin@company.com,full,123456
jane.readonly@company.com,read-only,123456
security.team@company.com,full,654321

3. Terraform での CSV 処理

locals {
  # CSV ファイルの読み込みとパース
  admins_csv_content = file(var.admins_csv_file)
  admins_raw = csvdecode(local.admins_csv_content)
  
  # 効率的な処理のためマップに変換
  admins_map = {
    for admin in local.admins_raw : admin.email => {
      email            = admin.email
      permission_level = admin.permission_level
      organization_id  = admin.organization_id
    }
  }
}

# CSV データから管理者リソースを作成
resource "meraki_organization_admin" "admins" {
  for_each = local.admins_map

  organization_id = each.value.organization_id
  email           = each.value.email
  name            = split("@", each.value.email)[0]
  org_access      = each.value.permission_level

  lifecycle {
    create_before_destroy = true
  }
}

4. External Data Source によるセキュリティ監視

CiscoDevNet/meraki プロバイダーでは取得できない 2FA ステータスなどのセキュリティ指標を、Python スクリプトと external data source で取得します。

data "external" "admin_2fa_status" {
  for_each = local.admins_map

  program = ["python3", "${path.module}/scripts/check_2fa_status.py"]

  query = {
    api_key     = var.meraki_api_key
    admin_email = each.value.email
    org_id      = each.value.organization_id
  }

  depends_on = [meraki_organization_admin.admins]
}

5. リスク評価アルゴリズム

以下の条件でリスク判定を行います。

2FA 状態 API キー 利用状況 リスクレベル 対応
❌ 無効 任意 任意 🔴 高 即座に 2FA を有効化
✅ 有効 ❌ なし - 🟢 低 対応不要
✅ 有効 ✅ あり 未使用 🔴 高 API キーの必要性を確認
✅ 有効 ✅ あり 30日以上未使用 🔴 高 アクセス権限を見直し
✅ 有効 ✅ あり 30日以内に使用 🟢 低 継続監視

導入効果

本ソリューションの導入により、以下の効果が期待できます。

  • 管理工数の大幅削減 - 手動での管理者プロビジョニング作業を自動化
  • セキュリティ強化 - 2FA 準拠率の向上を短期間で達成可能
  • 監査対応時間の短縮 - コンプライアンスレポートの自動生成により対応工数を削減
  • インシデント削減 - 休眠アカウント検出によりセキュリティリスクを低減

ベストプラクティス

API キー管理

# 環境変数での設定(推奨)
export MERAKI_API_KEY="your_api_key_here"
  • API キーをバージョン管理に含めない
  • シークレット管理システム(HashiCorp Vault、AWS Secrets Manager など)の活用
  • 定期的な API キーのローテーション(四半期ごとを推奨)

State 管理

  • リモートバックエンド(Terraform Cloud、S3、Azure Blob)の利用
  • State ロックの有効化
  • 定期的なバックアップ
  • State ファイルの手動編集は厳禁

変更管理

  • terraform apply 前に必ず terraform plan を実行
  • 特に削除操作は慎重に確認
  • 本番環境への適用前に検証環境でテスト

まとめ

今回、Terraform と Meraki Dashboard API を組み合わせたソリューションを開発しました。これにより、管理者のライフサイクル管理を自動化し、セキュリティコンプライアンスを継続的に監視できるようになります。CSV ベースのシンプルなアプローチを採用したことで、技術者以外のスタッフでも管理者情報を更新でき、Git によるバージョン管理で完全な監査証跡を維持できます。

完全なソースコードの入手方法

本ソリューションの完全なソースコード(Terraform 構成ファイル、Python スクリプト、Web ダッシュボードなど)を Cisco Code Exchange で公開しています。ぜひご活用ください。

🔗 Cisco Code Exchange - Meraki Admin Security Tool Terraform

リポジトリには以下を含めています:

  • main.tf - メインの Terraform 構成ファイル
  • variables.tf - 変数定義
  • outputs.tf - 出力定義
  • scripts/check_2fa_status.py - セキュリティ監視用 Python スクリプト
  • web_ui/ - セキュリティダッシュボード
  • admins.csv - サンプル管理者データ
  • 詳細なドキュメントとトラブルシューティングガイド

すぐに使い始められるよう、README に沿ってセットアップしてください。

ライセンス

本プロジェクトは MIT License の下で公開されています。

MIT License

Copyright (c) 2025 Udara Thenuwara

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

商用・非商用を問わず、自由にご利用いただけます。改変や再配布も可能です。

参考リソース


19
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?