AWS Certified Security - Specialtyに合格したよ！

# AWS Certified Security - Specialty合格したよ！
※記載内容に間違いあったらすいません

## 前提
私はこれが六つ目のAWS認定で、これを受ける前にアソシエイトとプロフェッショナルの資格を全て保持していました。
今回受験した理由として、AWSでシステムアーキテクチャを考える上でセキュリティの観点で1から勉強したく取得に踏み切りました。

本記事では私がAWS 認定セキュリティを受験するに当たって勉強した内容、教材と受けた感想を共有させて頂き、少しでもこれから受験する人の役に立てばと良いなと思ってます!


## 試験内容

AWS 認定セキュリティ – 専門知識は、最低 2 年間の AWS のワークロードの保護に関する実務経験を持つセキュリティ担当者である個人を対象としています。

**認定によって検証される能力**

- 専門的なデータ分類と AWS におけるデータ保護メカニズムについての理解
- データ暗号化メソッドと、AWS におけるその実装メカニズムについての理解
- 安全なインターネットプロトコルと、AWS におけるその実装メカニズムについての理解
- 安全な本番環境を実現するための、AWS のセキュリティサービスと機能についての実務知識
- AWS のセキュリティ関連のサービスと機能の使用に関する、2 年以上の本番デプロイ経験から得るコンピテンシー
- 一連のアプリケーション要件が指定された状況で、コスト、セキュリティ、デプロイの煩雑さについてトレードオフを考慮した決定を下せる能力
- セキュリティの運用とリスクについての理解

**推奨される知識と経験**

- AWS ワークロードの保護に関する最低 2 年間の実践経験
- AWS でのワークロードのセキュリティコントロール
- IT セキュリティ分野でセキュリティソリューションの設計と実装に従事した最低 5 年間の経験

KMS認定試験と言い換えても良いくらいKMSについて聞かれます（ちょい盛り）
基本的なIAMやS3のセキュリティ設計やWebアプリのセキュリティーなどについて聞かれ、SAPに似ていますがこちらの方が問題が易しかったです。

## 教材リスト

