元コンサルでデータサイエンティスト

スタートアップでAI関連の事業開発をしています。元コンサルでデータサイエンティスト

【AWSソリューションアーキテクト試験用まとめ】セキュリティ

はじめに

AWS 認定ソリューションアーキテクトプロフェッショナル(SAP)試験の勉強に向けた頭の整理として、以下の内容について用語レベルでまとめていきます。
勉強の進捗に合わせて記事の内容をアップデートする場合があります。

※この項目分類については、UdemyのUltimate AWS Certified Solutions Architect Professional 2020コースを参考にしています。

f:id:hktech:20201206010537p:plain

AWS Cloudtrail

  • コンソール・SDKCLIAWSサービス上で行われたイベント履歴、API呼び出し履歴を取得可能。ログはCloudWatch LogsやS3に格納可能。
  • 過去90日の履歴を表示可能。
  • CloudTrailからS3への格納はSSE-S3(デフォルト)やSSE-KMSなどで暗号化可能。また、直接SNSへの連携が可能。
  • マルチアカウントやマルチリージョンから1箇所へのログ集約を考える場合はS3バケットポリシーの設定が必要。
  • CloudWatch Logsに連携したログはメトリックフィルタを使うことでアクションを検知可能。
  • 最速でイベント検知をしたい場合はCloudWatch Eventsが有効。

KMS

  • KMS(Key Management Service)はAWSが提供する暗号化サービスである。IAMポリシー及びキーポリシーによって許可されたユーザがAPIによりデータを暗号・復号化することが可能。
  • KMSではCMK(Customer Master Key)をキーとして暗号化が行われる。このキーはユーザ側で取得することはできず、KMSにて管理される。CMKの種類としてはAWS Managed KeyとCustomer Managed Keyの2種類がある。前者は、S3・EBS・Redshiftなどで使われるAWS管轄のキーであるのに対して、後者はユーザ側で作成・管理・適用が可能なキーである。
  • KMSは呼び出しごとに4KBまでのデータしか暗号化することができない。それより大きい容量のデータを暗号化したい場合は、Envelope Encryptionを活用する。

AWS Parameter Store

  • 設定と機密を管理するための安全な階層型ストレージ。
  • パスワード、データベース文字列、Amazon マシンイメージ (AMI) ID、ライセンスコードなどのデータをパラメータ値として保存可能。KMSによって暗号化した形で保持可能。

Secrets Manager

  • 各リソースやアプリケーションにアクセスするための機密情報を管理するためのマネージドサービス。
  • Lambdaで定義することにより、任意の日数ごとに機密情報のローテーションを実現可能。RDS(MySQL, PostgreSQL, Aurora)に統合可能。

RDSのセキュリティ

RDS周りのセキュリティ知識

  • EBSボリュームやスナップショットにはKMS暗号化が適用される。
  • OracleSQL Serverは透明化データ暗号化(TDE)が適用可能。
  • SSL暗号化は全てのDBに適用可能。
  • IAM認証はMySQLPostgreSQLにのみ適用。ただし、IAM以外の認証はその他RDSにて行われる。
  • 暗号化されていないRDSスナップショットのコピーを暗号化可能。
  • CloudTrailはRDS内で実行されるクエリを追跡することはできない。

SSL/TLS暗号化通信

  • SSL(Secure Socket Layer)やTLS(Transport Layer Security)は通信を暗号化する技術。
  • SSL証明書認証局(CA: Certified Authorities)によって発行される。e.g. Symantec, GlobalSignなど。証明書には期限があるため、更新が必要。
  • 通信を確立するステップをハンドシェイクと呼ぶ。

SSL通信の仕組み(公開鍵・共通鍵暗号方式の組み合わせ)
f:id:hktech:20201226190048p:plain
https://jp.globalsign.com/ssl-pki-info/ssl_practices/ssl_encryption.html

