4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CloudMapper を使ってみた!!

Last updated at Posted at 2018-02-27

CloudMapper とは

Duo が提供している
Amazon Web Services(AWS)環境を可視化するための Duo Securityの新しいオープンソースツール です。
( https://duo.com/blog/introducing-cloudmapper-an-aws-visualization-tool )

必要なソースを可視化する実行する環境(本ページではMac)にインストールし
IAM ユーザー(参照権限だけ)を用いて情報を取得し、jsonで加工して、それをブラウザで表示するようです。画像としてエクスポートも出来るようです。

Guthub のREADME を見ながらやってみます!
https://github.com/duo-labs/cloudmapper

準備

[実行環境]

  • AWS
  • MacBook

[AWS]

可視化したいアカウントIDの確認:

  • Management Console から確認できるアカウントID(12桁)を控えておきます。

IAM ユーザーの準備:

  • アクセスキーが必要となるため、ユーザーを作成します。
    最小限はこれで良いそうです。これを見る限り、ec2、rds、ELBが対象のようで、かつ参照のみで良い模様。(≒ 扱えるサービス?)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": "*",
      "Action": [
        "ec2:DescribeRegions",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeVpcs",
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeVpcPeeringConnections",
        "ec2:DescribeInstances",
        "ec2:DescribeNetworkInterfaces",
        "rds:DescribeDBInstances",
        "elasticloadbalancing:DescribeLoadBalancers"
      ]
    }
  ]
}

[Mac]

Githubよりソースを取得するため、それが出来ないとエラーになります。
(たぶんアカウント取得と公開鍵の設定が必要)

  • ソースをローカルへコピーします。
  • brew で必要なモノをインストールしています。
$ git clone git@github.com:duo-labs/cloudmapper.git
  Cloning into 'cloudmapper'...
  remote: Counting objects: 779, done.
  remote: Compressing objects: 100% (30/30), done.
  remote: Total 779 (delta 19), reused 31 (delta 16), pack-reused 733
  Receiving objects: 100% (779/779), 3.78 MiB | 965.00 KiB/s, done.
  Resolving deltas: 100% (279/279), done.

$ brew install autoconf automake  libtool jq
  Warning: autoconf 2.69 is already installed
  Warning: automake 1.15.1 is already installed
  Warning: libtool 2.4.6_1 is already installed
  Warning: jq 1.5_2 is already installed

$ virtualenv venv
  New python executable in /Users/admin/venv/bin/python
  Installing setuptools, pip, wheel...done.

$ source venv/bin/activate

$ cd cloudmapper

$ pip install -r requirements.txt
  • 設定ファイルの修正

    config.json_demo をコピーして、自分のアカウントIDと名前(自由)に切り替える。
$ cp config.json.demo config.json
$ vi conig.json
{  "accounts":
    [
        {"id": "123456789012", "name": "demo", "default": true}
    ],
    "cidrs":
    {
        "1.1.1.1/32": {"name": "SF Office"},
        "2.2.2.2/28": {"name": "NY Office"}
    }
}
  • AWS CLI のConfig 設定

    先ほど作成したユーザーのアクセスキーやシークレットキーを設定する。
$ aws configure

実行

[情報保管のディレクトリ作成]

$ python cloudmapper.py gather --account-name "my_account"
* Getting region names
* Creating directory for each region name
* Getting VPC info
* Getting AZ info
* Getting Subnet info
* Getting EC2 info
* Getting RDS info
* Getting ELB info
* Getting Security Groups info
* Getting Network interface info
* Getting VPC Peering info
Complete
$ ls "my_accout"
ap-northeast-1		ap-southeast-2		eu-west-1		us-east-1
ap-northeast-2		ca-central-1		eu-west-2		us-east-2
ap-south-1		describe-regions.json	eu-west-3		us-west-1
ap-southeast-1		eu-central-1		sa-east-1		us-west-2

[データー収集]

$ python cloudmapper.py prepare --account "my_account"
Building data for account "my_accout" ("account_id")
- 0 nodes built in region ap-south-1
- 0 nodes built in region eu-west-3
- 0 nodes built in region eu-west-2
- 0 nodes built in region eu-west-1
- 0 nodes built in region ap-northeast-2
- 2 nodes built in region ap-northeast-1
- 0 nodes built in region sa-east-1
- 0 nodes built in region ca-central-1
- 0 nodes built in region ap-southeast-1
- 0 nodes built in region ap-southeast-2
- 0 nodes built in region eu-central-1
- 0 nodes built in region us-east-1
- 0 nodes built in region us-east-2
- 0 nodes built in region us-west-1
- 0 nodes built in region us-west-2
- 0 external CIDRs built
- 0 connections built
Complete

