🔒

【AWS認定(SAP-C02)ノート】セキュリティ

2023/07/08に公開

はじめに

本記事は、AWS Certified Solutions Architect - Professional第 1 分野: 複雑な組織に対応するソリューションの設計タスクステートメント 2: セキュリティコントロールを規定する。に関連するAWSサービスの特徴やポイントのまとめです

対象知識

  • AWS Identity and Access Management (IAM) と AWS Single Sign-On
  • ルートテーブル、セキュリティグループ、ネットワーク ACL
  • 暗号化キーと証明書管理 (AWS Key Management Service [AWS KMS]、AWS Certificate
    Manager [ACM] など)
  • AWS のセキュリティ、アイデンティティ、コンプライアンスのツール (AWS CloudTrail、
    AWS Identity and Access Management Access Analyzer、AWS Security Hub、 Amazon Inspector など)

ルートユーザーの保護

ルートユーザーにしかできないタスク

  • アカウント設定の変更
  • アクセスキーの作成
  • 請求情報へのIAMアクセスの有効化
  • S3バケットのMFA Delete設定
  • S3バケットポリシーの修復(削除、編集)

ルートユーザー使用時に通知

GuardDuty

  1. GuardDutyを有効

  2. 検出結果タイプ(Policy:IAMUser/RootCredentialUsage)でルートユーザーの操作を検出

  3. EventBridgeでルールを作成

    {
    	"source": ["aws.gaurdduty"],
    	"detail": {
    		"type": ["Policy:IAMUser/RootCredentialUsage"]
    	}
    }
    
  4. EventBridgeのターゲットをSNSトピックにする

  5. 特定のメールアドレスに送信、または、AWS ChatbotでSlackなどに通知

CloudWatch Logs

  1. CloudTrailのログをCloudWatch Logsへ送信
  2. CloudWatch Logsでメトリクスフィルターを設定
  3. CloudWatchアラームを実行
  4. アクションをSNSトピックにする
  5. 特定のメールアドレスに送信、または、AWS ChatbotでSlackなどに通知

最小権限の適用

IAM Access Analyzer

外部に共有されているリソースの識別

  • アカウント(IAMロール、S3バケット、KMSキー、RDSスナップショット)やアカウント外部と共有可能なリソース(パブリックなど)を調べて、外部と共有されたリソースを検出

  • Organizationsの組織全体での検出可能(リージョンごとに有効化必要)

  • 検出結果の外部共有

    • 意図したものの場合:アーカイブ可能
    • 意図したものではない場合:リソースベースのポリシーを修正
  • EventBridgeルールで、検出して通知

    • statusにACTIVEを限定:検出された場合にのみ通知
    {
    	"source": ["aws.access-analyzer"],
    	"detail-type": ["Access Analyzer Finding"],
    	"detail": {
    		"status": ["ACTIVE"]
    	}
    }
    

IAMポリシーの検証

IAMポリシーの作成時に、4つの視点(セキュリティ・エラー・警告・提案)で検証

CloudTrailログに基づいたIAMポリシーの作成

  • IAMユーザー、IAMロールが実行したリクエストのCloudTrailログを分析して、適切なIAMポリシーを生成
  • ポリシーを作成したいIAMロールまたはIAMユーザーを指定し、期間を最大90日間まで指定して作成

アクセス許可の境界(Permissions boundary)

  • IAMユーザー、IAMロールを作成しポリシーを設定するユーザーが過剰な権限を使用することを防ぐため、IAMユーザー、IAMロールに追加で設定する管理ポリシー
  • アクセス許可の境界に設定されたポリシーの権限を、IAMユーザー、IAMロールにアタッチする許可ポリシーは超えられない

AWS KMS

AWS KMSに関する情報は、内容が長くなりましたので、別途記事を投稿しました
↓をご参照ください

https://zenn.dev/minonoblog/articles/3aa6a2cd080595

AWS CloudHSM

  • キー保存、暗号化を実行するハードウェアを物理的に専有するサービス
  • FIPS 140-2レベル3に準拠(KMSはFIPS 140-2レベル2に準拠)

構成

  1. リージョン選択
  2. クラスタ作成
    • 冗長性、高可用性:複数のAZのVPCサブネットを指定してクラスタを作成
  3. クラスタにHSMインスタンスを作成
    • クラスタにはHSMを28まで作成
    • HSMもVPCサブネットを指定して作成、指定したサブネットにENIが作成される
    • 複数のHSMを作成すると、クライアントからの接続は自動的に負荷分散
    • リクエスト量に応じてHSMの数を増減

KMSカスタムキーストア

  • KMSのキーストアとしてCloudHSMを使用 → KMSを使用しながらFIPS 140-2レベル3に準拠できる
    • CloudHSMにkmsuserという名前のCU(Crypto User)を作成、パスワードはKMS側に設定
    • クラスタ初期化:署名に使用した証明書を信頼アンカー証明書としてKMSにアップロード

バックアップ

  • AWSがS3を使ってバックアップデータを保存
  • 全てのバックアップデータは暗号化されて保存
  • 他のリージョンにコピー可能

