AWSで非機能要件を実現するには

経緯
AWSでシステムを構築するにあたり、毎回1からアーキテクチャを考えるのは大変なので、個人的なテンプレートを作っておいてどんどん楽していきたい。
ここでは、各種非機能要件ごとにAWSでどう構築すべきかを考えていく。
コスト削減
コストのチェック
- AWS Budgets
- AWS Cost Explorer
まずはここら辺のサービスを見てコストをチェックしていく。
Billing Alertを設定しておくのもあり。
インスタンスタイプの見直し
利用しているインスタンスが過剰スペックになっていないか確認。適切なサイズのインスタンスにスケールダウンすることでコストを削減できる。スポットインスタンスを利用することで、コストを大幅に削減することも可能。
開発環境だけRDSやECSのスペックを落とすってのもあり。
リザーブドインスタンスやSavings Plansの活用
リザーブドインスタンス(RI)やSavings Plansを利用することで、1年や3年の契約を前提に大幅な割引を受けることができる。
未使用のリソースの整理
使用していないインスタンス、EBSボリューム、Elastic IPアドレス、スナップショットなどが残っていないか確認し、不要なものは削除。
また、開発環境は1AZ構成にするなども有効だし、使用しない夜間はEC2やRDSは停止しておくのもかなり有効な手段。
ストレージの最適化
S3のストレージクラスを見直し、アクセス頻度に応じて適切なクラスにデータを移動することでコストを削減できる。
データのライフサイクルポリシーを設定し、古いデータを自動的に削除またはアーカイブすることも検討。
DR(災害対策)
AWSでは大きく分けて4つのDR戦略が示されている。以下に比較表を記載しておくので、要件に応じて選択する。
| 戦略 | 復旧時点目標 (RPO) | 復旧時間目標 (RTO) | 特徴 | コスト |
|---|---|---|---|---|
| バックアップとリストア | 数時間 | 24時間未満 | コスト効果が高く、データを他のリージョンにバックアップ。災害時にはリソースをプロビジョニングし、データをリストアする。 | 低 |
| パイロットライト | 数十秒~数分 | 数十秒~数分 | 最小限の環境を常に稼働させ、重要なデータをDRリージョンに継続的にレプリケーション。 | 中程度 |
| ウォームスタンバイ | 数分 | 数分 | フル機能の環境を縮小した形でDRリージョンに常に稼働させ、災害時には迅速にスケールアップ可能。 | 高 |
| マルチサイトアクティブ/アクティブ | ほぼゼロ | ゼロまたはほぼゼロ | フルスケールの環境を複数のリージョンで同時に稼働させ、シームレスなフェイルオーバーとゼロダウンタイムを実現。 | 非常に高い |
ログ管理
AWSのログの種類は多岐にわたる。以下に主要なログの種類をまとめた。
| ログの種類 | 説明 | 主な用途 |
|---|---|---|
| CloudTrail Logs | AWSアカウントのAPIコールの履歴を記録。誰が何をしたかを追跡可能。 | セキュリティ監査、コンプライアンス、トラブルシューティング。 |
| CloudWatch Logs | AWSリソースやオンプレミスサーバーから収集されたログデータ。 | 運用監視、トラブルシューティング、パフォーマンス分析。 |
| VPC Flow Logs | VPC内のネットワークトラフィックの情報を記録。 | ネットワークモニタリング、セキュリティ分析、トラブルシューティング。 |
| ELB Access Logs | Elastic Load Balancerのアクセスログ。 | トラフィック分析、セキュリティ監査、アクセスパターンの理解。 |
| S3 Access Logs | S3バケットへのアクセス記録。 | セキュリティ監査、アクセスパターン分析、コンプライアンス。 |
| RDS Logs | Amazon RDSインスタンスのデータベースログ。 | データベースの監視、パフォーマンスチューニング、トラブルシューティング。 |
| Lambda Logs | AWS Lambda関数の実行ログ。 | 関数のデバッグ、パフォーマンス分析、エラーハンドリング。 |
| CloudFront Logs | Amazon CloudFrontの配信ログ。 | トラフィック分析、コンテンツ配信の最適化、セキュリティ監査。 |
| Config Logs | AWS Configによるリソースの構成変更履歴。 | リソース変更の追跡、コンプライアンス監査、セキュリティ分析。 |
| GuardDuty Logs | AWS GuardDutyによる脅威検出ログ。 | セキュリティ監視、脅威検出と対応、コンプライアンス。 |
| CloudFormation Logs | AWS CloudFormationスタックの操作ログ。 | スタックデプロイの監視、トラブルシューティング、変更管理。 |
| ECS Logs | Amazon ECSタスクの実行ログ。 | コンテナのデバッグ、パフォーマンス監視、トラブルシューティング。 |
| EKS Logs | Amazon EKSクラスターのログ。 | クラスターの監視、トラブルシューティング、パフォーマンス分析。 |
| Route 53 Logs | Amazon Route 53のクエリログ。 | DNSクエリ分析、トラフィックパターンの理解、セキュリティ監査。 |
| Kinesis Data Firehose Logs | Kinesis Data Firehoseのデリバリストリームログ。 | データストリーミングの監視、トラブルシューティング、パフォーマンス分析。 |
AWSアカウント準備
- アカウント作成
- AWS Control Tower
- ランディングゾーンの設定
- AWS CloudTrailの有効化
- IAMユーザーの作成
- AWS Organization
セキュリティ管理
AWSのセキュリティ対策については多岐にわたる。以下に、いくつかの重要な対策をまとめた。
アイデンティティとアクセス管理
AWS Identity and Access Management (IAM): 最小権限の原則: ユーザーとサービスには必要最低限の権限だけを付与します。 IAMロールの利用: 長期的なアクセスキーを使用せず、IAMロールを利用して一時的な認証情報を使用します。 多要素認証 (MFA): 重要なアカウントにはMFAを有効にして、追加のセキュリティレイヤーを追加します。
ネットワークセキュリティ
Amazon VPC:
セキュリティグループとネットワークACL: トラフィックのフィルタリングを行い、インバウンドおよびアウトバウンドのトラフィックを制御します。 VPCエンドポイント: インターネット経由ではなく、VPC内での安全な通信を確保します。 AWS Shield:
DDoS対策: AWS Shield Standardは自動的に有効化され、AWSリソースをDDoS攻撃から保護します。高リスクの場合はAWS Shield Advancedを検討します。
データ保護
暗号化:
データの暗号化: S3、EBS、RDSなどのストレージサービスで保存データを暗号化します。AWS Key Management Service (KMS)を利用してキー管理を行います。 通信の暗号化: TLS/SSLを使用して、データの転送中の保護を行います。 バックアップとリカバリ:
定期的なバックアップ: AWS Backupを利用して、重要データの定期的なバックアップをスケジュールします。 災害復旧計画 (DR): AWSのリージョン間でデータの複製やフェイルオーバーを設定して、災害に備えます。
モニタリングとログ管理
Amazon CloudWatch:
ログとメトリクスの監視: リソースのパフォーマンスとヘルスを監視し、異常が発生した場合にアラームを設定します。 AWS CloudTrail:
操作履歴の記録: 全てのAPIコールを記録し、監査ログをS3に保存します。定期的にログをレビューして、不正な活動を検出します。 AWS Config:
リソースの構成追跡: リソースの構成変更を追跡し、コンプライアンスを維持します。
セキュリティサービスの活用
AWS Security Hub:
セキュリティダッシュボード: 複数のAWSセキュリティサービスからのデータを統合し、セキュリティ状況を一元的に管理します。 Amazon GuardDuty:
脅威検出: 継続的にAWSアカウントとワークロードを監視し、脅威を検出します。 Amazon Macie:
データ保護: 機械学習を使用して、S3に保存されている機密データを検出し、保護します。