【技術書紹介】AWS運用入門

## 書籍情報
書籍名：AWS運用入門
著者名：佐竹 陽一 / 山﨑 翔平 / 小倉 大 / 峯 侑資

https://www.sbcr.jp/product/4815615499/


## 本書を選んだ背景
AWSについては実務経験がなく、まず運用に関する知識を深めたいと考えました。
本書には実務で使える知見が豊富に盛り込まれており、実用性の高い内容が期待できると思い、選びました。

## 本書について
各Chapterは入門、基礎、実務の3部構成になっており、基礎を理解したあとに実務に活かせる具体的な内容へと進むため、スムーズに学習を進めることができます。
また実務で役立つテクニックが豊富に紹介されており、全体としてボリュームも十分です。

## 本書の内容
以下、個人的なメモを残します。

### Chapter1 システム運用の全体像
- 非機能要件は機能要件に比べ、イメージが難しく要件整理の難易度が高い。しかも考慮漏れがあるとユーザへの影響が大きい

### Chapter2 AWSとクラウド
- オンプレ、クラウド、AWSについて確認

### Chapter3 運用において押さえておくべきAWSサービス
- セキュリティグループとネットワークACLの使い分けについて、ネットワークACLで緩く制限し、セキュリティグループで厳しく制限すると管理しやすい
- EC2インスタンスはネットワーク経由でEBSにアクセスしてデータを保存する。スナップショットを取得しておけば、障害が発生したEBSをデタッチし、スナップショットから作成したEBSをアタッチすればよい
- S3においてバケット名はグローバルでユニーク、オブジェクトキーでバケット内のオブジェクトを識別する。バケットへのアクセスはバケットポリシーのみでアクセス制御することが推奨
- RDS、障害が起きたときのためにマルチAZ推奨
- ELBは自動でスケールアップやスケールアウトして、ELB自体の負荷を調整します
- ALBのベストプラクティスは、ALBを配置する各サブネットに少なくとも8つ以上のIPアドレスをALBが使用可能な状態にしておくこと

### Chapter4 アカウント運用
- プロジェクトごとにIAMユーザを作成するより、踏み台アカウントのIAMユーザにログインし、ロールの切り替えで作業したほうが管理が楽。また切り替え後のロールは1つではなく、実際の運用では読み取り専用IAMロール、操作用IAMロールなど複数用意する
- ポリシーのアタッチ前に、IAM Policy Simulatorで検証する。またアクセスアドバイザーでポリシーの見直し
- IAM Access Analyzerで最低限のアクセスを付与

### Chapter5 ログ運用
- ログ運用にあたり、「ログ設定」「ログ転送」「ログ保管」「ログ利用」の観点に分けて検討することが効果的。AWSサービスをどのように組み合わせて利用するかがポイント。
- 統合CloudWatchエージェントでログ設定
- VPC Flow Logsはログ記録。記録したログを転送
- Amazon Data Firehouseで転送
- Amazon S3で保管
- Amazon CloudWatch Logs Insightsでクエリ実行（サンプルがクエリが用意されている）、
- Amazon Athenaで利用や分析。S3バケット内のデータソースにクエリを予め保存しておき実行できるのが大きな特徴
- Amazon Kinesisはストリーミングデータをリアルタイムで処理する。データ処理に柔軟に拡張するため
- EC2インスタンスが増えた場合の運用負荷軽減のために、AWS SSMと Parameter Store（ストレージ）。Run CommamdはEC2インスタンスにOSログインすることなくコマンドやスクリプトをリモートで実行

### Chapter6 監視
- CloudWatch Metrics Insightを使えば該当するメトリックをまとめて可視化できる
- CloudWatch Alarmについて。閾値の範囲内か範囲外かは、期間で設定した間隔で評価される。Evaluation to Alarmは例えば、30分の評価対象期間のうち8回閾値範囲外ならアラーム状態とするなど
    - ※つまづき。CloudWatch Metricsにおいて一度もやって値が送信されたことがないメトリクスはマネジメントコンソール上に表示されない。AWS CLIコマンドで対策
- CloudWatch Logsメトリクスフィルターは、ログをフィルタリングしてCloudWatch Metricsへ送信する機能。CloudWatch LogsサブスクリプションフィルターはAWS Lambdaや Amazon Kinesisへ送る機能
- AWS Healthは、AWSの基盤側のメンテナンスや障害を確認できる