ユースケース(TDE)

OracleのTDE(透過的なデータ暗号化)をCloudHSMと連携

  • マスターキー:CloudHSMで管理
  • Oracleデータベース:EC2にインストール
    • RDS:通常のTDEをサポート(CloudHSMを使用したTDEはサポートしていない)

AWS Certificate Manager(ACM)

パブリックなSSL/TLS証明書の保存、更新を提供する無料サービス

  • CloudFront、ELB、API Gatewayと連携して、ユーザー所有ドメインの証明書を作成
  • 所有者確認:メール、CNAME
  • 発行済みの証明書もインポートして使用可能
  • サイトシール:証明書の作成元が信頼をPRするコンテンツして提供するサイト掲載可能な画像
    • ACM:提供していない
    • 必要な場合:サードパーティベンダーから発行される証明書を使用

AWS Private Certificate Authority(プライベートCA)

  1. プライベートな独自の証明機関(CA)階層を作成
  2. ユーザー、デバイス、アプリケーションなどの認証のプライベート証明書を作成

AWS Cognito

Webやモバイルアプリケーションに安全に認証を提供するサービス

Cognitoユーザープール

サインアップ、サインインを短期間でアプリケーションに実装

  • Cognitoユーザープールのみでの認証可能
  • SNSなど外部での認証も可能
  • カスタム可能な組み込みWebUIあり
  • Web ID フェデレーション(Facebookなど)も有効にするだけで組み込みUIで使用可能

MFA、アドバンスドセキュリティ他

  • パスワードポリシー
  • メールアドレス、電話番号の検証
  • MFA(多要素認証):時間ベースのワンタイムパスワード
  • アドバンスドセキュリティ:他のWebサイトで漏洩情報として公開されているパスワードを使った時に、ユーザーをブロックするなどの自動対応ができる

Lambdaトリガー

サインアップイベント、サインインイベントをトリガーに、AWS Lambda関数の実行

IDプール

モバイルやクライアントサイドJavaScriptが動作しているアプリケーションで、AWSのサービスに対して安全にリクエストを実行したい場合に使用

  • 2種類のIAMロールを設定
    • 認証されていないIAMロール
      • トップ画面にデータを表示
      • ゲストアクセス
    • 認証されたIAMロール
      • 認証プロバイダー(Web ID フェデレーション、Cognitoユーザープール)によって認証された後に初めてAWSサービスへのアクセスを許可するIAMロール

AWS Secrets Manager

  • DBなどの認証情報を保存、取得:Secrets ManagerへのAPIリクエスト
  • 認証情報のローテーション更新:Secrets ManagerがDBの認証情報を更新して保存
  • 現在の認証情報取得
    • Secrets ManagerへのGetSecretValueリクエストを実行
    • 認証情報の再配布やそのためのシステムダウンタイムが必要ない
  • 認証情報の更新(ローテーション)
    • RDSインスタンス:デフォルトのLambda関数が用意されている
      • マネージドローテーション
        • RDSインスタンスの作成時にマスターユーザーのパスワードをSecrets Managerと統合することで使用可能
        • Lambda関数の設定、管理が不要
      • RDSパスワード
        • RDSと同じVPC内にLambda関数を設定
        • セキュリティグループ、VPCエンドポイントまたはNATゲートウェイなどを設定
    • 外部のサードパーティAPIやオンプレミス:任意のLambda関数を開発して実現

ローテーション戦略

シングルユーザーローテーション

  • 一人のDBユーザーの認証情報を管理する場合
  • マネージドローテーションではシングルユーザーローテーションのみ可能
  • ラベル
    1. 既存のパスワードにAWSCURRENTを付ける、GetSecretValueリクエストがあったらこのパスワードをレスポンスする
    2. 更新した新しいパスワードにAWSPENDINGを付ける
    3. テストが完了すればAWSCURRENTを移動して使用できるようになる
  • ダウンタイムが発生
    • 更新からテスト完了してAWSCURRENTを移動するまでの間、アプリケーションは更新前のパスワードを受け取ってしまうので、認証エラーが発生する可能性がある

交代ユーザーローテーション

  • ダウンタイムが発生しないようにするため、2人のDBユーザーを使用してローテーションで交互に更新
  • デフォルトで用意されているLambda関数で実行

AWS Inspector

EC2インスタンス、ECRコンテナイメージ、Lambda関数を自動的に検出し、脆弱性のスキャンを継続的に行い、レポートで可視化するサービス

  • SSMエージェント:検出やスキャンを実行
  • 検出結果:EventBridgeルールとターゲットアクションによって、自動で脆弱性を修復できる

AWS WAF(Web Application Firewall)

  • AWSサービスへのリクエストに対応
    • CloudFront
    • API Gateway
    • Application Load Balancer
    • AppSync
    • Cognito ユーザープール
    • App Runner
  • リクエストの条件に対して、許可・ブロック・カウント(発生数のみを記録)を設定
  • よくある攻撃に対してはマネージドルールが用意されている
  • 個別の設定が必要な場合は独自のルール設定ができる
  • APIレベルでの設定もレートベースのルールも可能

