AWS Serverless デジタルバッジを取得する⑥　セキュリティ・オブザーバビリティ編






[このデジタルバッジ](https://aws.amazon.com/jp/blogs/news/introducing-new-aws-serverless-digital-learning-badges/)取得のために、AWS Skill Builderの[このコース](https://explore.skillbuilder.aws/learn/lp/1585/serverless-learning-plan-japanese)を学習している記録

自分のスキルレベルは以下。
- SAAは取得
  - 4年前ぐらい
- 実務利用なし
  - 趣味レベルではあり





# Security and Observability for Serverless Applications (Japanese) (Sub) 日本語字幕版
https://explore.skillbuilder.aws/learn/course/14174/security-and-observability-for-serverless-applications-japanese-sub-ri-ben-yu-zi-mu-ban;lp=1585




# サーバーレスアーキテクチャの保護

- セキュリティのベストプラクティスは不変
  - 参考資料に記載の内容を確認すること。
- 責任共有モデル
  - インフラサービスと抽象蚊サービスとでは、範囲が異なる。
    - 抽象化では以下のみ
      - ユーザーのデータ
      - クライアント側の出の暗号化
      - ユーザーとAWSの経路上
- セキュリティに関する 3 つのベストプラクティス
  - 最小権限の原則に従う。
  - 保管中と転送中のデータを保護する。
  - 変更、予期しないアクセス、異常なパターン、エラーがないかシステムを監査する。
- API Gateway のオプション活用
  - AWS Identity and Access Management (IAM)
    - AWS環境内での利用
  - Amazon Cognito
    - IdPがないと優位
  - Lambda オーソライザー
    - IdPがあると優位



### 参考資料
[セキュリティ、アイデンティティおよびコンプライアンスのベストプラクティス](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=item.additionalFields.sortDate&cards-all.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all)
[OWASP Secure Coding Practices Quick Reference Guide](https://www.owasp.org/images/0/08/OWASP_SCP_Quick_Reference_Guide_v2.pdf)



## 転送中および保管中のデータを保護する

- Amazon API Gateway は HTTPS 経由で通信
  - しかし、リクエストパスや URL の一部であるクエリ文字列などは暗号化されない可能性があるため、クライアント側でペイロードを暗号化する必要があり。
  - ユーザーに入力と出力に対する責任はあり。
    - 書いたものは暗号化
- Lambdaへのアクセス保護
  - 基本はIAMでの制御
- Lambdaへのデータを渡すオプション
  - 環境変数
  - AWS Systems Manager Parameter Store の値
  - AWS Secrets Manager の値
- データストアの暗号化オプション
  - 以下テーブル

| データストア                            | 保管中の暗号化                                                                                                                  |
|---------------------------------------|----------------------------------------------------------------------------------------------------------------|
| Amazon Simple Storage Service (Amazon S3)  | 次のいずれかを使用してサーバー側の暗号化を構成します。<br>Amazon S3 で管理するキー (SSE-S3)<br>AWS KMS に保存された AWS KMS キー (SSE-KMS)<br>お客様が提供するキー (SSE-C) |
| Amazon DynamoDB                        | すべてのデータが AWS KMS に保存されている暗号化キーを使用して保存時に完全に暗号化されます。<br>テーブルを作成するときに、AWS サービスキーまたはカスタマー管理キーを選択します。                     |
| Amazon ElastiCache for Redis           | 保管中にサービス管理の暗号化を使用するか、AWS KMS を使用してカスタマー管理の AWS KMS キーでオプションの暗号化を適用します。                                              |


## サーバーレスデータ保護のベストプラクティス（原文ママ）


- AWS マネージドサービスを利用すると、管理する必要があるセキュリティ負荷を軽減できることを認識してください。
- 分散アーキテクチャの各統合ポイントでエンドツーエンドのセキュリティについて検討します。
- 範囲を絞った IAM アクセス許可とロールを使用して Lambda 関数と他の AWS のサービスへのアクセスを保護します。
- 範囲を絞ったアクティビティを実行し、関数間で IAM ロールを共有しない、より小さい Lambda 関数を作成します。
- Lambda 関数でデータを渡すには、環境変数、AWS Systems Manager Parameter Store、または AWS Secrets Manager を使用します。



## セキュリティサービスまとめ
※確認テストの内容がイマイチ腑に落ちてないのでメモ。


- AWS Lambda オーソライザー
  - カスタムビジネスロジックを使用
- Amazon Cognito 
  - ユーザーがサードパーティーアプリケーションを使用してサインインできる
- AWS WAF 
  - 特定リージョンからのトラフィックをブロック
- AWS Secrets Manager 
  - 複数の AWS アカウント間で機密情報の共有
- AWS Systems Manager Parameter Store 
  - 単一の AWS アカウントでの機密情報の共有
- AWS IAM 
  - サービス・ユーザー単位でのアクションを制限


# サーバーレスアプリケーションのオブザーバビリティ

## オブザーバビリティとは



「オブザーバビリティ（Observability）」は、「Observe （観察する）」と「Ability （能力）」の組み合わせから示す通り、
日本語では「可観測性」や「観察する能力」と翻訳されています。

メリットは主に以下。
- システム状態の即時把握による、問題への迅速な初動対応
- ユーザーに対するサービスレベルの維持が容易になる



### 参考
https://www.business-on-it.com/2005-observability/#:~:text=%E3%80%8C%E3%82%AA%E3%83%96%E3%82%B6%E3%83%BC%E3%83%90%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%EF%BC%88Observability%EF%BC%89%E3%80%8D,%E3%81%A8%E7%BF%BB%E8%A8%B3%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82



## オブザーバビリティの 3 つの柱

- 確認観点
  - 疎結合サービスの死活監視
  - パフォーマンスのボトルネックの特定
  - ユーザー側のパフォーマンス測定
  - 重要業績評価指標 (KPI) およびサービスレベルアグリーメント (SLA) 達成の確認。
- 確認手法
  - モニタリング
  - これが３つの柱
    - モニタリング
    - トレース
    - ログ
- まとめ
  - 構築し、測定し、学び、繰り返すことが大切
    - サービスに組み込まれているメトリクス理解
    - 負荷テストのパターン特定
      - それによるしきい値の設定とログ設計。
    - ロギングとカスタムメトリクスの繰り返し。
    - 自動化範囲の拡張。
      - 単純作業の減少
      - アプリケーションが潜在的な脅威にさらされる時間の短縮

## サーバーレスアプリケーションのモニタリング
- CloudWatch メトリクス
  - ビジネスメトリクス
  - カスタマーエクスペリエンスメトリクス
  - システムメトリクス
  - 運用メトリクス
- CloudWatch Logs
  - Lambdaログ
  - API Gateway実行ログとアクセスログ
  - CloudWathe EMF
- CloudWatch Logs Insights
- CloudWatch Lambda Insights

## Lambda の拡張機能

- 関数の呼び出し前、呼び出し中、呼び出し後に診断情報を取得する
- コードを変更することなくコードを自動的にインストルメント化する
- 関数の呼び出し前に構成設定または機密情報を取得する
- セキュリティエージェントを通じて関数アクティビティを検出し、アラートを発出する
- テレメトリを Amazon S3、Amazon Kinesis、Amazon OpenSearch Service などのカスタム送信先に直接および Lambda 関数から非同期に送信する



## サーバーレスアプリケーションの追跡



| 統合するサービス | アクティブ計測 | パッシブ計測 |
| --- | --- | --- |
| | 受信リクエストをサンプリングして計測する | 他のサービスによってサンプリングされたリクエストを計測する |
| | X-Ray へトレースを書き込む | トレースへ情報を追加できる | |
| Lambda | ✔️ | ✔️ |
| API Gateway | ✔️ | ✔️ |
| Amazon SNS | | ✔️ |
| Amazon SQS | | ✔️ |


## サーバーレスアプリケーションの監査

- CloudTrail
  - 概要
    - ユーザーのアクティビティや API の使用状況を追跡し、以下にメリット
      - 監査
      - セキュリティモニタリング
      - 運用トラブルシューティング
  - 特徴
    - アカウントに IAM ユーザー、IAM ロール、AWS のサービスの API のアクティビティを記録する。
    - アカウントの作成時に有効になる。
    - API アクションに関する完全な詳細を取得できる。
      - リクエスト元のID
      - API 呼び出し時間
      - リクエストパラメータ
      - サービスによって返される応答要素
- CloudTrail イベント
  - AWS アカウントのアクティビティは CloudTrail イベントに記録され、イベント履歴で最近のイベントを確認
  - イベント保持期間は過去 90 日間
  - イベントについて、表示、検索、ダウンロードができ、以下を可視化。
    - AWS マネジメントコンソール
    - AWS SDK
    - AWS コマンドラインインターフェイス (AWS CLI)
    - その他の AWS のサービスから AWS アカウントで実行されたアクション
- CloudTrail 証跡
  - 以下サービスへのイベント配信。
    - Amazon Simple Storage Service (Amazon S3) バケット
    - Amazon CloudWatch Logs
    - Amazon CloudWatch Events
  - イベントの履歴を長く保持する必要がある場合に、証跡カスタマイズが可能。
  - CloudTrail Insights
    - CloudTrail Insights は、API コールボリュームの通常のパターンを追跡し、ボリュームが通常のパターンを外れた場合に Insights イベントを生成する機能
- AWS Config
  - 概要
    - AWS Config ルールは、特定の AWS リソースまたは AWS アカウント全体に必要な設定を表示
    - リソースがルールに違反していると、AWS Config はリソースとルールに非準拠のフラグを付け、Amazon Simple Notification Service (Amazon SNS) を通じてユーザーに通知
  - 機能
    - リソースの構成方法の正規化されたスナップショット、それらのリソースを強制的に準拠状態にするルールを作成する機能
    - 事前作成済みの修復アクションと問題を自動的に修復するオプションに加えて、すぐに使用できるカスタマイズ可能な事前定義済みのルール



## まとめ・その他。

セキュリティに関しては、サーバレスかどうかはあまり関係なく、AWS共通のベストプラクティスに従う。
また、今回からやたらとTable増えましたが、以下の呪文をChat GPTプラグインに唱えています。

`以下のブラウザからコピペした内容をMarkdown書式でテーブルでコードブロックで出力して`

テーブル内での改行もHTMLタグでやってくるのでにっこり。
VSCodeに組み込んだプラグイン[ChatGPT Rebornありがたいです。](https://qiita.com/oishi-d/items/914975d5e8c14a606e98)