### Chapter7 パッチ適用
- AWS Systems Manager Patch Managerは OSやアプリケーションへのパッチ適用を自動化するツール
- パッチベースラインはマネージドインスタンスに「どのパッチの適用を承認または拒否するか」を定めたルール。AWS側で用意されたベースラインもあれば、カスタムベースラインを作ることもできる
- コンプライアンスレポートは「特定の重要度以上で適用されていないパッチ」を一覧で確認できる機能
- パッチ適用の自動化にはパッチポリシーの作成が必要。運用においては環境ごとにパッチポリシーを作成することが推奨されている

### Chapter8 バックアップ/リストア運用
- AWSではイメージ バックアップ、世代管理は増分でバックアップが取得されることが多い
- AWS Backupを利用する。多くの場合AMIを利用、EC2にアタッチされている特定のEBSボリュームのデータのみをバックアップしたいならEBSスナップショットを取得する
- RDSとAuroraの日次自動バックアップとスナップショット。Auroraにはリストア機能がある
- AWS Backupにてバックアップルールを設定。あわせてそのバックアッププランで管理するAWSリソースを指定する。リソースの割り当てができるAWSサービスはAWS Backupのオプトインと呼ばれる設定を有効にしたAWSサービスのみ
- システム・要件ごとにAWSにタグ付けし、バックアッププランもそれらごとに作成してバックアップを管理する
- AMIやEBSスナップショット、RDSの自動バックアップスナップショットはAWS管理のS3バケットに保管される。リストア時点ではS3バケットからボリュームにデータはコピーされておらず、各ブロックに最初にアクセスした際に初めてボリュームにコピーされる状況が発生する。そのため、リストア後に最初にアクセスするとレスポンスが低下する（ファーストタッチペナルティ）。これを回避するにはEBSボリュームに対して初期化（総読み取り）する
- RDS・Auroraのリストアについて、DBインスタンス識別子やAuroraのクラスター識別子はリージョン内で一意である必要がある。接続元のアプリケーション側で接続先のエンドポイントを変えるか、接続元の既存のDBインスタンス識別子やAuroraクラスター識別子をあらかじめ変えておく

### Chapter9 セキュリティ統制
- 機密性はIAMをはじめとするアクセスポリシーを利用した権限管理、完全性はAWS KMSを使用した暗号化など、可用性はリージョン/AZにまたがった冗長構成の採用で高める
- リスクや脅威が顕在化したときに迅速に対処する観点が発見的統制、リスクや脅威の顕在化を未然に防ぐ観点が予防的統制
- AWS Certified Manager（ACM）はSSL/TLS証明書のプロビジョニング（準備）、管理、デプロイを一元管理することができるマネージドサービス。SSL/TLS証明書の無償発行、自動更新などが特徴。HTTP通信を暗号化通信（HTTPS通信）としている
- VPCのマネージドプレフィックスリストは、複数のCIDRブロックをグルーピングして1つのAWSリソースとして扱える機能。運用負荷が軽減される
- AWS WAFはWebアプリケーションに対する通信の検査、セキュリティ対策
- AWS WAFで定義可能なルール数はAWS WAF Web ACL capacity units（WCU）によって制限される
- AWS WAFの適用ルールの定期的な見直しが必要だが、実運用は骨が折れるため、「WafCharm」のようなサードパーティ製品を活用して運用負荷軽減を図る
- AWS Config RulesはAWS Configて記録・管理している構成情報に対してルールを設け、そのルールに準拠した構成になっているかどうかをチェックする機能。AWSマネージドルールとカスタムルールがあるが、カスタムルールは実装の難易度が高いため、AWSマネージドルールの利用が推奨される
- 設定したルールに非準拠となったAWSリソースに対してあらかじめ処理が定義される「修復アクション」を実行することができる。AWSマネージドのアクションとカスタム修復アクションがあるが、AWSマネージドアクションの利用が推奨される
- AWS Security HubはAWSアカウントのセキュリティ状態を継続的にチェックする機能と、セキュリティイベントを集中管理する機能を備える。セキュリティ状態のチェックはAWSにおけるベストプラクティスを推奨。スキャンチェックにより検出したものについて必要なら対処して、対応結果を反映する（抑止済み、解決済みなど）。検出したセキュリティイベントはリージョンごとの集約、アカウントごとの統合が可能
- Amazon GuardDutyはAWSの機械学習技術を活用して継続的な脅威検出機能を提供する。脅威判定をAWS内部のセキュリティチームとサードパーティプロバイダが協力して作る。これを無料で使えるのが最大のメリット
- Amazon EventBridgeはAWSサービスからのイベント（データ）をターゲットと呼ばれるアプリケーションに転送するサービス。利用頻度が多いのはデフォルトイベントパスで、AWSサービスから送信されたイベントをターゲットに転送する。例えば、Security HubとSNSを連携して、運用担当者にSecurity Hubの検出結果を通知する。イベントはJSON形式で生成されており、イベントパターンを使用し絞り込みを行うことができる

