AWS Cloud Practitioner 学習記録６

:::note info
AWS Skill Builder における下記コンテンツの学習記録（ポイントとメモ）です
AWS Cloud Practitioner Essentials (Japanese) (日本語実写版)
:::

セキュリティはいつでも重要です
あらゆるサービスに付随する概念なのでしっかり勉強しましょう

# モジュール６：セキュリティ
### 概要
AWS が導入しているセキュリティの仕組みと責任共有モデル、およびその他のセキュリティサービス


### AWS 責任共有モデル
**責任共有モデル** とは以下のように責任を切り分ける
+ AWS が管理し責任を負う、クラウド自体のセキュリティ
+ ユーザ（自分）が管理し責任を負う、クラウド内のセキュリティ

家を建てる例の説明はとても分かりやすい
＃以下は自分が解釈したイメージ
+ 建築業者（AWS）は家を建築し、建築物（AWS のサービス）に対して責任を負う
    + 電気や水道がコンピューティングリソースなら、契約した計算量が提供されるか？
    + 建物の部屋がストレージなら、必要な容量が確保されているか？
+ ユーザは家のドアを閉めてカギをかけ、家の中のものは自身で保護する責任を負う
    + カギがアカウントパスワードなら、それを知る人は誰か？失くしたり（誤って公開していたり）していないか？
    + 家の中に置いた家電製品がアプリケーションなら、それを正しく設置して利用しているか？

|責任主体|AWS 環境での責任範囲|
|:-:|:-|
|ユーザ|顧客などのデータ<br>アプリケーション、IAM<br>OS、NW、ファイアウォール設定<br>データの暗号化、トラフィックの保護|
|AWS|ソフトウェア：コンピューティング、ストレージ、データベース、ネットワーキング<br>ハードウェア：リージョン、AZ、エッジロケーション|


### ユーザーのアクセス許可とアクセス権
コーヒーショップにて：従業員のアイデンティティとそれに応じたアクセス権
店舗オーナーは店舗内のすべてを確認／操作できるが、一般の従業員はレジやキッチンのみにアクセスし、仕事をする
このような管理を、AWS において実現するにはどうすればよいか

##### AWS Identity and Access Management (IAM)
AWS のサービスやリソースへのアクセスを管理する仕組みを提供するサービス
IAM[^1] にはいくつかの機能があり、これらを組み合わせて利用する
+ IAM ユーザー、グループ、ロール
+ IAM ポリシー
+ 多要素認証（Multi Factor Authentication:MFA）

##### AWS アカウントのルートユーザー
AWS アカウントを始めて作成したときに設定される、最初のアイデンティティが**ルートユーザー**であり、すべての AWS サービスとリソースにアクセス可能である

:::note warn
**日常のタスクにはルートユーザーを使用しないこと！** 
通常は、ルートユーザーにだけ許可されるタスク（メールアドレスの変更や AWS サポートプランの変更など）に限る
:::

ルートユーザーでは、まず最初に IAM ユーザー（ユーザ A とする）を作成し、他のユーザーを作成するアクセス許可を割り当てる
ユーザ A は、引き続き AWS でのタスクを実行するための IAM ユーザを作成していって、それらのユーザでそれぞれのタスクを処理する
（オーナーは、まず店長を雇い人事権を与え、店舗運営は店長が雇ったスタッフに任せるのである）

##### IAM ユーザー
IAM ユーザーとは、AWS 上に作成するアイデンティティである
AWS サービスやリソースを使用する個人だけでなくアプリケーションにもアイデンティティを持たせることができる

新しい IAM ユーザはデフォルトでアクセス許可を持たない
必要なアクセス許可を与える（IAM ポリシーをアタッチする）ことで、さまざまなタスクを実行できるようにする

:::note info
一般的なセキュリティの概念だが、IAM ユーザーは一意に作成すること
A さんと B さんが同じアイデンティティの IAM ユーザーとして仕事をしてしまうと、どちらが働いた時間なのか分からないため正しく給料が支払えず、万が一問題が起こってもどちらと話をすればよいのか分からなくなってしまう
:::

##### IAM ポリシー
AWS のサービスとリソースへのアクセスを許可または拒否するためのドキュメント（方針）である
IAM ポリシーは JSON 形式で記述されている

このポリシーによって、例えば S3 バケットのすべてにアクセスするのか、一部にアクセスするのかを制御できる
（レジ係はレジを触ることができるが、金庫には触れないようにしたい、とか）

:::note info
最小権限の原則：特定のモジュール（ユーザやアプリケーション）には、その**目的に必要とするだけ**のアクセス権限を与えるべきである
:::

##### IAM グループ
IAM ユーザをまとめる単位であり、IAM ユーザをグループに追加することでグルーピングする

IAM ポリシーはグループにもアタッチすることができる
グループに所属するユーザは、グループにアタッチされたポリシーも引き継ぐ
ユーザ個々にポリシーをアタッチするのではなく、ポリシーがアタッチされたグループへユーザを所属させることで、簡単にアクセス許可を管理することができる

##### IAM ロール
IAM ロールは、一時的なアクセス許可を得るために引き受けるアイデンティティである
ロールは IAM ポリシーをアタッチして定義され、ユーザー、アプリケーション、AWS リソースは、IAM ロールを切り替える（引き受ける）ことでアクセス許可を得ることができるようになる

例えば「レジ係」というロールを作っておくことで、普段はバリスタとして働くユーザがこのロールを引き受けてレジ係の仕事をフォローしたり、AWS サービスで作ったロボットにこのロールで仕事をしてもらったりすることができる