AWS WAFの構成と料金

構成

  • CloudFront:1つのWebACLを複数ディストリビーションに設定可能
  • 他のサービス:リージョンごと、サービスごとに1つのWebACLを設定

料金

リソースタイプ 料金
Web ACL 5.00USD、月あたり (時間で案分)
ルール 1.00USD、月あたり (時間で案分)
リクエスト 0.60USD 100 万リクエストあたり

AWS WAFの代表的なマネージドルール

AWS Shield

DDoS攻撃から保護するサービス

  • AWS Shield Standard
    • 無料
    • AWSサービスへのベーシックなネットワークレイヤー攻撃を自動的に緩和
  • AWS Shield Advanced
    • 有料:1ヶ月3,000USDのサブスクリプションサービス
    • より高いレベルで保護
    • Organizations組織で利用可能

AWS Shield Advanced

保護されるサービス

  • Amazon CloudFront
  • Amazon Route 53
  • AWS Global Accelerator
  • Elastic Load Balancing (ELB)ロードバランサー
  • Amazon EC2 Elastic IP アドレス

機能とオプション

  • EC2 Elastic IP:数テラバイトのトラフィックを処理できるようにネットワークACLを昇格してデプロイ
  • AWS Shield Response Team (SRT):24時間365日対応のDDoS対応エキスパートが対応
  • 正常性ベースの検出:脅威イベントを検出し、検出精度を向上
  • AWS WAF、Firewall Manager 統合:指定リソースへの使用料金がサブスクリプション料金に含まれる
  • DDoS攻撃によるスケーリング料金のサービスクレジット
  • レイヤー3/4攻撃の通知、フォレンジックレポート(発生元IPなど)

AWS Shield Engagement Lambda

DDoS攻撃を自動検知して、エスカレーションアクションを自動化する設計パターン

  1. DDoSAttackRequestsPerSecondメトリクスなどの攻撃の有無や攻撃の量に応じてCloudWatchアラームを設定
  2. SNSトピックへ送信
    a. サブスクリプションEメールで関係者へ送信
    b. Lambda関数を実行し、Shield Advanced APIへリクエストして、AttackDetailなどの詳細情報を取得し、自動的にAWSサポートケースを作成(ビジネス、エンタープライズサポートプランが必要)

AWS Network Firewall

VPC向けのステートフルなマネージドネットワークファイアウォールおよびIPSサービス

  • 高可用性:トラフィック量に応じて自動的にスケールし、複数のAZにエンドポイントをデプロイする
  • カスタマイズルール実装可能
  • 組み合わせ
    • VPCイングレスルーティング:インバウンド/アウトバウンドリクエストは必ずAWS Network Firewallを通過するように設定可能
    • Transit Gateway
      • 検査用VPCとしてNetwork Firewallを構築
      • 大規模ネットワークにおいて全てのインバウンド/アウトバウンドを検査するように設定可能

AWS Firewall Manager

  • 複数アカウントでAWS WAF、AWS Shield Advanced、Amazon VPC セキュリティグループ、AWS Network Firewall、Amazon Route 53 Resolver DNS Firewall などを一元管理
  • AWS Organizations、AWS Configと連携し、AWS Configで非準拠リソースを抽出

利点

  • 特定アカウントのAmazon CloudFront ディストリビューションなど、特定のタイプのすべてのリソースを保護
  • 特定のタグですべてのリソースを保護
  • アカウントに追加されたリソースへの保護を自動的に追加
  • AWS Organizations 組織内のすべてのメンバーアカウントを AWS Shield Advanced に登録
  • AWS Organizations 組織に参加する新しい対象アカウントを自動的に登録

Amazon GuardDuty

  • CloudTrail、S3データログ、VPC Flow Logs、DNSクエリログを分析して、脅威を抽出
  • リージョンごとに有効化
  • 脅威レポートの事前確認:サンプルを作成して確認できる
  • リクエスト元:任意の許可IPアドレスリスト、脅威として考えられるIPアドレスリストを指定

Amazon Macie

S3バケットに保存された機密データを、機械学習とパターンマッチングで抽出・監査可能

機密データの検出

  • 機密データ検出ジョブ:検出とレポート出力を自動化
  • カスタムデータ識別子:一致するテキストパターンを定義する正規表現 (regex) と、オプションで結果を絞り込む文字列と近接ルールを指定
  • ジョブの検出結果:指定したS3バケットにKMSキーで暗号化されて保存

Amazon Security Hub

  • AWSのセキュリティサービスや外部のサードパーティサービスの検出結果を共通のJSONフォーマット(AWS Security Finding形式)に変換して統合
  • セキュリティベストプラクティスに基づくセキュリティスコアをパーセンテージで評価し、概要ダッシュボードで可視化
  • 統合された検出結果の詳細検索可能
  • セキュリティスコアを高めるためのアクション確認可能

Amazon Detective

GuardDutyの検出結果や取り込んだログデータソースから簡単に調査、原因の特定が行えるサービス

  • グラフやマップで可視化
  • 検出結果の詳細情報を確認可能

Discussion