[ブラウザ表示用サービス起動]

$ python cloudmapper.py serve

Command Option

1.gather 編

$ python cloudmapper.py gather --help
usage: cloudmapper.py [-h] --account-name ACCOUNT_NAME

optional arguments:
  -h, --help            show this help message and exit
  --account-name ACCOUNT_NAME
                        Account to collect from

2.prepare 編

--collapse-by-tag COLLAPSE_BY_TAG は後ほど見てみます!

$ python cloudmapper.py prepare --help
usage: cloudmapper.py [-h] [--config CONFIG] [--account-name ACCOUNT_NAME]
                      [--regions REGIONS] [--internal-edges]
                      [--no-internal-edges] [--inter-rds-edges]
                      [--no-inter-rds-edges] [--read-replicas]
                      [--no-read-replicas] [--azs] [--no-azs]
                      [--collapse-by-tag COLLAPSE_BY_TAG]

optional arguments:
  -h, --help            show this help message and exit
  --config CONFIG       Config file name
  --account-name ACCOUNT_NAME
                        Account to collect from
  --regions REGIONS     Regions to restrict to (ex. us-east-1,us-west-2)
  --internal-edges      Show all connections (default)
  --no-internal-edges   Only show connections to external CIDRs
  --inter-rds-edges     Show connections between RDS instances
  --no-inter-rds-edges  Do not show connections between RDS instances
                        (default)
  --read-replicas       Show RDS read replicas (default)
  --no-read-replicas    Do not show RDS read replicas
  --azs                 Show availability zones (default)
  --no-azs              Do not show availability zones
  --collapse-by-tag COLLAPSE_BY_TAG
                        Collapse nodes with the same tag to a single node

3.serve 編

$ python cloudmapper.py serve --help
usage: cloudmapper.py [-h] [--port PORT] [--public]

optional arguments:
  -h, --help   show this help message and exit
  --port PORT  Port to listen on (default: 8000)
  --public     Allow connections from 0.0.0.0 as opposed to only localhost
               (default: False)

やってみたこと

1. Cloudformationのサンプル(LAMP Stack)

cloudmapper-lamp.png

2. 同一VPCに多数環境がある場合、何かで区別出来るか?

出来ない模様です。

3. 複数VPCがある場合はどう見えるか? 

普通に、別物として表示されます。

4. 停止しているインスタンスはどうなるか?

表示されない。

5. よくある構成イメージ

CloudMapper.png

6. VPC エンドポイント系は?

  • DynamoDB:表示されず
  • S3:表示されず

7. prepare コマンドのオプション(--collapse-by-tag COLLAPSE_BY_TAG)

タグのKEYを指定すると値が一緒のものは、統合される。
統合されたインスタンスは、Nameだけ表示されていて残念…

8. Inter-Region VPC Peering はどうだろう?

内部通信は表示されない。(web間でセキュリティグループは許可してる)
34.218.51.109/32 はOregon側のwebサーバのEIP。
region-before.png

ユースケース

VPCのネットワークレベル(おそらくENI)で情報収集して、表示しているように見れ受けられる。
なので、S3やLambdaなどの構成には適していない。

とはいえ、システムが大きくなると、こういった通信設定を可視化・管理するのは
困難なため、とても重宝されるのではないか?と個人的には思う。

まとめ

ざっくりみた・試してみたいサービス一覧

Service 対応 Memo
EC2
ECS
Lambda ×
EB
AutoScailing
S3 ×
RDS
RDS Aurora
DynamoDB ×
Redshift ×
ElastiCache ×
VPC
VPC(Endpoint) ×
VPC(Peering) ×
DirectConnect&VPN 試して良い環境が今ない…

実行環境

macOSの場合:

Linuxの場合:

Mac か Linux へのインストールが紹介されている。
Windowsユーザはどうすんだ?と思ったのですが、別に自分のPCから実行しなくて良い気がしました。
EC2で、Linux立ち上げで実行する方が、Userを発行せずに、Roleだけ済んでセキュアだと思う。

参考URL

4
6
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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?