SNI(Server Name Indication)

  • SNIとはSSL/TLSの拡張仕様であり、SSLハンドシェイク時にクライアントがアクセスしたいホスト名を指定することで、サーバ側がグローバルIPではなくホスト名によって複数の証明書を使い分けることができる仕組み。
  • ALB・NLBやCloudFrontではこの仕組みを活用可能。旧来のCLBなどでは使えない。

中間者攻撃(MITM: Man in the Middle Attack)

  • クライアントとサーバの間に中間者が入ることで通信を傍受する攻撃のこと
  • 対策としてはHTTPSで全ての通信を行うことと、DNSSEC(DNSトラフィックを保護するプロトコル)を採用しているDNSを使用することが重要。
  • Route 53 では、ドメイン登録には DNSSEC がサポートされているが、DNS サービスには DNSSEC がサポートされていない。Route 53 に登録されたドメインに DNSSEC を設定する場合は、別の DNS サービスプロバイダーを使用するか、独自の DNS サーバーをセットアップする必要がある。

ACM(AWS Certification Manager)

  • SSL証明書を管理するマネージドサービス。外部で購入した証明書をアップロードするか、ACMでがプロビジョンする形でパブリック証明書を作成(無料)するかのどちらかによってホストすることが可能。ACMによってプロビジョンした証明書は手動更新不要。
  • ACMによってSSL証明書をロードバランサ、CloudFront、APIゲートウェイAPIに適用可能。
  • ACMはリージョンサービス。グローバルアプリケーションで使う場合はSSL証明書を各リージョンにて設定する必要がある。

CloudHSM

  • Cloud HSM(Hardware Security Module)はクラウドベースのハードウェアセキュリティモジュール。
  • 商用で利用可能なほとんどの暗号化キーをHSMにエクスポート可能。S3でユーザ提供キーによるサーバサイド暗号化(SSE-C)を利用する際にはCloudHSMの活用を検討すると良い。
  • KMSとは異なり、CloudHSMではクライアント側が基本的に鍵の管理を行う。AWSのIAMが制御できるのはCloudHSMクラスタCRUD権限のみ。
  • 共通鍵・公開鍵の両方に対応(KMSは共通鍵のみ)。また、VPC内で管理されるため、他VPCからのアクセスがある場合はVPCピアリングが必要。無料枠なし。
  • ELBとEC2インスタンス間の通信をHTTPS化したい場合、各EC2の裏にCloudHSMを用意してSSLオフロードする方法がある。

S3オブジェクトの暗号化

  1. SSE-S3:AWS管理キーによるサーバサイド暗号化
  2. SSE-KMS:KMSで管理されるキーによるサーバサイド暗号化
  3. SSE-C:ユーザ提供キーによるサーバサイド暗号化
  4. CSE(Client Side Encryption)
  • GlacierのオブジェクトはAWS管理のもとすべてAES-256によって暗号化される。

S3イベント

  1. S3アクセスログ:詳細なリクエスト履歴が記録されているが取得に数時間かかる。ベストエフォートのため記録が欠損する可能性あり。
  2. S3イベント通知:オブジェクトの作成・削除などのイベントを、SNS・SQS・Lambda経由で通知。数秒から数分で通知。バージョニングが有効化されていれば全イベントを捕捉可能
  3. Trusted Advisor:バケットパーミッションを確認してくれる。バケットがパブリックになっていないかなど。
  4. CloudWatch Events:CloudTrailレベルロギングを有効化することでイベントを捕捉可能。

S3のセキュリティ

  • S3セキュリティはIAMベースとリソースベースの2種類がある。
  • リソースベースにはバケットポリシー、オブジェクトアクセスコントロールリスト(ACL)、バケットアクセスコントロールリスト(ACL)がある。

S3のバケットポリシー

  • バケットポリシーを使う場面としては、①バケットにパブリックアクセスを与える時、②アップロード時のオブジェクト暗号化を強制する時、③クロスアカウントアクセスを与える時がある。
  • 条件を付与できるのはIP単位(パブリックIPまたはElasticIP)、VPCまたはVPCエンドポイント、CloudFront Origin Access Identity、MFAのいずれか。