- [Exam Readiness: AWS Certified Security - Specialty (Japanese)](https://www.aws.training/Details/eLearning?id=45684)
  - 試験の内容を確認するのに活用しました。
  - AWSの認定はどれもこのシリーズでまずは勉強してみるのが良いかと思います
- [要点整理から攻略する『AWS認定 セキュリティ-専門知識』](https://www.amazon.co.jp/要点整理から攻略する『AWS認定-セキュリティ-専門知識』-NRIネットコム株式会社/dp/4839970947/ref=sr_1_14?__mk_ja_JP=カタカナ&crid=2CMGC3Q86XURD&dchild=1&keywords=aws+security&qid=1598078380&sprefix=AWS+sec%2Caps%2C253&sr=8-14)
    - 対象サービスの概要のおさらいと章末にある対策問題を活用させていただきました！
    - 各サービスについて重要な機能についてまとまっていて非常に読みやすいです。
- [tutorial dojo](https://tutorialsdojo.com/aws-certified-security-specialty-exam-study-path/)
    - 各サービスの対比やサービス毎に押さえるべき内容が整理されているので、試験の前に自分の知識の確認に使用しました。
- [AWSの薄い本　IAMのマニアックな話](https://www.amazon.co.jp/AWSの薄い本-IAMのマニアックな話-佐々木拓郎-ebook/dp/B085PZCMG2/ref=sr_1_1?__mk_ja_JP=カタカナ&dchild=1&keywords=aws+IAM&qid=1598080287&sr=8-1)
    - 試験ではIAMなどのポリシーのJSONでの書き方について問われることがわかっていたので、それ対策で読みました。
    - 大変よくIAMについてまとまっているので試験とは関係なく、業務でIAMを利用する人には是非読んでいただきたいです！
- [模擬試験](https://portal.tutorialsdojo.com/courses/aws-certified-security-specialty-practice-exams/)
    - Jon-Bonsoさんが作成している模擬試験で、問題毎に公式リファレンスのリンクと詳細な解答が記述されているので、非常におすすめです。
    - 受験する二週間くらい前から解いて、解答を確認のサイクルを繰り返し行ってました。


## 勉強方法
1. まずはセキュリティ認定がどのくらいの難易度でどのようにAWSについて聞かれるかを把握するため[Exam Readiness: AWS Certified Security - Specialty (Japanese)](https://www.aws.training/Details/eLearning?id=45684)を一周しました。
2. その後出題範囲のサービスについて確認するため[要点整理から攻略する『AWS認定 セキュリティ-専門知識』](https://www.amazon.co.jp/要点整理から攻略する『AWS認定-セキュリティ-専門知識』-NRIネットコム株式会社/dp/4839970947/ref=sr_1_14?__mk_ja_JP=カタカナ&crid=2CMGC3Q86XURD&dchild=1&keywords=aws+security&qid=1598078380&sprefix=AWS+sec%2Caps%2C253&sr=8-14)こちらを読ませて頂きました。ここで全てを理解しようとはせず、「ふむふむ、あ〜〜完全に理解したわ」くらいになればOKです。
3. その後[模擬試験](https://portal.tutorialsdojo.com/courses/aws-certified-security-specialty-practice-exams/)を通じてBlackbeltや各サービスのユーザガイド、開発者ガイドを読み込み知識の補完を行いました。その際に公式ドキュメントから忘れそうなことを下記のようにコピペしてメモりながらあとで見返せるようにしていました。
4. 認定試験前に自身でまとめたものを確認して終わり！

だいたい試験の1ヶ月くらい前から勉強を初めて、全部で15〜20時間くらい費やしました。



## サービス別要点整理
### VPC
**VPCフローログ**

送信元と送信先の IP アドレス、ポート、プロトコル、開始時刻と終了時刻、パケット数とバイト数、アクションをキャプチャする個々のレコードで構成されています。

これらは抽象化されたレコードであるため、完全なパケットの再構築はできません。

**フローログの例**

- アカウント `123456789010` のネットワークインターフェイス `eni-1235b8ca123456789` への SSH トラフィック (宛先ポート 22、TCP プロトコル) が許可されています。

  ```
  2 123456789010 eni-1235b8ca123456789 172.31.16.139 172.31.16.21 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK
  ```

  

- アカウント `123456789010` のネットワークインターフェイス `eni-1235b8ca123456789` への RDP トラフィック (宛先ポート 3389、TCP プロトコル) が拒否されています。

  ```
  2 123456789010 eni-1235b8ca123456789 172.31.9.69 172.31.9.12 49761 3389 6 20 4249 1418530010 1418530070 REJECT OK
  ```

  





### Amazon S3

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/security-best-practices.html#transit

**データアクセス保護**

- オブジェクトACL
  - ここのオブジェクトへのアクセス権限を付与
  - 別のアカウントが所有するオブジェクトにアクセスする
- バケットACL
  - ログ配信グループにバケットへの書き込みアクセスを付与する
- バケットポリシー
  - バケットACLよりも幅広いアクセス権限を付与する
  - バケットへのクロスアカウントアクセスを許可する
- IAMユーザーポリシー
  - ユーザとグループを作成し、ポリシーを添付してアクセス権限を管理する



**デフォルトの暗号化**

- バケットにデフォルトの暗号化を設定することで、バケットに保存されているときにすべてのオブジェクトが暗号化されるようにすることができます。

- オブジェクトは、Amazon S3管理鍵(SSE-S3)またはAWS Key Management Service(AWS KMS)、顧客マスター鍵(CMKs)のいずれかを使用してサーバーサイド暗号化を使用して暗号化されます。サーバーサイド暗号化を使用する場合、Amazon S3はオブジェクトをデータセンターのディスクに保存する前に暗号化し、オブジェクトをダウンロードする際に復号化します。
- デフォルトの暗号化は、既存のすべてのAmazon S3バケットと新しいAmazon S3バケットで動作します。
- デフォルトの暗号化がない場合は、バケットに保存されているすべてのオブジェクトを、オブジェクトの保存要求ごとに暗号化するための暗号化情報を含める必要があります。また、**暗号化情報を含まないストレージリクエストを拒否するために、Amazon S3バケットポリシーを設定する必要があります。**



セキュアにアクセスしてるか確認

- バケットポリシーでHTTPまたはHTTPSリクエストを判断するには、キー「aws:SecureTransport」をチェックする条件を使用。

  ```      "Condition": {        "Bool": {          "aws:SecureTransport": "false"        }```





### Amazon S3 Glacier

**アーカイブデータの長期保存とオブジェクトの迅速な取得**

- 自動データ転送を対象とするAmazon S3ライフサイクルルール
- データは取得後24時間使用が可能
- データは一括で、またはセグメント単位で取得が可能



**ボールトロック**

- 時間ベースの保持
- MFA認証のサポート
- ロック後はポリシーの変更不可
- Write Once Read Many（WORM)のサポート



### Amazon RDS

**転送中のデータ保護**

- TLSとネイティブ暗号化クライアントを使用
- AmazonRDSがアクセス認証を処理

**保管中の保護**

- AES-256暗号化アルゴリズムを使用
- DBの作成時に暗号化を有効にすること可能
  - 作成後は有効にすることができない
- 特定のDBエンジンでTDEをサポート



### Amazon DynamoDB

**転送中のデータ保護**

- TLSで暗号化されたエンドポイントを使用
- HMAC-SHA256署名付きのリクエストのみを許可

**保管中の保護**

- CSEまたはSSE暗号化オプションをサポート
- AES-256暗号化アルゴリズムを使用
- テーブルとインデックスを暗号化

**Amazon DynamoDB Encryption Client**

- テーブルデータをAmazon DynamoDBに送信する前にテーブルデータを保護するのに役立つソフトウェアライブラリ
- トランジット時と休止時に機密データを暗号化することで、平文データがAWSなどの第三者に公開されないようにすることができます
- クライアント側の暗号化をサポートしており、テーブルデータをDynamoDBに送信する前にテーブルデータを暗号化します
- デフォルトでは、DynamoDBはDynamoDBサービスアカウントでAWS所有のCMKを使用しますが、一部またはすべてのテーブルにAWS管理されたCMKをアカウントで使用することを選択することができます

### Amazon Cognito
#### **Amazon Cognito Identity Pool**（認可）

ユーザーが一時的にAWSの資格情報を取得して、Amazon S3やDynamoDBなどのAWSサービスにアクセスすることを可能にします。アイデンティティプールは匿名のゲストユーザーをサポートしているほか、プールのユーザーを認証するために使用できる様々なアイデンティティプロバイダをサポートしています。

アイデンティティプールを利用してユーザーに固有のアイデンティティを作成し、他のAWSサービスへのアクセス権を与えることができます。

#### Amazon Cognito User Pool（認証）

Amazon Cognitoのユーザーディレクトリです。ユーザープールを使用すると、ユーザーはAmazon Cognitoを介してWebまたはモバイルアプリにサインインしたり、サードパーティのIDプロバイダ(IdP)を介してフェデレートすることができます。ユーザーが直接サインインしても、サードパーティを介してサインインしても、ユーザープールのすべてのメンバーはディレクトリプロファイルを持っており、SDKを介してアクセスできます。

グループの作成と管理、グループへのユーザーの追加、グループからのユーザーの削除を可能にする「グループ」をサポートしています。グループを使用して、ユーザーの権限を管理するためのユーザーのコレクションを作成したり、異なるタイプのユーザーを代表するために使用します。グループにAWS Identity and Access Management（IAM）ロールを割り当てて、グループのメンバーのパーミッションを定義することができます。グループを使用してユーザープールにユーザーの集合体を作成することができますが、これは、そのユーザーのパーミッションを設定するために行われることが多いです。



###  Amazon Route53

**DNS**

- 高い可用性と信頼性
- 他のAWSサービスと連携できる
- 優れた柔軟性とスケーラビリティ
- 安全性

### Amazon CloudFront

低レイテンシーで安全にデータを配信する高速コンテンツ配信ネットワークサービス（CDN）

- 高速アンドグローバル
- エッジでのセキュリティ
- 高度なプログラムが可能
- 様々なAWSサービスとの統合が可能



**ACM証明書の使用**

- Amazon CloudFrontでACM証明書を使用するには、**US East（N. Virginia）リージョンで証明書をリクエストする**か、インポートする必要があります
- CloudFrontのディストリビューションに関連付けられたこのリージョンのACM証明書は、そのディストリビューションに設定されたすべての地理的ロケーションに配布されます



### AWS WAF

ウェブアプリケーションの保護に役立つファイアウォール

- ウェブ攻撃からの保護の強化
- AWSの他のサービスと統合したセキュリティ
- 向上したウェブトラフィック可視性
- マネージドルールによるセキュリティ強化





### AWS Shield

AWSのすべての顧客を追加料金なしで保護

- ほとんどのネットワークおよびトランスポートレイヤーへの攻撃を防御
- セキュリティを高めるために、AWS Shield Advancedを追加することもできる($3000)
- マネージド型の分散型サービス（DDoS）保護サービス
- 常時検知機能と自動インラインミティゲーション機能を提供し、アプリケーションのダウンタイムやレイテンシを最小限に抑える



**Advanced**

- Standardに搭載されているネットワーク層とトランスポート層の保護に加えて、大規模かつ高度なDDoS攻撃に対する検知と緩和、攻撃に対するほぼリアルタイムの可視性、Webアプリケーションファイアウォールである**AWS WAFとの統合**が可能。



### AWS Config

**リソースが独自のセキュリティポリシー、業界のベストプラクティス、準拠企画に準拠しているかどうかを確認できるようにする**

- リソースの全設定変更についての詳細情報を継続的にキャプチャ
- コンプライアンスモニタリングとセキュリティ分析を有効化
- セキュリティを侵害するような設定変更を特定し、影響を軽減できる
- すべてのリソースのリストを取得できる

- AWSマネージドルール
  - AWSによる定義と管理
  - 設定は最小限または不要
- カスタムルール
  - Lambdaの使用
  - お客様による管理が必須



### Amazon SES

**暗号化について**

- Amazon SESは、TLSで暗号化された接続を確立するための2つのメカニズムをサポートしています
  - STARTTLS
  - TLS Wrapper
- TARTTLSは、暗号化されていない接続を暗号化された接続にアップグレードするための手段です。STARTTLS接続をセットアップするには、**SMTPクライアントはポート25、587、または2587のAmazon SES SMTPエンドポイントに接続**し、EHLOコマンドを発行し、サーバーがSTARTTLS SMTP拡張をサポートしていることをアナウンスするのを待ちます。クライアントはSTARTTLSコマンドを発行し、TLSネゴシエーションを開始します。ネゴシエーションが完了すると、クライアントは新しい暗号化された接続上でEHLOコマンドを発行し、SMTPセッションは正常に進行します。



### AWS CloudTrail

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/best-practices-security.html

ユーザー、ロール、またはAWSサービスによって行われたアクションは、CloudTrailにイベントとして記録されます。イベントには、AWS Management Console、AWS Command Line Interface、AWS SDKやAPIで行われたアクションが含まれます。

- CloudTrailはAWSアカウント作成時に有効になる
- 過去90日間のアクティビティを表示、検索、ダウンロードができる
- CloudTrailで記録できるイベントには、管理イベントとデータイベントの2種類があり、デフォルトでは、トレイルには管理イベントは記録されますが、データイベントは記録されません。



**ログファイルの暗号化**

- CloudTrailからバケットに配信されるログファイルは、Amazon S3が管理する暗号化キー(SSE-S3)を使用したAmazonサーバーサイド暗号化で暗号化されています
- AWS KMS管理鍵(SSE-KMS)によるサーバーサイド暗号化を有効にすると、ログファイルは暗号化されますが、SSE-KMSを使用したダイジェストファイルは暗号化されないことに注意してください。
- **ダイジェストファイルはAmazon S3管理暗号化キー(SSE-S3)で暗号化**されます
  - ユーザーは、ログファイルが格納されているバケットのS3読み取り権限を持っている必要があります
  - ユーザーはCMKポリシーで復号化のパーミッションを許可するポリシーまたはロールを適用している必要があります
  - 選択したCMKは、ログファイルを受け取るAmazon S3バケットと同じAWSリージョンに作成する必要があります
  - https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/encrypting-cloudtrail-log-files-with-aws-kms.html



**CloudTrailのTrail**

- **Read/Write events**

  - 証跡情報のログを記録する場合は [**All**]、[**Read-only**]、[**Write-only**]、または [**None**] を選択して、[**Save**] を選択します。デフォルトでは、証跡はすべての管理イベントを記録します。詳細については、「[管理イベント](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html#logging-management-events)」を参照してください。

- **AWS KMS イベントの記録**

  - 通常、`Encrypt`、`Decrypt`、`GenerateDataKey` などの AWS KMS アクションは、大容量イベント (99% 以上) を生成します。これらのアクションは、[**Read (読み取り)**] イベントとしてログに記録されるようになりました。`Disable`、`Delete`、`ScheduleKey` などの少量の関連する AWS KMS アクション (通常は AWS KMS イベントボリュームの 0.5% 未満) は、[**Write (書き込み)**] イベントとしてログに記録されます。

    `Encrypt`、`Decrypt`、`GenerateDataKey` などの大容量イベントを除外するが、`Disable`、`Delete`、`ScheduleKey` などの関連イベントを引き続きログに記録するには、[**書き込み専用**] 管理イベントをログに記録するよう選択し、[**Log AWS KMS events**] で [**はい**] を選択します。

**Trailの種類**

- すべてのリージョンに適用するトレイル 
  - CloudTrailは各リージョンのイベントを記録し、CloudTrailのイベントログファイルを指定したS3バケットに配信する。
  - すべてのリージョンに適用するトレイルを作成した後にリージョンを追加すると、その新しいリージョンが自動的に含まれ、そのリージョン内のイベントが記録される

- 1つのリージョンに適用されるトレイル 
  - CloudTrailはそのリージョン内のイベントのみを記録します。その後、CloudTrailのイベントログファイルは、指定したAmazon S3バケットに配信されます。
  - 追加の単一トレイルを作成した場合、CloudTrailイベントログファイルを同じAmazon S3バケットに配信したり、別のバケットに配信したりすることができます。これは、AWS CLIまたはCloudTrail APIを使用してトレイルを作成する際のデフォルトのオプション。
- AWS Organizationsで組織を作成している場合は、その組織内のすべてのAWSアカウントのすべてのイベントをログに記録するトレイルを作成することもできます。





**Cloud wathe Logs**

- イベントをCloudWatch Logsに送信するようにトレイルを設定することができる
- CloudWatch Logsを使用して、特定のAPIの呼び出しやイベントについてアカウントを監視することができます。イベントをCloudWatch Logsのロググループに送信するようにトレイル（すべてのリージョンに適用される）を設定した場合、CloudTrailはすべてのリージョンのイベントを1つのロググループに送信することに注意
- トレイルのログを監視し、特定のアクティビティが発生したときに通知を受けることができる



### AWS GuardDuty

**脅威検知サービス**

- CloudTrail,DNSログ,VPCフローログからデータを収集
- 悪意のある操作や不正な動作を継続的にモニタリングし、AWSアカウントとワークフローを保護
- 脅威の可能性が検出されると、GuardDutyコンソールとCloudWatchに詳細なセキュリティアラートが配信さる

- 複数のアカウント間での有効化と管理を容易にします。マルチアカウント機能により、すべてのメンバーアカウントの調査結果をGuardDuty管理者アカウントで集約することができます。これにより、セキュリティチームは、組織全体からのすべてのGuardDutyの調査結果を1つのアカウントで管理することができます。**集計された調査結果はCloudWatch Eventsでも利用できる**ため、既存の企業イベント管理システムとの統合が容易になります。
- AWS環境のEC2インスタンスがブルートフォース攻撃に関与したことを通知することができます。これにより、Linuxベースのシステム上でSSHサービスのパスワードを取得することを目的とした攻撃からAWSのリソースを保護することができます。



**アカウントの招待**

- 他のアカウントを招待してGuardDutyを有効にし、自分のAWSアカウントと関連付けられるようにすることができます。
  - 招待を受け入れると、自分のアカウントがマスターのGuardDutyアカウントとして指定されます。
  - 招待を受け入れたアカウントは、マスターアカウントに関連付けられたメンバーアカウントになります。
  - マスター アカウントのユーザーは、GuardDuty を設定したり、自分のアカウントと関連するすべてのメン バー アカウントの GuardDuty の調査結果を表示および管理したりすることができます。
  - マスターアカウントはメンバー アカウントに代わって GuardDuty の調査結果を表示し、管理することができます。GuardDutyでは、マスターアカウント（リージョンごと）に最大1000個のメンバーアカウントを持つことができます。

- マスターアカウントができること
  - GuardDuty を設定したり、自分のアカウントと関連するすべてのメン バー アカウントの GuardDuty の調査結果を表示および管理したりすることができます。
  - 自分のアカウントでサンプル調査結果を生成できます。マスター アカウントのユーザーは、メンバーのアカウントにサンプル調査結果を生成することはできません。
  - 自分のアカウントとすべてのメンバーアカウントの調査結果をアーカイブすることができます。
  - 自分のアカウントで信頼できる IP リストと脅威リストをアップロードして管理することができます。
- メンバーアカウントができることできないこと
  - メンバー アカウントのユーザは、GuardDuty を構成したり、**アカウント内の** GuardDuty の調査結果を表示および管理したりできます。
  - GuardDuty を構成したり、マスター アカウントや他のメンバー アカウントの所見を表示したり管理したりすることは**できません。**
  - 自分のアカウント、マスターのアカウント、または他のメンバー アカウントに調査結果をア**ーカイブすることはできません**。
  - 信頼できるIPリストおよび脅威リストをアップロードしたり、管理したりすることが**できません**。
  - マスター アカウントによってアップロードされた信頼できる IP リストと脅威リストは、メンバー アカウントの GuardDuty 機能に課せられます。

### AWS Inspetor

AWS上に展開されたアプリケーションのセキュリティとコンプライアンスの向上を支援する自動セキュリティ評価サービスです。Amazon Inspectorは、アプリケーションの暴露、脆弱性、ベストプラクティスからの逸脱がないかどうかを自動的に評価します。評価を実行すると、Amazon Inspectorはセキュリティに関する調査結果の詳細なリストを作成し、重要度のレベル別に優先順位を付けて表示します。これらの調査結果は、直接確認することも、Amazon InspectorのコンソールやAPIから入手できる詳細なアセスメントレポートの一部として確認することもできます。

EC2に対してセキュリティ検査が可能

- 共通脆弱性識別子（CVE）
- CISベンチマーク
- セキュリティのベストプラクティス
- ランタイム動作分析

### Amazon Macie

Amazon S3に保存されているセンシティブなデータを自動的に検出、分類、保護することで、データの損失を防ぐことができる、MLを活用したセキュリティサービスです。Amazon Macieは機械学習を使用して、個人を特定できる情報（PII）や知的財産などのセンシティブなデータを認識し、ビジネス価値を割り当て、このデータがどこに保存されているか、組織内でどのように使用されているかを可視化します。

データアクセスアクティビティの異常を継続的に監視し、不正アクセスや不注意によるデータ漏洩のリスクを検知した場合にはアラートを配信します。Amazon Macieは、機密データに不用意に設定されたグローバルなアクセス許可を検出したり、ソースコード内のAPIキーのアップロードを検出したり、機密性の高い顧客データがコンプライアンス基準を満たす方法で保存およびアクセスされているかどうかを検証したりする機能を備えています。



### AWS Key Management Service

**AWS KMSは、キーの保管と管理、およびデータの暗号化を目的とするマネージド型の暗号化サービスである。**

- エンベロープ暗号化を使用した2層のキー階層
- キーを一元的に管理し、セキュリティを保護
- キーを使用できるユーザを使用ポリシーで決定
  - 暗号鍵に付与されるDefaultPolicyはrootアカウントに対してすべての権限を持つ



- キーをインポートする
  - キーをエクスポートすることはできない
  - 256ビットの対象鍵のみインポート可能
  - インポートした鍵は自動ローテーションできない
  - リージョン障害の場合、自動復旧されない
- 既存の CMK キーはそのままローテーションできない
- キーローテーションが無効になっている場合でも、CMKのすべてのバッキングキーを保持します。バッキングキーが削除されるのは、CMKが削除されたときだけです。
- 顧客管理のCMKでは、自動キーローテーションはデフォルトで無効になっています。キーローテーションを有効化（または再有効化）すると、AWS KMSは有効化日から365日後、それ以降は365日ごとにCMKを自動的にローテーションします。



**RDSの暗号化について**

- Amazon RDSリソースの暗号化と復号化に使用する鍵を管理するには、AWS Key Management Service (AWS KMS)を使用します。
- Amazon RDSで暗号化されたDBインスタンスの場合、ログ、バックアップ、スナップショットはすべて暗号化されています。
- Amazon RDSで暗号化されたインスタンスのリードレプリカも、**両方が同じAWSリージョン内にある場合**は、マスターインスタンスと同じ鍵を使って暗号化されます。マスターとリードレプリカが異なるAWSリージョンにある場合は、**そのAWSリージョンの暗号化キーを使用して暗号化します。**
- **AWS KMSで生成されたキーは、作成されたリージョンにのみ保存**され、使用されます。他のリージョンに転送することはできません。例えば、EU-Central (Frankfurt)リージョンで作成された鍵は、EU-Central (Frankfurt)リージョン内でのみ保存・使用されます。



**転送中のデータの保護**

トラフィックが暗号化され、HTTPS経由でデータの整合性が認証される

- クライアントとサービスエンドポイント間にTLSセッションを確立する
- パブリックキーインフラストラクチャ（PKI）内でX.509証明書を使用する
- 証明書によりサーバのアイデンティティを検証し、改竄や偽造を防止する



**暗号処理手順**

1. データキーを作成
   - KMSはデータキーと暗号化されたデータキーの両方を返す
2. データキーはアプリケーションのメモリ上に配置し、データの暗号化に利用
   - データキーの管理はアプリケーション側
     - **平文のデータキーは、決してディスクに置いてはならない**
     - **暗号化処理が終了したら即座に削除**
3. 暗号化されたデータキーは暗号化されたデータとともに保存する
   - 管理を容易にするため

**複合処理手順**

1. アプリケーションから暗号化されたデータキーをKMSに送信
2. KMSは該当するマスターキーを利用してデータキーを複合し、アプリケーションに返す
3. アプリケーションでデータキーを使ってデータを複合する
   - この際に平文のデータキーの取扱注意



**データの暗号化の選択肢**

- Client-Side Encryption
  - ユーザアプリケーションでのデータ暗号化にKMSを利用
    - 各種AWSSDKを利用する
  - より上位のSDKやクライアントを利用するレバ、Envelop Encryptionを容易にバンドル可能
- Server-Side Encryption
  - AWSの各種サービスとインテグレーションされている
  - AWSサービスでデータが受信された後にサービスがKMSを利用してデータを暗号化





### AWS Certificate Manager

- 単一のインターフェイスを備え、パブリック証明書とプライベート証明書の両方を管理する
- 証明書のデプロイを容易にする
- プライベート証明書を保護および保存する
- 自動更新によりダウンタイムを最小限に抑える





### Amazon Sercets Manager

**AWS Secrets Managerは、アプリケーション、サービス、ITリソースへのアクセスに必要なシークレットの保護に役立ちます**

- シークレットを安全にローテする
- アクセスの管理
- 一元的なセキュリティと監査
- 従量課金制



**RDS のクレデンシャル**

- クレデンシャルのタイプとしてCredentials for RDSデータベースを使用してローテーションを有効にすると、Secrets Managerは自動的にLambdaローテーション関数を作成して設定します。
- その後、関数の Amazon リソース名 (ARN) をクレデンシャルに装備します。
- Secrets Manager は、関数に関連付けられた IAM ロールを作成し、必要なすべての権限を持つロールを設定します。または、別のシークレットで同じローテーション戦略を使用していて、新しいシークレットで同じローテーションを使用したい場合は、既存の関数の ARN を指定して、両方のシークレットで使用することができます。



### AWS System Manger

#### AWS Systems Manager Patch Manager

管理されているインスタンスにセキュリティ関連のアップデートのパッチを適用するプロセスを自動化します。Linuxベースのインスタンスの場合は、セキュリティ関連以外のアップデートのパッチをインストールすることも可能です。Amazon EC2インスタンスのフリートやオンプレミスのサーバーや仮想マシン（VM）に、オペレーティングシステムの種類ごとにパッチを適用することができます。

インスタンスをスキャンして欠落しているパッチのレポートのみを表示することも、スキャンして欠落しているすべてのパッチを自動的にインストールすることもできます。



#### AWS Systems Manager Parameter Store

セキュアな文字列パラメータを作成することができます。セキュアな文字列パラメータとは、平文のパラメータ名と暗号化されたパラメータ値を持つパラメータのことです。Parameter Storeでは、AWS KMSを利用して、セキュアな文字列パラメータのパラメータ値を暗号化・復号化します。

機密性の高いデータを管理するために、セキュアな文字列パラメータを作成することができます。AWS KMSのカスタマーマスターキー(CMK)を使用して、セキュアな文字列パラメータの作成時や変更時にパラメータ値を暗号化します。また、アクセスした際にもCMKを使用してパラメータ値を復号化します。Parameter Storeがアカウント用に作成したAWS管理のCMKを使用することもできますし、独自の顧客管理CMKを指定することもできます。**Parameter Storeは対称CMKのみをサポートしています。非対称CMKを使用してパラメータを暗号化することはできません。**



**CMKに関連したParameterStoreの失敗原因**

- アプリケーションが使用している資格情報がCMKで指定されたアクションを実行する権限を持っていない
  - 別の資格情報でアプリケーションを実行するか、操作を妨げているIAMまたはキーポリシーを修正する
- CMK が見つかりません
  - CMK に誤った識別子を使用した場合に発生します。CMK の正しい識別子を見つけて、コマンドを再試行する
- CMKが有効になっていない
  - これが発生すると、パラメータストアはInvalidKeyId例外を返し、AWS KMSから詳細なエラーメッセージが表示されます。CMKの状態がDisabledの場合は、有効にしてください。インポートを保留中の場合は、インポート手順を完了させます。キーの状態が Pending Deletion の場合は、キーの削除をキャンセルするか、別の CMK を使用する
- アカウントに割り当てられたAWS管理CMKの代わりに顧客管理CMKを使用するには、--key-idパラメータを使用してキーを指定する必要がある。



## セキュリティ別対応例

### IAMキーの流出

1. 認証情報を失効させる

   1. 公開された認証情報を無効化
   2. 必要に応じてアクセスキーを削除

2. IAMの許可を取り消す

   1. IAMを拒否するポリシーをユーザにアタッチする
   2. 未処理のセッションを全て取り消す

3. IAMアクセスキーのソースを確認

   1. どのユーザに割り当てられているか
   2. そのキーのポリシーの範囲を調査

4. 整合性を確認して、影響範囲を調査

   1. CloudTrailとAWS Configを使用して、変更されたものがないか確認
   2. 他のIAMアクセスキーや認証情報が問題にならないかチェック
3. Amazon CloudWatch Logのクエリを使用してAPIの履歴を検索する
   
   



### 特定の EC2 インスタンス間で送受信されるトラフィックの完全なパケット分析を実行したい

- バケットキャプチャとルートテーブルをサポートするAWS Market placeのAMIを使用してトラフィックをルーティングする必要がある
- VPCフローログだと完全なバケットの再構築をできない



### PCを紛失して、SSHキーが流出したときの対処

-  AWS Systems ManagerのRunコマンドを使用して、影響を受けたすべてのEC2インスタンスの`~/.ssh/authorized_keys`ファイルを修正します。
- SSH秘密鍵に関連付けられているファイル内のすべての公開鍵を削除します。

具体的な手順：https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/replacing-lost-key-pair.html



### IAM /Userのアクセスキーの期限付き削除方法

- AWS Configを使って古いアクセスキーを検出することもできる。ただし、アクセスキーを無効にするためには、Systems Manager Automationを使用してカスタムの修復アクションを作成する必要がある
- AWS Configが監視して通知してくれるのは、アカウント内に不適合なキーがある場合のみ
- AWS Configにはaccess-keys-rotatedという管理ルールがあり、maxAccessKeyAgeで指定した日数内にアクティブなアクセスキーがローテーションされているかどうかをチェックしています。アクセスキーがmaxAccessKeyAgeで指定した日数以上ローテーションされていない場合、ルールは非準拠としてタグ付けされます。
- GenerateCredentialReport APIを呼び出してクレデンシャル・レポートを生成するLambda関数を開発する
- GetCredentialReport APIを使用してレポートをダウンロードし、CSVファイルを解析し、user_creation_timeが90日以上の鍵をチェックするように関数を構成し、UpdateAccessKey APIを使用して古いアクセスキーを無効にします



### CloudWatch Logs AgentがAmazon CloudWatch Logsへのログデータのプッシュを停止した場合

- /var/log/awslogs.log ファイルを確認。エラーメッセージをチェック。

- ログファイルに情報メッセージのみが含まれる場合は、エージェント構成ファイルの logging_config_file オプションに低いロギングレベルを指定

- ログのローテーション後にログがプッシュされなくなった場合は、サポートされているログのローテーション方法を確認

- awslogsエージェントを再起動した後、ログが短時間しかプッシュされない場合は、エージェント設定ファイルの[logstream]セクションで重複していないか確認、各セクションには一意の名前を付ける必要あり

- https://aws.amazon.com/jp/premiumsupport/knowledge-center/push-log-data-cloudwatch-awslogs/

  

### **サードパーティが組織のAWSリソースへのアクセスを必要とする場合**

- IAMロールを使用してアクセスを委任することができる
- [クロスアカウントアクセスのロール]-[所有しているAWSアカウント間のアクセスを提供します]を選択し、許可するアカウントのIDを入力してIAMロールを作成



### AWS KMSキーを含むアップロードリクエストで大きなファイルをS3バケットにアップロードしようとしたときにAccess Deniedエラーが発生する

- オブジェクトを暗号化するために使用しているAWS KMSキーに対して**kms:Decryptアクションを実行する権限**を持っていることを確認する必要がある
- kms:Encrypt、kms:ReEncrypt*、kms:GenerateDataKey*、kms:DescribeKeyのアクションに対しても権限が必要



### セキュリティグループとネットワークACLが受信トラフィックを許可しているのに、サービスに接続できない場合

- インスタンスで実行されているサービスへの接続を有効にするには、関連付けられたネットワークACLで、サービスがリッスンしているポートでの受信トラフィックと、エフェメラルポートからの送信トラフィックの両方を許可する必要があります。
- クライアントがサーバーに接続すると、一時ポート範囲（1024〜65535）のランダムなポートがクライアントのソースポートになります。
- 指定された一時ポートは、サービスからの戻りトラフィックの宛先ポートになるため、一時ポートからの送信トラフィックはネットワークACLで許可する必要があります。



### Amazon RDS データベースシークレットのローテーションを有効にする場合

- Lambda 関数は、**データベースと通信**できる必要がある
- Lambda 関数は、**Secrets Manager サービスエンドポイントと通信**できる必要がある


## 受験した感想
認定試験の結果は831点で合格でした！！
AWSを扱う上で共有責任モデルの私たち側で守るべき要件について再度見直すことができ、仕事に生かせる良い認定試験だと感じました！

次はData Analytics認定を受けようかと考えています！