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

# AWS# Infrastructureブログのサムネイル画像

経緯

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 LogsAWSアカウントのAPIコールの履歴を記録。誰が何をしたかを追跡可能。セキュリティ監査、コンプライアンス、トラブルシューティング。
CloudWatch LogsAWSリソースやオンプレミスサーバーから収集されたログデータ。運用監視、トラブルシューティング、パフォーマンス分析。
VPC Flow LogsVPC内のネットワークトラフィックの情報を記録。ネットワークモニタリング、セキュリティ分析、トラブルシューティング。
ELB Access LogsElastic Load Balancerのアクセスログ。トラフィック分析、セキュリティ監査、アクセスパターンの理解。
S3 Access LogsS3バケットへのアクセス記録。セキュリティ監査、アクセスパターン分析、コンプライアンス。
RDS LogsAmazon RDSインスタンスのデータベースログ。データベースの監視、パフォーマンスチューニング、トラブルシューティング。
Lambda LogsAWS Lambda関数の実行ログ。関数のデバッグ、パフォーマンス分析、エラーハンドリング。
CloudFront LogsAmazon CloudFrontの配信ログ。トラフィック分析、コンテンツ配信の最適化、セキュリティ監査。
Config LogsAWS Configによるリソースの構成変更履歴。リソース変更の追跡、コンプライアンス監査、セキュリティ分析。
GuardDuty LogsAWS GuardDutyによる脅威検出ログ。セキュリティ監視、脅威検出と対応、コンプライアンス。
CloudFormation LogsAWS CloudFormationスタックの操作ログ。スタックデプロイの監視、トラブルシューティング、変更管理。
ECS LogsAmazon ECSタスクの実行ログ。コンテナのデバッグ、パフォーマンス監視、トラブルシューティング。
EKS LogsAmazon EKSクラスターのログ。クラスターの監視、トラブルシューティング、パフォーマンス分析。
Route 53 LogsAmazon Route 53のクエリログ。DNSクエリ分析、トラフィックパターンの理解、セキュリティ監査。
Kinesis Data Firehose LogsKinesis 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に保存されている機密データを検出し、保護します。