AWS 認定ソリューションアーキテクト – プロフェッショナル 合格への道#3

#はじめに
昨日の続きから
#学習
##5
あなたはファットクライアントアプリケーション向けのネットワーク接続を設計しています。このアプリケーションは、ビジ
ネス旅行者向けに設計されており、ホテルの部屋、カフェ、公共の Wi-Fi ホットスポット、その他の場所などのインターネ
ットから接続されています。このアプリケーションをインターネットで公開したくありません。
デプロイメントと運用コストを最小限に抑えながら上記の要件を満たすネットワーク設計はどれですか?

* AWS Direct Connect を導入し、VPC へのプライベートインターフェイスを準備する。パブリックサブネットを作
成し、そこにアプリケーションサーバーを配置する。
  * パブリックサブネット

* アプリケーションへのバックエンド接続の終端処理する SSL リスナーを使用した、Elastic Load Balancing を実装する。
    * インターネットに公開したまま

*  IPsec VPN 接続環境を構築し、ユーザーに設定情報の詳細を提供する。VPC にパブリックサブネットを作成し、そ
こにアプリケーションサーバーを配置する。
  * パブリックサブネット

* VPC のパブリックサブネットで SSL VPN ソリューションを構築してから、すべてのユーザーのコンピュータに SSL
VPN クライアントソフトウェアをインストールして設定する。VPC にプライベートサブネットを作成し、そこにア
プリケーションサーバーを配置する。
 * プライベートサブネット

### ファットクライアントとは
https://nyumon-info.com/web/thin-fat.html

> ファットクライアントとは、クライアント側で処理を実行するための記憶媒体やアプリケーションソフトなどの環境をすべて備えたコンピュータのことを指します。
ブラウザやオフィスツール、メールクライアントなど、いろいろなアプリや機能を実装しているため、値段も高価になります。これらの端末は、以前までは単に「クライアント」とか「パソコン」などとと呼ばれていました。
しかし、「シンクライアント」が普及しだしてからは、シンクライアントと区別するために「ファットクライアント」と呼ばれるようになりました。
ちなみに、個人が所有するパソコンはアプリケーションを端末にインストールして使ったり、データをパソコンに保存したりしますので、「ファットクライアント」ということになります。

### IPSEC
> 「Security Architecture for Internet Protocol」の略。IPsecは、暗号技術を使ってIPパケットの完全性や機密性を実現する仕組みです。IPパケットの保護によって、HTTPやFTPといったアプリケーションプロトコルを使って転送されるデータが保護されます。また既存のアプリケーションプログラムを変更しなくても、その通信でIPsecを利用することができます。

### SSLを改めて理解してから AWS Client VPN に挑む
https://dev.classmethod.jp/articles/ssl-introduction-for-aws-client-vpn/

> SSL技術を利用した VPN接続を SSL-VPN といい、 AWS Client VPNは マネージドな SSL-VPNサービス です。

#### SSLによる暗号化通信
 > AWS Client VPN において、SSL通信のサーバーの役割を担うリソースが クライアントVPNエンドポイント です。 クライアントはこの エンドポイントを経由して、各 AWSリソースへのアクセスが可能となります。

![sslvpn.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/87084624-2dbd-1a42-e214-4787ed9e7a48.png)

> サーバー側で準備する必要のあるものは サーバー証明書 と サーバーの秘密鍵 であったことを思い出してください。 それらの情報は AWS Certificate Manager (ACM) に安全に保管し、使用されます。

#### クライアントの認証
> AWS Client VPNにおけるクライアントの認証は、 Active Directory 認証 と 相互認証 をサポートしています。 どちらか一方、もしくは両方を選択することができます。

* Active Directory 認証

![AD.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/df4dacbf-6ed4-25d2-6b40-926393ad76e4.png)

> AWS Managed Microsoft AD や Simple AD といった AWS Directory Service を利用した AD認証です。

* 相互認証

> 相互認証は クライアント証明書 を使用した認証です。 サーバーの身元を証明するためにサーバー証明書が使われましたが、それのクライアント版です。
クライアント証明書にあるデジタル署名 を復号化して認証を行うため、 クライアントのルート証明書 をあらかじめ ACMに保管する必要があります。

![相互認証.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/e83d4a1e-896d-f2b1-ff5c-9509c189f85b.png)

###AWS Client VPN とは
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/what-is.html

#### クライアント VPN のコンポーネント
* クライアント VPN エンドポイント
    * クライアント VPN エンドポイントは、クライアント VPN セッションを有効にして管理するために作成して設定するリソース
