AWSのセキュリティ系サービスをザクっとまとめた

こんにちは。

「AWSのセキュリティサービス、たくさんあってよーわからんわ」ってなることありませんか？

先日AWS認定セキュリティの学習をしていた時に、簡単にまとまっているものがあると嬉しいなあと思ったので、ザクっとまとめました。これで概要を掴んだ上で深掘りしていただく、ような使い方をしていただけると嬉しいです。

## ■AWS Config

**AWSアカウントが持つリソース、およびソフトウェアの設定状況などを履歴として管理、および変更を監視することができるサービス**

AWS Configの設定を有効化するだけで、いつどのリソースが作成されて、どのように変更されたか、監視することができる。また、変更をトリガとしてSNS経由で任意の宛先に通知する機能を有する。
上記に加え、SystemsManagerとの統合によってEC2インスタンスのソフトウェアの状態を管理することもできる。

## ■AWS SystemsManager

**Amazon EC2 インスタンス、オンプレミスサーバーと仮想マシンや他の AWS リソースを大規模に設定および管理する機能の集合体となるサービス**

Run Command,セッションマネージャーによるSSHからの脱却、PatchMagagerによるパッチ適用状況の取得・管理と適用の計画・実行、パラメータストアによる共通的パラメータ(DB接続状況など)の管理、などを実現できる。
後述のAmazon Inspectorと組み合わせて脆弱性を検知し、PatchManagerのパッチ適用ポリシーを更新し、全体に対して反映する、といった運用フローなどが考えられる。

## ■AWS CloudTrail

**AWSリソースへのManagementConsoleによる操作やAPIリクエストの証跡を保存・管理するサービス**

管理イベント(EC2の作成、変更、削除など)とデータイベント(S3へのGetObject)の双方を記録することができる。
また、CloudTrailの設定によって、Amazon S3、Amazon CloudWatch Logs、Amazon Amazon CloudWatch Events に CloudTrail イベントを配信できる。
これにより、セキュリティオートメーションや管理の効率性を向上することができる。
不正な利用などを検知・対処するため、AWSアカウントの全てのリージョンで有効化することが推奨されている。

## ■AWS Key Management System

**暗号化するための鍵を管理するサービス**

KMSにはマスターキー・データキーという概念が存在する。
マスターキーはデータキーを暗号化するもの、データキーはデータそのものを暗号化するものである。 
利用の流れとしては、

1. **マスターキーの作成(CreateMasterKey)**  
マスターキーがAWS側に作成される
1. **データキーの生成(GenerateDataKey)**  
生のデータキーと暗号化されたデータキーがユーザに返却される
1. **データの暗号化＠ローカル**  
2で取得した生のデータキーを使ってデータを暗号化する、  暗号化後、生のデータキーは速やかに廃棄する
暗号化されたデータ・暗号化されたデータキーの双方を大事に保管する
1. **データキーの復号**  
暗号化されたデータキーとマスターキーのIDを利用して、AWSにデータキーの復号化を要請する
1. **データの復号＠ローカル**  
4で取得したデータキーを使って暗号化されたデータを復号する

ポイントは、"生"のデータキーは必要なタイミングのみ保持する仕組みという点である。もし暗号化データや暗号化データキーが流出しても、データそのものを見ることができない仕組みになっている。
また、マスターキーの運用については、定期的にローテーションできたり、ユーザ所有の鍵をインポートできたりする。ユーザ所有の鍵をインポートする際は、KMSのエイリアスを利用することでアプリケーションへの影響を低減することができる。

## ■Amazon Inspector

**Amazon EC2内の脆弱性を検出して通知するサービス**  

InspectorエージェントをEC2にインストールすることで、インターネットへの公開状況, CVEへの対応状況, CISベンチマークによる評価, 不適切なLISTENポート, Rootプロセスの状況など、EC2のホストとしてのセキュリティ対策状態を評価できる。
0.15~0.30USD程度のコストで1度診断することができるため、ASG用のAMI作成フローに組み込むなどの運用が良さそう。
なお、L7レイヤでの脆弱性を検知/遮断するものではないので、そういった場合はAWS WAFやその他の3rd Partyソリューションを組み合わせて利用する必要がある。  


## ■Amazon GuardDuty

**VPCフローログおよびAWS CloudTrailイベントログから脅威を検出して通知するるサービス**

ManagementConsoleもしくはCLIから設定を有効化することで使用を開始できる。  
例えば不正なAPIコールの発生やSSH用のポートがInternetに公開されていることの検知などの脆弱性を、複数のアカウントにわたって自動的に監視することができる。
GuardDutyが検知した脆弱性は5分に1度CloudwatchEventに送信されるため、特定のメールアドレスに通知したり、Lambdaで実装した独自機能で処理することもできる。(攻撃者のIPアドレスをAWS WAFのブラックリストに追加するなど)

## ■AWS Organizations

**複数のAWSアカウントを横断的に管理するためのサービス**

サービスコントロールポリシー(SCP)と呼ばれる機能で、ユーザが所属するグループを作成し、そのグループが操作可能なサービスを制限することができる。  

利用の流れとしては、

1. OUと呼ばれる組織ごとの単位を作成
1. IAMユーザをOUに参画
1. OUが操作可能なサービス・アクションを指定

となる。
例えば、ルート以外のOUにおいてCloudTrail,AWS Organizations,AWS Configの操作を禁じる、などのポリシーが想定される。
ルートに適用されるSCPは、その権限を子となるOUにカスケードされる。子OUは、親ルートから下位のアクセス権限と、OUにアタッチされているSCPの数学的な共通部分(AND)を取得し、その結果が子OUに適用されるポリシーとなる。

サービスコントロールポリシーの利用によって、組織のコンプライアンスに準ずるセキュリティルールを効率的に管理することができる。

## ■Amazon Macie

**機密データを検出、分類、保護するための機械学習によるセキュリティサービス**

S3に保持されているデータに、個人情報や知的財産などの機密データが含まれないか検出・レポートできる。具体的には、FIPS 199 などの業界標準に基づいて"フルネーム"、"郵送先住所"、"E メールアドレス"、"クレジットカード番号"などが存在することを検出することができる。Amazon Macieでは、Macie アラートに変更が行われた際、CloudWatch イベント に基づいて通知が送信される。
Amazon Macieの利用により、セキュリティコンプライアンスへの積極的な対応と、データセキュリティに対する予防的統制を実現できる。