S3署名付きURL

  • ユーザに対してS3上にあるオブジェクトを一時的に公開したい場合に使用。
  • 有効期限を設定可能。
  • ダウンロード用はCLIによって署名付きURLを生成可能。アップロード用はSDKによって生成するため実装が難しい。

S3のVPCエンドポイントゲートウェイ

  • 特定VPCからのみS3バケットにアクセスさせた場合に利用。
  • バケットポリシーで特定のVPCを指定することでアクセスを許可。

S3オブジェクトロック

  • WORM(Write Once Read Many)モデルを採用。一定期間オブジェクトの削除を防ぐ仕組み。

Glacier Vault Lock

  • WORM(Write Once Read Many)モデルを採用。永久的に編集・削除を防ぐ仕組み。

セキュリティグループ

  • インスタンス単位でのセキュリティ設定。EC2, RDS, LambdaなどのENIに紐づく。
  • ステートフル:行きの通信が許可されていれば戻りも許可。逆も然り。
  • CIDRまたはセキュリティグループIDを指定可能。
  • デフォルトではインバウンドはDeny、アウトバウンドはAllowされている。

NACL(Network Access Control List)

  • サブネット単位でのセキュリティ設定。
  • ステートレス:行きと戻りの通信は個別に設定。
  • CIDRのみ指定可能。(ホスト名なども不可)
  • デフォルトではインバウンドもアウトバウンドもDenyされている。

DDoS攻撃(Distributed Denial of Service)への対策

  • DDoS攻撃:大量リクエストによりサーバの処理が追いつかず、サービスの機能を妨害する攻撃。
  • 対策としてはAWS Shield Standard/Advancedの適用、CloudFront・Route53の活用、オートスケーリングの有効化などがある。

AWS Shield

  • AWS Shield Standard: SYN/UDPフラッド攻撃、UDPリフレクション攻撃、その他第3層・4層などDDoS攻撃から守ってくれるセキュリティサービス。無料。
  • AWS Shield Advanced: より高度な攻撃に対する対策を提供。AWS DDoS対策チームへの常時アクセスが可能。また、DDoS攻撃によるインスタンス料金の負担について一部軽減してもらえる。有料。

AWS WAF(Web Application Firewall

  • 第7層(アプリケーション層)の攻撃を対策してくれるサービス。
  • ALB, APIゲートウェイ, CloudFrontなどに適用可能。CLB, EC2, S3ウェブサイトなどに適用したい場合はCloudFrontに適用。
  • 適用時にはWebACLの設定が必要。IPアドレス、HTTPヘッダ、URI文字列やサイズ制限・地域制限などの設定も可能。SQLインジェクションクロスサイトスクリプティングXSS)を防ぐことが可能。
  • 同一IPによるアクセスの頻度などをもとにアクセス制御可能。

AWS Firewall Manager

  • Organization内の全てのアカウントのWAF、AWS Shield Advanced、セキュリティグループなどのルールを一括管理するサービス。

AWS Inspector

  • EC2インスタンスのOS脆弱性やネットワーク設定の不備を検知してくれるサービス。
  • 使用するためにはAWS Inspector AgentがEC2インスタンスのOSにインストールされている必要がある。
  • AWS側でセットされているルールで設定を行う(カスタムルールは設定できない)。

AWS Config

  • AWSリソースのコンプライアンスを記録・監査してくれるサービス(リージョンサービス)。
  • 設定の変更などをSNSなどを通じて通知してくれるが、変更自体を防ぐことはできない。
  • マネージドルールおよびカスタムルール(Lambdaで記述)の設定が可能。変更をトリガーにしてLambdaをキックしたり、 Systems Manager自動化によるリソースの修復などが可能(セキュリティグループの修復やルール違反のインスタンス停止など)。

AWS Managed Logs

AWS GuardDuty

  • 機械学習による異常検知を活用した脅威検知を行うマネージドサービス。VPCフローログ・Cloud Trailログ・DNSログをインプットデータとする。
  • CloudWatch Eventと組み合わせて通知を行う。