Amazon Inspector で Network Assessment が出来るようになったのでやってみた！

# Amazon Inspector とは？

（ざっくり...）
EC2 に対してエージェントをインストールし、評価テンプレート（実行や診断内容など）を定義して
1回でも2回でも、診断が可能なサービスです。

- [公式サイト](https://aws.amazon.com/jp/inspector/)
- [FAQ（サービスを知るにはFAQは結構良いなと思います）](https://aws.amazon.com/jp/inspector/faqs/)

```
（抜粋）
Amazon Inspector は、AWS にデプロイされたアプリケーションのセキュリティとコンプライアンスを
向上させるための、自動化されたセキュリティ評価サービスです。
```

# Network Assessments とは？
（そのままですが...）ネットワーク診断のことです。

[公式サイト](https://aws.amazon.com/jp/about-aws/whats-new/2018/11/amazon-inspector-launches-agentless-network-assessments/)
[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_network-reachability.html#inspector_network-reachability-types-3)

```
（抜粋）
Amazon Inspector now offers agentless network assessments 
with the ‘Network Reachability’ rules package that identifies ports 
and services on your Amazon EC2 instances that are accessible from outside your VPC. 
With just a few clicks in the Inspector console, 
you can analyze the network configuration of your AWS account to identify the resources accessible from the internet or private networks like VPN, 
Direct Connect, or a peered VPC. 
```

## 出来ること / 出来ないこと
- エージェントなし（エージェント入れた方がより詳細に診断出来るけど）でも診断可能
- 外部から参照可能なネットワーク設定を診断
    - ELB配下で、プライベートなEC2でも診断可能
- Amazon EC2-Classic networksはサポート外
- 診断対象要素
    - Amazon EC2 instances
    - Application Load Balancers
    - Direct Connect
    - Elastic Load Balancers
    - Elastic Network Interfaces
    - Internet Gateways (IGWs)
    - Network Access Control Lists (ACLs)
    - Route Tables
    - Security Groups (SGs)
    - Subnets
    - Virtual Private Clouds (VPCs)
    - Virtual Private Gateways (VGWs)
    - VPC peering connections
- 診断種類は３種類（翻訳に自信がない...）
    - RecognizedPort：well-known port 的な代表的なポートの確認（エージェントなしでも可能）
    - UnrecognizedPortWithListener：上記以外でEC2でリッスンしているポート（エージェント必要）
    - NetworkExposure：該当のネットワーク周辺の情報

# 準備
## 構成
<img width="780" alt="inspector-20181112-01.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/13e7e75b-584b-341e-9f5b-f9be235ae2ae.png">

以下の環境で実行しました。

### リソースと役割

|リソース|サブネット<br>(外部接続)|Inspector<br>エージェント|セキュリティグループ|用途|インストール|
|:--|:--:|:--:|:--:|:--|:--|:--|
|ELB|public<br>（可）|なし|elb|Webサービスのフロントイメージ| |
|EC2|private<br>（不可）|なし|elbback|Webサーバイメージ|apache|
|EC2|public<br>（可）|あり|Inspector|エージェント**あり**|apache,mysql,dovecot|
|EC2|public<br>（可）|なし|Inspector|エージェント**なし**|apache,mysql,dovecot|
|EC2|private<br>（不可）|なし|Inspector|診断できない想定| |

### セキュリティグループ

|port|sg:elb|sg:elbback|sg:Inspector|
|:--:|:---:|:---:|:--:|
|TCP(21)| - | - |From(0.0.0.0/0)|
|TCP(22)|From(0.0.0.0/0)|From(sg:elb)|From(0.0.0.0/0)|
|TCP(80)|From(0.0.0.0/0)|From(sg:elb)|From(0.0.0.0/0)|
|TCP(110)| - | - |From(0.0.0.0/0)|
|TCP(443)| - |From(0.0.0.0/0)|From(0.0.0.0/0)|
|TCP(3306)| - | - |From(sg:Inspector)|
|All トラフィック| - |From(sg:elbback)| - |

# やってみた
### 01. 診断の種類

- 「Network Assessments」にチェックして、「Advanced setup」を押します

<img width="1428" alt="inspector-20181112-02.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/75d9c7ff-2024-078a-4aca-204a792545f0.png">

## 02. ターゲット作成

- 今回は、「All instances」で、全EC2を対象とします
- エージェントなしのEC2にも実行したいので、「Install Agents」を外します

<img width="1437" alt="inspector-20181112-03.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/41c3922f-db28-0dc5-89ab-6ba7dcf800c5.png">

## 03. テンプレート作成

- 名前: 任意のテンプレート名称
- ルールパッケージ: ここで新しく追加になった「Network Reachability-1.1」を選択
- 所要時間:台数によると思いますが、1時間（推奨）で良いです（念の為8時間で実行しましたが、あとで1時間で実行しても同じ結果だった） 
- Assessment Events: スケジュール実行は今回不要なので、チェックを外す 

<img width="1430" alt="inspector-20181112-04.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/fe0bef83-29a8-19dc-6054-2f1ced9a35a8.png">

## 04. プレビュー

- 確認して「作成」を押します

<img width="1431" alt="inspector-20181112-05.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/5eca7a87-49a6-c82e-b1c5-2e711577d36f.png">
<img width="1426" alt="inspector-20181112-06.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/629f9c31-5a12-939e-2b2b-faff7488c4f1.png">

## 05. 実行状況確認

- 「Status」が、 データ取得中になります（そのあと、分析になり、完了）

<img width="1432" alt="inspector-20181112-07.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/f812306a-1f4d-3bf2-297e-ff5d26868d29.png">

# 結果

## 01. 実行結果

- 「ステータス」：分析完了
- 「結果」：検知件数が表示される
<img width="1439" alt="inspector-20181113-01.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/7605622f-c0c2-6980-0b88-752917a9e48e.png">


## 02. 一覧

- High / Medium / Low / Informational で分類されます
![Inspector-2018113-02.png](https://qiita-image-store.s3.amazonaws.com/0/212868/fd0e7c09-f89c-e4d8-9a60-31fcce8f90d9.png)

## 03. 詳細

- 結果 / 重大度 / 説明 / 推奨事項 などが表示されます
- 以下は、Highのもので「TCP Port 21」がインターネットからアクセスできる状況にあると報告されています

<img width="1439" alt="inspector-20181113-02.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/976ceb88-f921-0d1d-ead6-3cb4a1bb97fc.png">


- 「Show Detail」を選択すると、JSON形式で、各データが表示されます

<img width="950" alt="inspector-20181113-03.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/50dc2c86-f145-22b1-f6f2-2974dc68dbf6.png">



# まとめ
## 01. 外部から接続不可なEC2は対象外

- いくらセキュリティグループが許可されていても接続できないので診断対象外
- 「結果」欄に、該当インスタンスはない
    - 同じAMIで、同じセキュリティグループなので、実行されていれば何も見つからないはずはない

![Inspector-2018113-07.png](https://qiita-image-store.s3.amazonaws.com/0/212868/c1ac0caf-ab0e-0211-4861-66988cd24d34.png)

## 02. 直接外部から接続不可でも、ELBを経由して外部から接続可能なEC2は診断可能

- 「結果」欄にて、該当インスタンスIDを検索してヒットした

![Inspector-2018113-08.png](https://qiita-image-store.s3.amazonaws.com/0/212868/81cd7283-cc20-feb1-7294-3ae23b02dba4.png)

- 検出内容は、あくまで外部から接続可能な内容のみ
    - 任意許可したTCP(443)は、EC2がプライベートサブネットのため、通信出来ない。 

|port|sg:elb|sg:elbback|
|:--:|:---:|:---:|
|TCP(22)|From(0.0.0.0/0)|From(sg:elb)|
|TCP(80)|From(0.0.0.0/0)|From(sg:elb)|
|TCP(443)| - |From(0.0.0.0/0)|
|All トラフィック| - |From(sg:elbback)|


## 03. エージェントありは、詳細な情報が表示

- 「UnrecogizedPortWithListener」として、POP3（110）を外部から接続可能なEC2、2つにインストールしたところ、エージェントありのEC2のみ検出した

<img width="1439" alt="inspector-20181113-04.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/b0abd16c-f715-118b-c6f3-a97645ab0844.png">
　

- エージェントありは、検出したポートで使用されているプロセスが記載されている

<img width="1439" alt="inspector-20181113-05.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/88145d21-340a-acbd-7f84-6197ab092f08.png">


## 04. セキュリティグループは許可しているが、サーバ上でプロセスを停止している場合...

- 検出対象から除外される（検出数が 14 --> 13 ）。停止した dovecot が消えている。

<img width="1439" alt="inspector-20181113-06.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/1e6c3978-54e4-5709-8160-16076d637546.png">

## 05. 全てのトラフィックを許可していると...

- 「RecognizedPort」は、プロセス死活に関係なく検出しているので、大量に検出される
   - こういう結果の時は、すぐにわかるはず... 
<img width="1439" alt="inspector-20181113-07.png" src="https://qiita-image-store.s3.amazonaws.com/0/212868/2761d339-7940-89cb-3b44-001d0d703d99.png">


---

比較的簡単に実行が可能で、エージェントなしでもある程度は確認することが可能です。
継続的に実施したり、リリース前に実施するなどするシーンで活躍するのではないかを思います。