AWS 認定 SysOps アドミニストレーター – アソシエイト合格への道#1

#はじめに
こんにちは[前回の記事](https://qiita.com/fjisdahgaiuerua/items/041e5fcd5c4518f1b7d1)でDVAを達成したので次はSOAを目標に設定しました。

#サンプル問題
https://aws.amazon.com/jp/certification/certified-sysops-admin-associate/
サンプル問題は全問正解でした。ですが、すべての選択肢に対して根拠をもって否定することができなかった問がありました。
###出題傾向分析
* ELBのユースケース
* CloudwatcheventとSNS連携
* VPCピアリング
* EC2権限管理(IAM)
* WAFユースケース

###やらなければならないと認識しているもの
* WAFハンズオン＆ホワイトペーパー
* AWS CLIでELBにSSL証明書を設定する
* cloudfrontハンズオン&ホワイトペーパー
* EC2購入オプション復習
* AWS責任共有モデル復習
* AWS Comfigハンズオン&ホワイトペーパー

###わからなかったもの
* EC2インスタンスフリート
    * Fleet=艦隊という意味
    * Amazon EC2 フリートは、さまざまな Amazon EC2 インスタンスタイプ、アベイラビリティーゾーン、オンデマンド、Amazon EC2 リザーブドインスタンス (RI)、Amazon EC2 スポット購入モデルの間での Amazon EC2 キャパシティーのプロビジョニングを簡素化する新機能
        * https://aws.amazon.com/jp/about-aws/whats-new/2018/04/introducing-amazon-ec2-fleet/
    * プロビジョニング用機能？
        * https://qiita.com/o2346/items/6277a7ff6b1826d8de11
        * AnsibleやTeraformを触ったことがないので差がわからない。Toolを使うのは資格とってからにしたいので違いについては今後キャッチアップした時に記事にしたいと思います。
* グローバルAWSバックボーン
    * AWS主要の通信回線のこと
    * この言葉が使われていた記事
        * https://aws.amazon.com/jp/about-aws/whats-new/2018/02/inter-region-vpc-peering-is-now-available-in-nine-additional-aws-regions/
    * グローバルがつくとどうニュアンスが変わるのかは不明ですが、主要回線という認識でとどめておく。
* ウェブスクレイピング
    * クローラによって必要な情報のあるWebページにアクセスし、スクレイパでウェブサイトのHTMLから必要なデータを取得する事
    * なんでやってはいけないのか
        * スクレイピングが問題となった事例
            * Librahack事件
            * 理由
                * 著作権法上の問題
                * 利用規約との抵触
                * サーバーへの過度なアクセス
* HTTPフラッディング攻撃
    * SYNフラッド攻撃のことという認識
        * https://docs.aws.amazon.com/ja_jp/solutions/latest/aws-waf-security-automations/capabilities.html
    * これを防ぐためにWAFをかませましょう
* GuardDuty
    * セキュリティ観点から悪意のある操作や不正な動作を継続的にモニタリングして、脅威を検知するサービス。リスク分析のデータソースにはtrai,flowlog,aws dnsクエリの情報が利用される。また、分析するアクティビティは利用者と無関係なIPから連続して実行されたAPIコール、SSｈポートに対してプルートフォースアタック、マルウェアに不正利用されているEC2の検出、これまでに利用されていないRZでのインスタンス起動など。これらの脅威を検出するために機械学習による異常検知の仕組みがある。検知された不正な操作は、マネコンやAWSCLIから確認可能。cloudwatch logsと連携してアラート→SNS通知。
        * プルートフォースアタック
            * ブルートフォースアタックとはwebアプリケーションやサービス、システムに対してパスワードの総当たり攻撃して暗号を解析し、不正にログインすること
            * マルウェア
                * マルウェア とは、不正かつ有害に動作させる意図で作成された悪意のあるソフトウェアや悪質なコードの総称。コンピュータウイルスやワームなどが含まれる。 悪意のコード、悪意のソフトウェア、悪意のある不正ソフトウェア、有害なソフトウェア、不正プログラムとも呼ばれる

#学習
###AWS WAF、AWS Shield、AWS Firewall Manager とは
* Amazon API Gateway API、Amazon CloudFront、または Application Load Balancer に転送される HTTP および HTTPS リクエストをモニタリング可能にするウェブアプリケーションファイアウォール
    * 公式https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/what-is-aws-waf.html
    * これを見ればいいと思うhttps://dev.classmethod.jp/articles/fully-understood-aws-waf-v2/
    * 使い方
        * AWS WAF、AWS Firewall Manager、および AWS Shield を組み合わせて使用して、包括的なセキュリティソリューションを作成
            * AWS WAF で始まります。自動化して、AWS Firewall Manager を使用し AWS WAF の管理を簡素化
            * Shield アドバンスド は、DDoS Response Team (DRT) の専用サポートや高度なレポート作成機能など、AWS WAF に機能を追加
            * リソースに追加される保護機能をより詳細に制御する場合は、AWS WAF だけにする
            * アカウント間で AWS WAF を使用したり、AWS WAF 設定を高速化したり、新しいリソースの保護を自動化したりするには、AWS WAF で Firewall Manager を使用
            * 可視性の高いウェブサイトを所有している場合や、頻繁に DDoS 攻撃を受けやすい場合は、Shield アドバンスド が提供する追加機能の購入する
            * DRT(DDoS Response Team (DRT) の専用サポートや高度なレポート作成機能) のサービスを使用するには、「ビジネスサポートプラン」または「エンタープライズサポートプラン」をサブスクライブする
                * 二重で金がかかる
        * AWS WAF または AWS Shield アドバンスド を初めて使用する場合は、事前に以下のタスクをすべて実行
            * ステップ 1: AWS アカウントへのサインアップ
            * ステップ 2: IAM ユーザーを作成する
            * ステップ 3: ツールをダウンロードする
        * AWS WAF を使用して、Amazon CloudFront ディストリビューション、Amazon API Gateway API、または Application Load Balancer がウェブリクエストにどのように応答するかを制御します。
            * ウェブ ACL
                * ウェブアクセスコントロールリスト (ACL) を使用して、一連の AWS リソースを保護します。ウェブ ACL を作成し、ルールを追加してその保護戦略を定義します。ルールにより、ウェブリクエストを検査するための基準が定義され、条件に一致するリクエストの処理方法が指定されます。ルール検査に合格するそれらのリクエストによってブロックするか、許可するかを示すウェブ ACL に対してデフォルトのアクションを設定
                    * ウェブ ACL を作成した後、1 つ以上の AWS リソースに関連付けることができます。AWS WAF ウェブ ACL を使用して保護できるリソースタイプは、Amazon CloudFront ディストリビューション、Amazon API Gateway API、および Application Load Balancer 
            * ルール
                * 各ルールには、検査基準を定義するステートメントと、ウェブリクエストがその基準を満たす場合に実行するアクションが含まれる
                * ルールを使用して、一致リクエストをブロックしたり、一致リクエストを許可
                * また、ルールを使用して、一致するリクエストをカウントすることもできる
            * ルールグループ
                * ルールは個別に使用することも、再利用可能なルールグループで使用することもできる
                * AWS Marketplace の販売者から提供されるマネージドルールグループを使用できる
        * AWS WAF ウェブ ACL キャパシティーユニット (ソシャゲチーム編成コストみたいな認識。遊び心があっていいですね)
            * AWS WAF は、ウェブ ACL キャパシティーユニット (WCU) を使用して、ルール、ルールグループ、およびウェブ ACL の実行に使用される運用リソースを計算および制御
                * ルールキャパシティー
                * ルールグループキャパシティー
                * ウェブ ACL キャパシティー 

### コマンドラインからELBにSSL証明書をアップロード
https://qiita.com/takahashi-kazuki/items/700db5d727f740e6b6da
大量のELBのSSL証明書をAWS CLIで簡単に更新する
https://dev.classmethod.jp/articles/elb-ssl-certificate-renew-from-cli/


### Amazon CloudFront とは
* メソ様　「AWS再入門ブログリレー Amazon CloudFront 編」
    * https://dev.classmethod.jp/articles/blogrelay2019_cloudfront/

* s3 WORM(チュートリアルでs3バケットを作っていたら気になったので消化)
    * Amazon S3 オブジェクトロックを使用したオブジェクトのロック
        * https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/object-lock.html
            * エンプレス構文やめてください
    * Amazon S3 オブジェクトロックによるデータの保護
        * https://aws.amazon.com/jp/blogs/news/protecting-data-with-amazon-s3-object-lock/
            * これ権限管理しっかりすれば防げるんじゃないだろうか
    * クラメソ様の見解
        * https://dev.classmethod.jp/articles/s3-object-lock/
            * 納得しました。

* Amazon CloudFront は、ユーザーへの静的および動的ウェブコンテンツ (.html、.css、.js、イメージファイルなど) の配信を高速化するウェブサービスであり、CloudFront ではエッジロケーションと呼ばれるデータセンターの世界規模のネットワークを通じてコンテンツが配信されます。CloudFront を使用して提供されているコンテンツをユーザーがリクエストすると、そのユーザーはエッジロケーションにルーティングされます。エッジロケーションでは最も低いレイテンシー (遅延時間) が提供されるので、コンテンツは可能な最高のパフォーマンスで配信されます。
    * コンテンツがエッジロケーション内に最も低いレイテンシーで既に存在している場合、CloudFront はそのコンテンツを即時に配信
    * コンテンツがそのエッジロケーションに存在しない場合、CloudFront は、コンテンツの最終バージョンのソースとしてお客様が特定した Amazon S3 バケット、MediaPackage チャネル、または HTTP サーバー (たとえば、ウェブサーバー) などの、お客様が定義したオリジンからコンテンツを取り込みます。
* Amazon S3 バケットをオリジンサーバーとして使用している場合は、バケット内のオブジェクトを読み取り可能にして公開することで、そのオブジェクトの CloudFront URL を知っているユーザーは誰でもそのオブジェクトにアクセスできます。オブジェクトを非公開にして、オブジェクトにアクセスするユーザーを制限することもできます。
* CloudFront ディストリビューションを作成します。このディストリビューションにより、ユーザーがウェブサイトまたはアプリケーションを通じてファイルをリクエストしたときに、どのオリジンサーバーからファイルを取得するかが CloudFront に指示されます。同時に、詳細も指定します。たとえば、CloudFront ですべてのリクエストをログに記録するかどうかや、ディストリビューションを作成した直後にディストリビューションを有効にするか

#### CloudFront ユースケース

##### 静的ウェブサイトのコンテンツ配信の加速
CloudFront は、世界中のビューワーへの静的コンテンツ (たとえば、イメージ、スタイルシート、JavaScript など) の配信を高速化します。CloudFront を使用することで、AWS バックボーンネットワークおよび CloudFront エッジサーバーの利点を活用して、ウェブサイトを閲覧するビューワーに高速で、安全で、信頼性の高いエクスペリエンスを提供

##### オンデマンドビデオおよびライブストリーミングビデオの配信
* オンデマンドビデオ (VOD) ストリーミングで CloudFront を使用して、MPEG DASH、Apple HLS、Microsoft Smooth Streaming、CMAF などの一般的な形式であらゆるデバイスにストリーミング
* ライブストリームをブロードキャストする場合は、フラグメントを正しい順序で配信するマニフェストファイルに対する複数のリクエストを結合して、オリジンサーバーの負荷を軽減できるように、メディアフラグメントをエッジにキャッシュすることができます。
    * ここコクーンがパージしてるので後でキャッチアップする

##### システム処理全体で特定のフィールドを暗号化する
* CloudFront を使用して HTTPS を設定する場合、既にオリジンサーバーへのセキュアなエンドツーエンド接続が存在します。フィールドレベルの暗号化を追加する場合、HTTPS セキュリティに加えて、システムの処理中に特定のデータにオリジンの特定のアプリケーションのみがアクセスできるように、そのデータを保護できます。
    * HTTPSでの配信設定？

##### エッジのカスタマイズ
* エッジでサーバーレスコードを実行することには、ビューワーのコンテンツとエクスペリエンスをカスタマイズして、待ち時間を短縮することができる様々な可能性があります。たとえば、メンテナンスのためにオリジンサーバーがダウンしているときにカスタムエラーメッセージを表示することができるため、ビューワーには一般的な HTTP エラーメッセージは表示されません。または、CloudFront がリクエストをオリジンに転送する前に、コンテンツにアクセスするユーザーを認証および管理する関数を使用できます。Lambda@Edge と CloudFront を併用すると、CloudFront が配信するコンテンツをさまざまな方法でカスタマイズできます
    * Lambda@edge
        * lambdaをキャッシュ

##### キャッシュ動作
* ビューアープロトコルポリシー (CloudFront エッジロケーションのコンテンツへのアクセスに使用するビューアーのプロトコルポリシー)
    * HTTP and HTTPS (HTTP と HTTPS
    * Redirect HTTP to HTTPS (HTTP を HTTPS にリダイレクト
    * HTTPS Only (HTTPS のみ)

* CloudFront とカスタムオリジンとの間の通信に HTTPS を必須にする
    * オリジンプロトコルポリシー
        * HTTPS Only]
            * CloudFront は HTTPS のみを使ってカスタムオリジンと通信
        * Match Viewer]
            * CloudFront は、ビューワーのリクエストのプロトコルに応じて HTTP または HTTPS を使用
* スタムオリジンサーバーに SSL/TLS 証明書をインストール
    * オリジンが Elastic Load Balancing ロードバランサーの場合、AWS Certificate Manager (ACM) が提供する証明書を使用できます。信頼されたサードパーティー認証機関が署名して ACM にインポートされた証明書を使用することもできます。
    * ELB ロードバランサー以外のオリジンの場合、信頼されたサードパーティー認証機関 (CA) (Comodo、DigiCert、Symantec など) によって署名された証明書を使用する必要があります。
        * CloudFront とオリジンとの間の HTTPS 通信に自己署名証明書を使用することはできません。