AWS試験対策（⑥セキュリティ）

自分用メモ第6弾。
セキュリティは結構おろそかにする人が多いからここをちゃんとやれば強みになる気がする。テストでの比率も高いから蔑ろにはできない。

# AWSアカウントとIAM
AWSアカウントは、AWSとの契約の単位。他のアカウントと課金やネットワーク、セキュリティに干渉できない。家とその家主みたいなイメージ。他の人の家の家計簿は見れないし、家の中の部屋構造とかも見れない
IAMがその中のユーザーみたいなもの。家の住人って感じ。
AWSアカウントのルートユーザーには叶わない。しかしルート使いすぎるのもよくないので、このIAMをつくって権限を与えてあげる。
父「長男は一番偉いから俺と同じくらいなんでもやっていいぞ」
父「次男はほとんどやっていいけど〇〇触っちゃだめな」
んで父を殺して長男に実権を握らす的な。なぜなら父が洗脳されたら家族崩壊するからそうなるまえに殺しとけ、長男を使えって方針。現実に例えるとやべーわこれ。

## AWS Organization
複数のAWSアカウントを一元管理できるサービス。ポリシーベース。
二世帯住宅とかだとわかりやすいかも。おじいちゃんがマスターアカウントでお父さんはそこに所属するメンバーアカウント。
おじいちゃんに一括請求が行くように設定できたりする。

## IAMユーザーとグループ
ユーザーは5000ユーザーまで作成可能。名前とか所属グループとかそもそもの権限の偉さとか決めれる。生まれたてではなにも権限なし。

グループはユーザーの集合。100グループまで作れる。グループでのログインとかはできない。
ユーザー一人ひとりに権限つけてってもいいが、グループ一回作っちゃえばそこに所属させるだけで同じ権限をたくさんの人につけれる。セキュリティグループと一緒の考え。

## 使用可能な認証情報
マネジメントコンソールにログインするにはユーザ名とパスワードが必要。MFAという多要素認証にすることもできる。

api操作やAWS CLIを使うにはアクセスキーIDとシークレットアクセスキーが必要。
SOAPリクエストにはX.509証明書が必要…SOAPリクエストってなんだ？
まあ覚え方としては、ソープ行きたいなら証明書必要ってことね…（最悪）

セキュリティを考えるには、パスワードとかキーとかは定期的に更新しようね！
あとプログラムコードに直接記入して外部公開しちゃだめだぞ！噂に聞いた話だとウン万の請求がくるだとか…

パスワードポリシーも設定できる。ルールですね。大文字入れろや〜とか文字数少ねえぞカス〜とかそういうやつ。あと、有効期限とか。

## IAMポリシー
要するに、あなたはどこまで触っていいよ〜っていう取り決め。
管理ポリシーとインラインポリシーがある。
管理ポリシーは、複数のユーザ、グループ、ロールに割り当てできる。
インラインポリシーは個々のユーザ、グループ、ロールに直接設定する。
テンプレで管理するか、テンプレでは補えない細かーいところまで設定するか、みたいな違い？
テンプレもAWSが作成、管理してるAWS管理ポリシーと、IAM管理者が定義するカスタマー管理ポリシーがある。

## IAMポリシーの記述方法
JSON形式で、記載する。
設定項目は4つ。effect、action、resource、condition。

effect
これから書く操作を許可なのか拒否なのか、allow、denyで書く

action
操作。s3のばけっと作る。とかインスタンス作る。とか。書き込み、読み込みの話。

resource
ARN（アマゾンリソースネーム）で書く。
決り文句として最初に
arn:aws:
が付く。その後にサービス、リージョン、アカウント名、リソース名を記載する。
要するにどこの何かを書く。東京リージョンのs3とか。

conditionは有効になる条件を書く。
要するに対象者。IPがこれな人は上記条件が適用されるよ〜みたいな。

権限の算出方法は、ポリシー（ルール）が何もなければ全拒否。
一つでも拒否があれば拒否。許可のみなら許可。
基本拒否優先って感じ。明示的denyという。

## リソースベースのポリシー
今まではユーザー側のポリシーの話。こっちはリソース側のポリシー。s3のアクセスを特定のIPからのみにしたいときに使える。
さっきの4つに加えて、principalが増える。
ここに、対象になるAWSアカウント、ユーザーを書く。どこ所属の誰。
このアカウントのこのユーザーのこのIPの人は、s3のこの部分の読み取り権あげますよー！みたいな感じ。

## IAMロール
一番出てくるし重要な気がする。
アプリやAWSサービスに権限を与える仕組み。パスワード認証はなく、一時的にセキュリティ認証作成される。
EC2インスタンスにロールで権限付与すれば、EC2インスタンスのアプリからAWSサービスを操作できるぞ！
さっきいったアクセスキー、シークレットキーの流出リスクですが、ロール使えばアクセスキー不要のため、そもそも流出しないぞ！セキュアだね！
アプリを認証させたいときはアクセスキー使わずにロール設定してしまおう。
IAMロールを使うと、サービスからサービスにアクセスする許可も出せる。LambdaでS3に書き込む処理をしたいとき、その関数にロールつければ実現できる。

