AWS Innovate Online Conference 「試験対策セッション3：セキュアなアプリケーションおよびアーキテクチャを規定する」をまとめてみた

# 参考文献
[AWS Innovate Online Conference](https://aws.amazon.com/jp/about-aws/events/aws-innovate/) 
AWS 認定 - 試験対策 「ソリューションアーキテクト - アソシエイト」
セッション3：セキュアなアプリケーションおよびアーキテクチャを規定する
を視聴して、まとめた内容を記載しています。


## 責任共有モデル
従来のオンプレミスの世界では物理的なインフラストラクチャー含むシステム全体をお客様が責任をもって保護する必要があった。
AWSはAWSクラウドで提供するすべてのサービスを実行するインフラストラクチャーの保護に責任を負う。
お客様の責任はクラウドにおけるセキュリティ。
使用する AWS のサービスによってセキュリティに関する責任の一部としてお客様を行う必要がある作業量は異なる。 
例えばAmazon EC2、 Amazon VPCなどのサービスはセキュリティ設定を管理のタスクはすべてお客様が行う必要がある。
ゲストオペレーティングシステムの管理、インスタンスにインストールするすべてのアプリケーションソフトウェアまたはユーティリティの管理、各インスタンスに設定するセキュリティグループなどのファイアウォールの設定に関してはお客様が責任を負う。

## AWS IAM

AWS のリソースに対するアクセスコントロールは AWS IAM により管理される。
IAMは、ユーザー、グループ、ロール、ポリシーの4つが作成できる。
IAMユーザーは、認証情報を持つ。
グループは、ユーザを束ねて管理できる。
IAMポリシーは、認証を受けたユーザーがアクセスできるリソースの範囲、操作を定義するドキュメント。
IAMポリシーは、ユーザー、グループ、ロールに割り当てることでアクセスできる権限の範囲を指定できる。

自社内でAD(Microsoft Active Directory)で認証を受けた人に対して、IDフェデレーションによりAWSのアクセス許可できる仕組みを実現できる。

ユーザーには、必要なタスクのみ実行できるようにポリシーを作成する。
最小限のアクセス許可で始めて、必要に応じて追加のアクセス許可を付与する。
（最初に多くのアクセス許可を付与して、あとから制限するより安全）


## VPC

ファイヤーフォールやルーティング設定などセキュリティを向上させる機能。
VPCは、AWSクラウド内にユーザー独自のプライベートな仮想ネットワークを作成できる。
VPCは、IPv4とIPv6の両方を使用でき、リソースやアプリケーションに安全かつ簡単にアクセスできる。

VPCでは、プライベートIPをサブネットに分割して管理。
インターネットのアクセス可否を定義するためにサブネットを使用することを推奨。

インターネットから直接アクセスできるパブリックサブネット
インターネットから直接アクセスできないプライベートサブネット
の2つに分ける考え方。

## セキュリティグループとネットワークACLの比較

VPCでは仮想なファイヤーウォールの仕組みとして、**セキュリティグループ**と**ネットワークACL**がある。
セキュリティグループのみ使用することができたり、ネットワークACLを追加レイヤーとして設定し、ファイヤーウォールを2重化することができる。

||セキュリティグループ|ネットワークACL|
|---|---|---|
|アクセスの種類|ポート、プロトコル、ソースIPの指定|ポート、プロトコル、ソースIPの指定|
|ルール|明示的な許可のみ|明示的な許可または拒否|
|ステート|ステートフル|ステートレス|
|適用対象|ENIに適用|単一のVPC同士のに関連付け|
|サポート対象|VPCとEC2 Classic|VPCのみ|

ENIとは、イラスティックネットワーク・インターフェースの略。仮想なNIC。
EC2には、1つ以上のENIがアタッチされていて、ENIへの通信がセキュリティグループより評価される。

## VPC接続

|サービス名|使用する場面|
|---|---|
|インターネットゲートウェイ|インターネットに接続する。|
|AWS Direct Connect|オンプレミスのプライベートネットワークとVPC同士のをVPN接続する。|
|VPCピア接続|VPCとVPCを接続する。<br>VPCであれば、すべてのリージョン間で異なるVPC間のピア接続も可能。|
|VPCエンドポイント|VPC外のサービスに接続する。|
|NATゲートウェイ|プライベートサブネットからのインターネットトラフィックを許可|

## NATを構成する方法
EC2インスタンス内にNAT機能を構成したNATインスタンスを自分で構築／運用する方法
マネージド型のNATゲートウェイを利用する方法
NATインスタンスは、好きなEC2インスタンスタイプを選択できる。
必要なければ停止できるからコストが安い。しかし、可用性や拡張性の運用はお客様側で実施する必要がある。
NATゲートウェイでは、可用性や拡張性はサービスとして提供している。

構成方法はシンプル。
NATインスタンスもしくはNATゲートウェイはパブリックサブネットに起動したあと、プライベートサブネットルートテーブルにNATゲートへの経路を定義することで合成できる。


## データに対するセキュリティ
転送中のデータと保管中のデータの保護を考える必要がある。

AWSから外へのデータ送受信

- インターネットからのWebへの通信は、SSL VPN接続およびDirect ConnectでオンプレミスネットワークとAWSを保護するのは**IPSec**
- 大容量のデータオンプレミスからAWSへインポート／エクスポートしたい場合は**SnowBall**

で、安全にデータ移動が可能。

SnowBallでは、データが暗号化されて保存される。
AWS APIコールでは、デフォルトでhttpsが利用される。

保管中のデータに関しては、2点考慮する必要がある。

- データに対するアクセスコントロール
- 暗号化

S3の場合

- S3のデータのアクセスコントロールは、IAMポリシーやバケットポリシーアクセスコントロールリストにより制御することができる。
- 暗号化はサーバーサイドとクライアントサイドでの暗号化が可能
- クライアントサイド暗号化は、クライアントサイドで暗号化処理を実施してデータをSDに送付
- コンプライアンス要件や契約を満たす場合に必要になる
- サーバーサイド暗号化を利用すると、より簡単かつパフォーマンスよく暗号化することができる

AWSで安全に暗号化キーを管理するためのサービスとして**AWS KMS**と**AWS CloudHSM**がある

AWS KMS

- お客様によるソフトウェアベースのキー管理
- AWSの多くのサービスとの統合
- アプリケーションからの直接使用

AWS CloudHSM

- ハードウェアベースのキー管理
- アプリケーションから直接使用
 - FIPS 140-2 コンプライアンス

## まとめ

ルートユーザーをロックダウンする
これはrootユーザーを通常運用で利用せず、必ずIAMユーザーを作成して、普段の運用はIAMユーザーで行うようにする
ルートユーザーは、権限を制御できないため、rootユーザーの認証情報が漏れると非常に危険
セキュリティグループは、明示的な許可のみ
ネットワークACLは、明示的な許可または拒否を行う