ちょっと話題の記事

CloudMapperでネットワーク構成図を自動生成

2018.07.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

中山(順)です

皆さんは以下のようなことで悩んだことはないでしょうか?

  • ネットワーク構成図作るのめんどくさい
  • ネットワーク構成図をメンテナンスするのめんどくさい
  • ドキュメントのないAWS環境を引き継いでつらい

そんな場合、CloudMapperでネットワークを簡単に可視化できます。

CloudMapperとは

DUOのエンジニアにより開発されたツールで、OSSとしてGitHubより公開されています。

Introducing CloudMapper: An AWS Visualization Tool

duo-labs/cloudmapper

以下のように、VPCやSubnetのレイアウトやSecurity Groupによるアクセス許可を可視化できます。(README.mdより引用)

わたしは、ビズリーチのmassさんの記事でその存在をきちんと認識しました。 massさん、ありがとうございます!

AWSネットワーク構成図の手動更新が辛い?よろしい、ならばCloudMapperだ

CloudMapperでやってること

このツール自体がやっていることは主に以下の通りです。

  • AWS上のリソースの情報を取得
  • ブラウザ上で表示するためのコンテンツの生成
    • ブラウザ上で各種操作が可能(オブジェクトの配置を調整、拡大・縮小・スクリーンショットの取得、レイアウト情報のインポート・エクスポートなど)

IAMのポリシーをチェックできる機能やリソース数に関する統計情報を出力する機能もあるようですが、今回は割愛します。

やってみた

早速、インストールしてみたいと思います。

構成

CloudMapperはローカル環境にインストールして利用することも可能で、Webサーバー機能も内包しています。 今回はEC2にインストールしてみます。

  • OSはAmazon Linux 1(Amazon Linux 2がリリースされたのでバージョンを明示しています。以下、AL1と表記します。)
  • CloudMapperは構成情報の収集とコンテンツの生成でのみ利用
  • Webサーバーとしてnginxを利用
  • EC2には"SecurityAudit"のポリシーを付与したIAMロール(インスタンスプロファイル)を設定

Webサーバに対して任意のIPアドレス (0.0.0.0/0) からのアクセスを許可しないよう注意してください。

インストール

GitHubからソースをダウンロード

GitHubよりソースをダウンロードします。

sudo yum install git -y
git clone https://github.com/duo-labs/cloudmapper.git

前提条件となるパッケージをインストール

前提条件となるパッケージをインストールします。 READMEではawscliもインストールしていますが、AL1なので改めてインストールする必要はありません。 今回はインスタンスプロファイルを設定したEC2インスタンス上で動作させるため、認証情報を明示的に設定する必要はありません。

sudo yum install autoconf automake libtool python34-devel jq -y

cd cloudmapper/
sudo pip install -r requirements.txt

設定ファイルの作成

設定ファイルの生成を行います。 設定ファイル内では構成情報をスキャンする対象とするAWS IDの指定やCIDRに名称を設定できたりします。

cd cloudmapper/
    
AWS_ID=$(aws sts get-caller-identity \
    --query "Account" \
    --output text) \
    && echo ${AWS_ID}

python cloudmapper.py configure add-account --config-file config.json --name dev.io --id ${AWS_ID} --default DEFAULT

cat config.json
{
    "accounts": [
        {
            "default": false,
            "id": "XXXXXXXXXXXX",
            "name": "dev.io"
        }
    ],
    "cidrs": {}
}

構成情報の収集

AWSから構成情報を収集します。 収集した情報はaccount-dataディレクトリ内に保存されます。

python cloudmapper.py collect --config config.json --account dev.io

コンテンツの生成

ブラウザで表示するためのコンテンツを生成します。 コンテンツは、webディレクトリ内に生成されます。

表示の対象とするVPCやリージョンはオプションで指定可能ですので、適宜設定を行ってください。

Network visualizations

python cloudmapper.py prepare --config config.json --account dev.io

Webサーバーのインストール、コンテンツの配置

nginxをインストールして、コンテンツをWebサーバーのルートディレクトリに移動し、サービスを起動します。

【再掲】Webサーバに対して任意のIPアドレス (0.0.0.0/0) からのアクセスを許可しないよう注意してください。

sudo yum install nginx -y
sudo cp -r web/* /usr/share/nginx/html
sudo chkconfig nginx on
sudo service nginx start

動作確認

試しにAWS Quick Startより以下の環境をプロビジョニングしてみました。

Web Application Proxy and AD FS on the AWS Cloud: Quick Start Reference Deployment

Architecture

それを作図した結果がこちらです。

インスタンス間の矢印は、Security Groupでアクセスを許可されている場合に表示されます。 生成したネットワーク図は概ね想定したとおりになっていると思います。

オブジェクトのレイアウトは調整できるので、いい感じでお願いします。

まとめ

このように、簡単にネットワーク構成図を作成できました。 現場で設定を実施するエンジニアが現状を把握するために利用する分には十分すぎる機能を備えていると感じました。

本来であれば設計時や構成変更時にネットワーク図を作成・変更するべきですが、時間の問題でケアしきれていないことも多いでしょう。 こういったツールをうまく活用して、無理なく理想的な運用へ近づけていきたいものですね。

機会があれば、業務でどのように活用できたか書いていきたいと思います。(書けるものがあれば。)

現場からは以上です。