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

📁 Infrastructure
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に保存されている機密データを検出し、保護します。