IAMロールを使う場合、さっきも出てきたけど一時的にセキュリティ認証情報を付与してくれる。STSという。アクセスキーいらず！って言ったけど、厳密にはSTS君が一時的にアクセスキーを作ってる。しかし一時的だからセキュリティリスクはないって感じ。

## switch Role
他の人のAWSアカウントは触れないといったな。あれは嘘だ。
触りたい対象のアカウントにロールを作って、触る側の人にロールをあげれば触れる。
ロールは帽子のマークなので、配達員を連想して、配達員になれば他人の家入れるよっていう覚え方で行こうと思う。
AssumeRoleってやつを呼び出してSTSから一時的にセキュリティ認証してるみたい。
これ使えば一つのアカウントでいろんなアカウントに入れるから便利。

## IDフェデレーション（連携）
要するに連携らしいけどパターンがありすぎて覚えるのがしんどい。ツイッターのIDでQiitaにログインできるよみたいな話。どれであっても、ロールによって一時的に認証してる。

|SAML2.0|IDプロバイダーがSAML2.0対応の場合|IAM SAML2.0 ID プロバイダーによるIDフェデレーション|ADFSを使用する|
|:------------:|:------------:|:--------------:|:--------------:|
|OpenID Connect|IDプロバイダーがOpenID Connect対応の場合|IAM OpenID Connect ID プロバイダーによるウェブIDフェデレーション|TwitterやFacebookのIDを利用できる|
|LDAP|IDプロバイダーがSAML2.0未対応の場合|カスタムIDブローカーを開発することで実装できる||
|AD(ADFSなし)|オンプレミスでActive Directoryを使用し、ADFSを使用していない場合|AWS Directory Service AD Connectorを使用することで直接IDフェデレーション可能|AWS Directory Service AD Connectorがユーザ認証をActive Directoryへリダイレクト|
|モバイル(ソーシャルID)|モバイルアプリがS3やDynamoDBなどのAWSリソースにソーシャルIDを利用してアクセスする場合|Amazon Cognitoを使用|Open ID ConnectとSALM2.0対応|


## セキュリティサービス
責任共有モデルといって、ここまでがAWS管理、ここまでがユーザー管理というのが決まってる。物理的なサーバ管理はAWS、ユーザのID管理はユーザ側など。

## AWS directory service
マネージド型のディレクトリサービス。3タイプある。

Simple ad
AWSクラウド上にあるドメコン。他のドメインとの信頼関係等の追加機能は利用できない。

AWS managed Microsoft ad
既存のオンプレのドメコンと、AWS側のこのドメコンを信頼関係に置くことによって、オンプレのドメコンのユーザーが、AWSのインスタンスにIDそのままで入れる仕組み。拡張機能は使用できる。

AD Connect
既存のオンプレのドメコンと、AWS側のこのドメコンを認証させることで、オンプレのドメコンのユーザーが、AWSマネジメントコンソールにアクセスできる仕組み。

AWS Single Sign_on
SSOはSAML2.0に対応してるクラウドベースのアプリケーションへのシングルサインオンができるサービス。
要するに、一回の認証ですべて使えるようにするよってこと。サービスごとに認証しなくていい。
ADと連携できる。使ったことなくてあんまピンとこないなあ…

## Amazon GuardDuty
悪意のある操作や不正な動作を調べてくれる。Lambdaと連携して自動修復実行もできる。

## Amazon Inspector
セキュリティ評価サービス。インスタンスの脆弱性とかで評価。使うにはエージェントをインスタンスに入れる。

## AWS Shield
DDoS攻撃から守ってくれる盾。スタンダードとアドバンストがある。スタンダードはリフレクション攻撃などの一般的に多いやつから守ってくれる。
アドバンストはアプリケーションも守ってくれる。また、DDoSによってコストが急上昇しても、それに備えるコスト保護がある。

## AWS WAF
ウェブアプリケーションファイアーウォールのこと。ウェブアプリケーションを攻撃から守ってくれる。
ちなみにShieldアドバンストを使ってれば無料になる。

## AWS KMS
キーマネージャーシステム。
そのまま、鍵の管理をしてくれる。ほかよーわからんです…。

## AWS CloudHSM
ハードウェアセキュリティモジュール。なにこれ。わからんけどセキュリティ系（適当）
はい。調べました。KMSと同じで鍵管理してくれるやつ。しかしハードウェア依存であり、セキュリティが高いらしい。米国政府の規格になるレベル。すげーKMSって感じ。

## Amazon Macie
機械学習によって、S3のなかの機密データを見つけてくれて、暗号化してくれるんだとか。また、それにアクセスしようとしたユーザの分析もしてくれる。

とりあえず以上。次はネットワーク。