
CloudMapperは、Amazon Web Services(AWS)環境の分析を支援します。
注意 ネットワーク可視化機能(prepareコマンド)はメンテナンスされなくなりました。
CloudMapperは、Amazon Web Services(AWS)環境の分析を支援します。 元々の目的は、ネットワーク図を生成してブラウザに表示することでした(この機能はメンテナンスされなくなりました)。 現在は、セキュリティ問題の監査を含む、より多くの機能を備えています。
audit: 潜在的な設定ミスをチェックします。collect: アカウントに関するメタデータを収集します。詳細はこちら。find_admins: IAMポリシーを調べて、管理者ユーザーやロール、特定の権限を持つプリンシパルを特定します。詳細はこちら。find_unused: アカウント内の未使用リソースを探します。未使用のセキュリティグループ、Elastic IP、ネットワークインターフェース、ボリューム、Elastic Load Balancerを見つけます。prepare/webserver: ネットワーク可視化を参照public: 公開ホストとポート範囲を検出します。詳細はこちら。sg_ips: セキュリティグループで信頼されているCIDRのgeoip情報を取得します。詳細はこちら。stats: アカウントのリソース数を表示します。詳細はこちら。weboftrust: Web of Trustを表示します。詳細はこちら。report: HTMLレポートを生成します。アカウントのサマリーと監査結果を含みます。詳細はこちら。iam_report: アカウントのIAM情報のHTMLレポートを生成します。詳細はこちら。独自のプライベートコマンドを追加したい場合は、private_commandsディレクトリを作成して追加できます。
|
必要なもの:
pip, virtualenvjq (https://stedolan.github.io/jq/) とライブラリpyjq (https://github.com/doloopwhile/pyjq) が必要です。これらには後述する追加のツールのインストールが必要です。macOSの場合:
# リポジトリをクローン
git clone https://github.com/duo-labs/cloudmapper.git
# pyjqの前提条件をインストール
brew install autoconf automake awscli freetype jq libtool python3
cd cloudmapper/
python3 -m venv ./venv && source venv/bin/activate
pip install --prefer-binary -r requirements.txt
Linuxの場合:
# リポジトリをクローン
git clone https://github.com/duo-labs/cloudmapper.git
# (AWS Linux, Centos, Fedora, RedHat など):
# sudo yum install autoconf automake libtool python3-devel.x86_64 python3-tkinter python-pip jq awscli
# (Debian, Ubuntu など):
# 追加で "build-essential" が必要な場合があります
sudo apt-get install autoconf automake libtool python3.7-dev python3-tk jq awscli
cd cloudmapper/
python3 -m venv ./venv && source venv/bin/activate
pip install -r requirements.txt
小さなデモデータが提供されています。これにより、デモサイト https://duo-labs.github.io/cloudmapper/ と同じ環境が表示されます。
# ネットワークマップ用データを生成
python cloudmapper.py prepare --config config.json.demo --account demo
# レポートを生成
python cloudmapper.py report --config config.json.demo --account demo
python cloudmapper.py webserver
これにより、http://127.0.0.1:8000/ でローカルWebサーバーが起動します。 そのリンクからネットワークマップを表示するか、http://127.0.0.1:8000/account-data/report.html でレポートを表示します。
config.json.demo を config.json にコピーし、アカウントIDと名前(例:"prod")を編集し、外部CIDR名も追加します。CIDRはIP範囲であり、1.2.3.4/32 は「IP 1.2.3.4のみ」を意味します。
このステップではCLIを使用して describe および list 呼び出しを行い、アカウント名で指定された account-data フォルダにJSONを記録します。
CLIで使用できるAWS認証情報が必要であり、収集する各種メタデータに対する読み取り権限が必要です。 aws-vault の使用をお勧めします。 CloudMapperはIAM情報を収集するため、MFAを使用する必要があります。 AWSへのアクセスが必要なのは collect ステップのみです。
次の権限が必要です(メタデータへのさまざまな読み取りアクセスを許可します):
arn:aws:iam::aws:policy/SecurityAuditarn:aws:iam::aws:policy/job-function/ViewOnlyAccessデータの収集は次のように行います:
python cloudmapper.py collect --account my_account
ここから、例えば次のようなさまざまなコマンドを試してください:
python cloudmapper.py report --account my_account
python cloudmapper.py webserver
その後、ブラウザで127.0.0.1:8000/account-data/report.html にアクセスしてレポートを表示します。
config.json を直接変更する代わりに、必要に応じてデータを設定するコマンドがあります:
python cloudmapper.py configure {add-account|remove-account} --config-file CONFIG_FILE --name NAME --id ID [--default DEFAULT]
python cloudmapper.py configure {add-cidr|remove-cidr} --config-file CONFIG_FILE --cidr CIDR --name NAME
これにより、環境で使用しているAWSアカウントと既知のCIDR IPを定義できます。
AWS Organizations を使用している場合は、次のコマンドで組織メンバーアカウントを自動的に config.json に追加することもできます:
python cloudmapper.py configure discover-organization-accounts
このコマンドを実行する前に、AWS CLIに認証され、organization:ListAccounts 権限を持っている必要があります。
一部の監査項目に関心がない場合があります。チェック自体を完全に無視するか、特定のリソースだけを無視したい場合があります。 config/audit_config_override.yaml.example を config/audit_config_override.yaml にコピーし、ファイル内のコメントに従って編集してください。
作成されるDockerコンテナは対話的に使用することを目的としています。
docker build -t cloudmapper .
CloudMapperはIAM呼び出しを行う必要があり、収集時にセッション認証情報を使用できないため、データを収集する場合はaws-vaultサーバーを使用できません。ロール認証情報を直接渡すか、コンテナ内で手動でAWS認証情報を設定する必要があります。以下のコードは、コンテナ内で生の認証情報を公開します。
(
export $(aws-vault exec YOUR_PROFILE --no-session -- env | grep ^AWS | xargs) && \
docker run -ti \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-p 8000:8000 \
cloudmapper /bin/bash
)
これによりコンテナ内にドロップされます。 aws sts get-caller-identity を実行して設定が正しいことを確認してください。 CloudMapperのデモデータはDockerコンテナにコピーされないため、システムからライブデータを収集する必要があります。 Dockerのデフォルト設定では、コンテナに利用可能なメモリが制限されている場合があることに注意してください。例えば、Mac OSではデフォルトが2GBであり、中規模のアカウントでレポートを生成するには十分でない場合があります。
python cloudmapper.py configure add-account --config-file config.json --name YOUR_ACCOUNT --id YOUR_ACCOUNT_NUMBER
python cloudmapper.py collect --account YOUR_ACCOUNT
python cloudmapper.py report --account YOUR_ACCOUNT
python cloudmapper.py prepare --account YOUR_ACCOUNT
python cloudmapper.py webserver --public
その後、http://127.0.0.1:8000/account-data/report.html にアクセスしてレポートを表示できるはずです。
Fargate経由でCloudMapperをデプロイし、夜間に実行して監査結果をSlackチャンネルにアラートとして送信し、レポートをS3に保存するCDKアプリケーションについては、こちらで説明しています。
ネットワーク図については、https://github.com/lyft/cartography または https://github.com/anaynayak/aws-security-viz を試すことをお勧めします。
監査やその他のAWSセキュリティツールについては、https://github.com/toniblyx/my-arsenal-of-aws-security-tools を参照してください。
|
|
|
|
|