* ターゲットネットワーク
    * ターゲットネットワークは、クライアント VPN エンドポイントに関連付けるネットワークです。サブネットを クライアント VPN エンドポイントに関連付けると、VPN セッションを確立できます。クライアント VPN エンドポイントには複数のサブネットを関連付けることができます。すべてのサブネットは同一の VPC に存在する必要があります。各サブネットは異なるアベイラビリティーゾーンに属している必要があります。
* ルート
    * 各 クライアント VPN エンドポイントには、利用可能な送信先ネットワークルートを説明したルートテーブルがあります。ルートテーブル内の各ルートは、特定のリソースまたはネットワークへのトラフィックのパスを指定します。
* 承認ルール
    * 承認ルールは、ネットワークにアクセスできるユーザーを制限します。特定のネットワークでは、アクセスを許可する Active Directory グループを設定します。Active Directory グループに属したユーザーのみが、特定のネットワークへアクセスできます。デフォルトでは承認ルールはありません。ユーザーがリソースやネットワークにアクセスできるように承認ルールを設定する必要があります。
* クライアント
    * VPN セッションを確立するためにクライアント VPN エンドポイントに接続するエンドユーザー。エンドユーザーは、OpenVPN クライアントをダウンロードし、作成した Client VPN 設定ファイルを使用して VPN セッションを確立する必要があります。

#### クライアント VPN へのアクセス
* コンソール
* CLI
* PS
* API

#### クライアント VPN の制約事項
* クライアント CIDR 範囲は、関連付けられたサブネットが配置されている VPC のローカル CIDR、または クライアント VPN エンドポイントのルートテーブルに手動で追加されたルートと重複することはできません。
* 関連付けられているサブネットが配置されている クライアント VPN エンドポイントと VPC は、同じアカウントに属している必要があります。
* クライアント VPN エンドポイントに関連付けられているサブネットは、同じ VPC 内にある必要があります。
* 1 つのアベイラビリティーゾーンの複数のサブネットを クライアント VPN エンドポイントに関連付けることはできません。
* クライアント VPN は IPv4 トラフィックのみをサポートしています。
* クライアント VPN は、多要素認証 (MFA) をネイティブにはサポートしません。
* クライアント VPN は、医療保険の携行と責任に関する法律 (HIPAA) または連邦情報処理規格 (FIPS) に準拠していません。

#### AWS Client VPN の詳細
AWS Client VPN では、クライアント VPN エンドポイントの管理者およびクライアントとやり取りする 2 つのタイプのユーザーがあります。

* 管理者がやること
    * 管理者は、サービスの設定と設定を担当します。このプロセスには、クライアント VPN エンドポイントの作成、ターゲットネットワークの関連付け、認証ルールの設定、および追加のルート (必要な場合) の設定が含まれます。クライアント VPN エンドポイントを設定した後、管理者は クライアント VPN エンドポイント設定ファイルをダウンロードして、アクセスが必要なクライアントに配布します。
        * クライアント VPN エンドポイント設定ファイルには、クライアント VPN エンドポイントの DNS 名と、VPN セッションを確立するために必要な証明書情報が含まれています。
* ユーザがやること（VPN セッションを確立するために クライアント VPN エンドポイントに接続する人）
    * ライアントは OpenVPN ベースの VPN クライアントアプリケーションを使用して、ローカルコンピュータまたはモバイルデバイスから VPN セッションを確立します。

**特定のばらけた利用者に対してVPN接続を可能にしたマネージドサービスの意味を理解**

![ｃぃえんｔVPN.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/d8fd5e3b-4b54-08a0-ee29-3752fee63c8c.png)

#### クライアント認証と認可
クライアント VPN には認証および認可機能がある

* 認証
    * 認証は AWS クラウドへの最初のエントリポイントで実装されます。クライアントが クライアント VPN エンドポイントへの接続を許可されているかどうかを判断するために使用されます。認証が成功すると、クライアントは クライアント VPN エンドポイントに接続して VPN セッションを確立します。認証が失敗すると、接続は拒否され、クライアントは VPN セッションを確立できなくなります。
* 認可
    * セキュリティグループ
        * クライアント VPN は自動的にセキュリティグループと統合されます。サブネットを クライアント VPN エンドポイントに関連付けると、VPC のデフォルトセキュリティグループが自動的に適用されます。最初のターゲットネットワークを関連付けると、セキュリティグループを変更できます。クライアント VPN ユーザーアクセスを有効にするには、VPC 内でアプリケーションからのトラフィックを許可するルールを追加することで、セキュリティグループに適用された関連付けを選択します。逆に、関連付けに適用されたセキュリティグループを指定しないことで、クライアント VPN ユーザーのアクセスを制限できます。
    * ネットワークベースの承認
        * ネットワークベースの承認は承認ルールを使用して実装されます。アクセスを有効にするネットワークごとに、アクセス権を持つユーザーを制限する承認ルールを設定する必要があります。特定のネットワークでは、アクセスを許可する Active Directory グループを設定します。指定された Active Directory グループに属するユーザーのみが、指定されたネットワークにアクセスできます。Active Directory を使用していない場合、またはすべてのユーザーにアクセスを許可したい場合は、すべてのクライアントにアクセスを許可するルールを指定できます。