##### 多要素認証（Multi Factor Authentication:MFA）
ユーザID、パスワード認証のほかに、本人からのアクセスであることを確認するための要素
AWS では FIDO セキュリティキー、仮想 MFA デバイス、ハードウェア TOTP トークンといった要素[^2]がサポートされている


### AWS Organizations
##### AWS Organizations
複数の AWS アカウント[^3] を一元的に管理できるサービス
複数アカウントにまたがって請求、アクセス、コンプライアンス、セキュリティを管理したり、アカウント間でリソースを共有したりできるようにする
+ 一括請求（コンソリデーティッドビリング） ＃このモジュールでは出てこない
+ アカウントの階層的なグループ化：組織単位（OU）
+ サービスコントロールポリシー（SCP）

##### 組織単位（OU）
アカウントをグルーピング単位を組織単位（OU）という
OU はネストすることもでき、組織内のアカウントをこれによって階層化して管理する
SCP は組織ルート、組織単位（OU）、および直接アカウントへアタッチすることができ、それぞれの単位における各アカウント内のユーザー、ロールで使用可能な AWS のサービス、リソース、個々のAPI アクションを制限する


### コンプライアンス
構築した AWS サービスがコンプライアンス要件を満たしていることを確認する
##### AWS Artifact
AWS のセキュリティおよびコンプライアンスレポートの利用と、特定のオンライン契約および契約の確認、受諾、管理を提供するサービス

+ AWS Artifact Agreements
    + AWS 全体で特定の情報利用について契約締結が必要な場合に利用できる
+ AWS Artifact Reports
    + AWS において各種の規制基準に準拠していることを示す情報として、サードパーティの監査人によって発行されたコンプライアンスレポートを提供する

##### カスタマーコンプライアンスセンター
AWS のコンプライアンスを知るために必要なリソースを提供している
監査人向けのラーニングパスも提供されている


### サービス妨害攻撃
アプリケーションが提供する価値に対する妨害への対処

##### サービス妨害攻撃
+ サービス妨害攻撃（Denial of Service attack:DoS 攻撃）
サービスを利用するユーザがウェブサイトやアプリケーションを利用できないようにする意図で行われる攻撃

    + **単一** のソースから、ターゲットに対して行われる
    ターゲットに過剰なネットワークトラフィックを発生させ、ウェブサイトやアプリケーションを過負荷状態に陥らせる

+ 分散型サービス妨害攻撃（Distributed DoS attack:DDoS 攻撃）
DoS攻撃を拡大したフラッド型の攻撃
    + **複数** のソースから、ターゲットに対して行われる
    ソースは攻撃者が複数用意したり、他のコンピュータの脆弱性を突いて乗っ取るなどして、ターゲットに DoS 攻撃を行う

##### AWS Sheild
DDoS 攻撃からアプリケーションを保護するサービス
+ AWS Sheild Standard
    + 追加料金なしで自動的に AWS リソースを保護
    + トラフィックをリアルタイムに分析して攻撃を検知、緩和してくれる
+ AWS Sheild Advanced
    + AWS Sheild Standard の保護に追加できる有料のオプションサービス
    + 詳細な攻撃の診断と、より大規模・高度な DDoS 攻撃に対する検出と緩和


### その他のセキュリティサービス
##### AWS Key Management Service (AWS KMS)
アプリケーションが利用するデータの保管時の暗号化／転送時の暗号化を実施する際の **暗号化キー** を作成して管理するためのサービス
また、KMS キーを管理するユーザ、使用できるユーザなどといったアクセスコントロールも制御できる
（当たり前だが、カギをかけていても、そのカギを誰でも取り出せたら意味がない）

##### AWS WAF (Web Application Firewall)
AWS で提供される、HTTP(S)リクエストに対応するウェブアプリケーションファイアウォール[^4]
CloudFront や Application Load Balancer と連携し、トラフィックのブロックや許可をおこなう
トラフィックは ウェブ ACL を使用する（つまり VPC サブネットの保護と同じでステートレスな制御）

##### Amazon Inspector
自動化された継続的なセキュリティ評価を行ってくれるサービス
ワークロードにおけるソフトウェア脆弱性や意図しないネットワークへの露出、ベストプラクティスからの逸脱を検出してくれる
提供される評価結果は重要度レベルによって順位付けがされ、問題の内容と修正のための推奨事項などが含まれる

##### Amazon GuardDuty
AWS インフラストラクチャとリソースに対するインテリジェントな脅威検出を提供するサービス
GuardDuty を有効化するとネットワークとアカウントアクティビティのモニタリングを開始し、VPC フローログや DNS ログ などいくつかの AWS リソースデータを分析する
脅威が検出されると AWS マネジメントコンソールで詳細を確認できる
脅威に対応するため推奨されるステップも含まれており、AWS Lambda と組み合わせて自動的に修復手順を実行するように設定することもできる


#
講座の内容は40分くらいで読了できると思いますが、
各用語から関連する情報を調べていたら3時間以上寄り道していました


[^1]:「アイアム」と読む。最初はそのまま「アイエーエム」だと思っていた

[^2]: [AWS での多要素認証 (MFA) の使用](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa.html "AWS での多要素認証 (MFA) の使用")

[^3]: アカウントとユーザーは明確に別物である。AWS アカウントは 1つの AWS 環境そのものを示していて、その中に IAM ユーザーとか IAM Identity Center ユーザーといった個々のユーザー（アイデンティティ）がある

[^4]: AWS Network Firewall という似たような名前のサービスもあるが、Network Firewall と WAF では保護するレイヤなどの目的が違う