### Chapter10 監査準備
- システム監査人の監査証跡の収集を支援するためにIT部門が動く。そこで利用するのがAWS Artifactで、 AWSサービスからの監査レポートをダウンロードすることで監査証跡の収集負荷を軽減できる
- AWS CloudTrailのベストプラクティスとして全AWSリージョンを対象に証跡収集することが推奨されている。S3バケットの作成やAWSマネージメントコンソールへのサインインといった管理イベントは取得必須。ログの完全性を高めるためのログファイルの検証機能の有効化が推奨されている。ログの保存先はS3とCloudWatch Logsのいずれか、もしくは両方を指定できる
- AWS Configで変更管理。AWSリソースごとのJSON形式の構成情報だけでなく、AWSリソース間の依存関係も記録。特定のリソースタイプで過去に実行された設定変更内容をタイムラインとして認識できる。ログはS3バケットに保存する
- Configアグリゲータで複数のAWSアカウントおよび複数のAWSリージョンのConfigで収集した情報などを集約して確認。運用が容易になる

### Chapter11 コスト最適化
- コスト最適化のためには、新しいサービスのキャッチアップが必要
- AWS Budgetsは設定した予算の閾値に抵触しない限り利用料ならびに使用状況が通知されない。そこでAWS Budgetsレポートを作成してAWS利用料の定点観測を行う
- AWS Cost Anomaly Detectionは機械学習を利用しAWS利用料およびAWSリソースの使用状況を継続的に監視することで、AWS利用料における異常値を検出し、通知することができるサービス。通知はメールだとJSON形式で可読性がよくないため、Slackなどを利用している場合は、AWS Chatbotと連携している SNSトピックを指定することを推奨
- タグ設計において、タグキーには「目的」、タグ値にはタグキーで設定した「目的」に即した「値」を決める
- AWS Compute Optimizerは、デフォルトで最大過去14日間のCloudWatchメトリクスの値を分析することでコンピューティングリソースのスペックが最適かどうかを評価し、推奨事項などを表示する。例えばEC2であれば、推奨されるインスタンスタイプが表示されるため、利用料の価格差が最も大きいインスタンスタイプへの変更が推奨される
- リザーブドインスタンス（RI）をどの組み合わせでどの程度購入するか判断するのは容易ではない。そこでCost Explorerには購入すべきRIを推奨事項として表示する機能がある
- インスタンスサイズの柔軟性とは、同じインスタンスファミリー内なら正規化係数（特定のEC2インスタンスタイプのリソース量を標準化するための係数）に応じてRIを適用するインスタンスサイズを変更できる特性
- RIとSavings Plans（SP）との違いは、RIは「 OSとインスタンスタイプの組み合わせ」を指定して購入するが、SPは「割引適用後の1時間あたりの利用料」をドル指定して購入する。SPのCompute Savings Planは割引効果が最も高いリソースから順に自動的に適用され、利用実績が最も多い
- Cost Explorerには購入すべきSPを推奨事項として表示する機能あり
- AWS System Manager Quick Setupは、コスト最適化の点では未使用時の停止を容易に実装できる

## 本書の感想
AWSの各サービスが詳細に紹介されているだけでなく、運用時に考慮すべきセキュリティやコスト面のポイントも丁寧にまとめられている点が非常に良かったです。
これから実務でAWSを使う方、あるいはすでに使用していて運用面での理解を深めたい方におすすめしたい一冊です。