#### ユースケース
* 単一のターゲット VPC が含まれています。クライアントに単一の VPC 内のリソースへのアクセスのみを許可する
* クライアントにターゲット VPC およびそれとピア接続されている他の VPC 内のリソースへのアクセスを許可する
* クライアントにオンプレミスネットワーク内のリソースへのアクセスのみを許可する
* クライアントに単一のターゲット VPC 内のリソースへのアクセスを許可し、インターネットへのアクセスを許可す
* VPC 内の特定のリソースへのアクセスを許可または拒否
    * 許可
        * SG解放
    * 拒否
        * SG閉じる

#### クライアント VPN のモニタリング
* Amazon CloudWatch
    * AWS リソースと AWS でリアルタイムに実行されるアプリケーションをモニタリングします。メトリクスの収集と追跡、カスタマイズしたダッシュボードの作成、および指定したメトリクスが指定したしきい値に達したときに通知またはアクションを実行するアラームの設定を行うことができます。
* Trail
    * AWS アカウントにより、またはそのアカウントに代わって行われた、API 呼び出しおよび関連イベントを取得し、指定した Amazon S3 バケットにログファイルを配信します。AWS を呼び出したユーザーとアカウント、呼び出し元のソース IP アドレス、および呼び出しの発生日時を特定できます。
* Amazon CloudWatch Logs
    * Amazon EC2 インスタンス、CloudTrail、その他のソースのログファイルを監視、保存し、それらのファイルにアクセスできます。CloudWatch Logsは、ログファイル内の情報を監視し、特定のしきい値が満たされたときに通知します。また、耐久性の高いストレージにログデータをアーカイブすることもできます。

## 6
あなたの会社は、中央ファイルサーバー経由で 900 GB のデータを共有している、オンプレミスのレガシーエンジニアリン
グアプリ ケーションをホストしています。エンジニアリングデータは、ファイルサイズがメガバイトから数ギガバイトで、
数千個のファイルで構成されています。エンジニアは通常、1 日に 5～10% のファイルを変更します。CTO はこのアプリ
ケー ションを AWS に移行したいと考えていますが、ユーザーのダウンタイムを最小限にするために週末に移行できること
が条件 です。計算によると、会社の既存の 45 Mbps インターネット接続を使用して 900 GB のデータを転送するには、
最低 48 時間かかります。

AWS 上てでアプリケーション環境を複製した後、与えられた時間内にデータを失うことなくアプリケーションのデー タを
AWS に移行するには、どうしたらよいですか?

* 大容量ファイルには複数のスレッドとマルチパートアップロードを使用して、週末にデータを Amazon S3 にコピ
ーする。開発者と並行して作業し、複製されたアプリケーション環境を再設定して、Amazon S3 を利用してエンジニ
アリングファイルを提供する。
  * 回線の関係で二日はかかるか。金曜の夜の時点で転送スタート切っているのでダメ

* 移行の 1 週間前から Amazon S3 にエンジニアリングデータを同期する。金曜日の夜に最後の同期を実行して、
同期が完了したら、データセット全体を AWS ファイルサーバーにコピーする。
  * 転送自体は完了しており二日間でコピーするので正解

* 金曜日にエンジニアリングデータを 1 TB の USB ドライブにコピーし、土曜日に配送されるように USB ドラ
イブを夜間便ですぐに AWS Import/Export に送付して、EBS ボリュームにインポートしてもらう。インポートさ
れた EBS ボリュームを日曜日に AWS のファイルサーバーにマウントする。
  * エンジニアリングデータをUSBに入れて配送することは可能だが考えたくない

* AWS Storage Gateway の Gateway-Stored Volume を活用して、ボリュームを作成する。金曜日の夜にエン
ジニアリング データを Storage Gateway のボリュームにコピーする。 データをコピーした後、ボリュームのス
ナップショットを実行し、EBS ボリュームとしてボリュームを復元して、日曜日に AWS のファイルサーバーにア
タッチする。
  * ボリュームへのコピーが二日間かかるので無理
  * 厳密にはゲートウェイへの帯域が細くゲートウェイからの帯域が問題ではない

### Amazon S3 マルチパートアップロードの制限
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/qfacts.html