一元化されたロギングと複数アカウントのセキュリティガードレール - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

一元化されたロギングと複数アカウントのセキュリティガードレール

作成者: Ankush Verma (AWS) と Tracy (Pierce) Hickey (AWS)

環境:本稼働

テクノロジー: セキュリティ、アイデンティティ、コンプライアンス、管理とガバナンス

AWS サービス: AWS CloudFormation; AWS Config ; Amazon CloudWatch; AWS CodePipeline; Amazon GuardDuty; AWS Lambda ; Amazon Macie ; AWS Security Hub; Amazon S3

[概要]

このパターンで説明されたアプローチは、AWS Organizations で複数のAmazon Web Services (AWS) アカウントがあり、現在、AWS Control Tower、ランディングゾーン、またはアカウント自動販売機のサービスを使用して、アカウントにベースラインガードレールを設定する際に課題に直面しているお客様に適しています。

このパターンでは、効率的なマルチアカウントアーキテクチャを使用して、一元化されたロギングと標準化されたセキュリティコントロールをうまく構造化された方法で設定する方法を示しています。この設定は、AWS CloudFormation テンプレート、AWS CodePipeline、および自動化スクリプトを活用して、組織に属するすべてのアカウントにデプロイされます。

 マルチアカウントアーキテクチャには、以下のアカウントが含まれます:

  • 集中ログ記録アカウント – すべての Virtual Private Cloud (VPC) フローログ、AWS CloudTrail ログ、AWS Config ログ、および他のすべてのアカウントの Amazon CloudWatch Logs (サブスクリプションを使用) のすべてのログが保存されるアカウント。

  • 親セキュリティアカウント — 複数のアカウントにわたり管理する、以下のセキュリティサービスの親アカウントとして機能するアカウント。

    • Amazon GuardDuty

    • AWS Security Hub

    • Amazon Macie

    • Amazon Detective

  • 子アカウント — 組織内の他のアカウント。これらのアカウントは、一元化されたロギングアカウントにすべての有用なログを保存します。子アカウントは、セキュリティサービスのメンバーとして親セキュリティアカウントに加わります。

CloudFormation テンプレート (添付) を起動すると、集中型ログ記録アカウントに 3 つの Amazon Simple Storage Service (Amazon S3) バケットがプロビジョニングされます。1 つのバケットを使用して、すべてのアカウントのすべての AWS 関連ログ (VPC フローログのログ CloudTrailや AWS Config など) を保存します。2 つ目のバケットは、すべてのアカウントの CloudFormation テンプレートを保存するためのものです。3番目のバケットは、Amazon S3アクセスログを保存するためのものです。

別の CloudFormation テンプレートは、AWS を使用するパイプラインを作成します CodeCommit。更新したコードが CodeCommit リポジトリにプッシュされると、すべてのアカウントでリソースの起動とセキュリティサービスの設定が処理されます。 CodeCommit リポジトリにアップロードされるファイルのファイル構造の詳細については、README.md ファイル (添付) を参照してください。

前提条件と制限

前提条件 

  • すべてのアカウントが同じ組織に加わっている AWS Organizations の組織 ID。

  • Amazon Simple Notification Service (Amazon SNS) 通知を受信する有効な E メールアドレス。

  • 各アカウントで Amazon Simple Storage Service (Amazon S3) バケットの確認されたクォータ。デフォルトでは、各アカウントには 100 個の S3 バケットがあります。追加のバケットが必要な場合、このソリューションをデプロイする前にクォータ引き上げをリクエストします。

制約事項

すべてのアカウントは、同じ組織に属している必要があります。AWS Organizations を使用していない場合、S3 バケットポリシーなどの特定のポリシーを変更して、各アカウントの AWS 識別とアクセス管理(IAM) ロールからのアクセスを許可する必要があります。

注: ソリューションをデプロイしている間は、Amazon SNS サブスクリプションを確認する必要があります。確認メッセージは、デプロイプロセス中に指定した Eメールアドレスに送信されます。これにより、このメールアドレス宛にいくつかの E メールアラートメッセージの送信が開始されます。理由は、にこれらのアラームは、アカウントで IAM ロールポリシーが作成または変更されるたび起動されるためです。デプロイプロセス中は、これらのアラートメッセージを無視できます。

アーキテクチャ

ターゲットテクノロジースタック

  • Amazon CloudWatch アラームとログ

  • AWS CodeCommit リポジトリ

  • AWS CodePipeline

  • AWS Config

  • Amazon Detective

  • Amazon GuardDuty

  • IAM ロールおよび許可

  • Amazon Macie

  • S3 バケット

  • AWS Security Hub

  • Amazon SNS

ターゲットアーキテクチャ 

3 つの AWS アカウントのサービスを示す図表。
ロギングとセキュリティサービスの詳細を示す図表。
  1. セキュリティサービスの、親セキュリティアカウントの子アカウントとして登録されているその他のアカウント

  2. 親アカウントを含むすべての子アカウントのSecurity Findings

リソース

更新されたコードが各アカウントと AWS リージョンの CodeCommit リポジトリにプッシュされると、次のリソースが自動的にプロビジョニングされます。

CloudFormation スタック 1 - 親スタックのログ記録

- ネストスタック 1 — 標準の IAM ロールとポリシー

- ネストスタック 2 — アカウント内の AWS Config セットアップ

- ネストされたスタック 3 - CloudWatch アラーム

            - SecurityGroupChangesAlarm

            - UnauthorizedAttemptAlarm

            - RootActivityAlarm

            - NetworkAclChangesAlarm

            - IAMUserManagementAlarm

            - IAMPolicyChangesAlarm

            - CloudTrailChangeAlarm

            - IAMCreateAccessKeyAlarm

      - CloudTrail ログからメトリクスを作成し、アラームに使用するメトリクスフィルター

      - SNS トピック

CloudFormation スタック 2 - 親ガードレールスタック

- ネストスタック 1 — アカウントパスワードポリシーを設定するための AWS Lambda 関数

- ネストスタック 2 — 基本的な AWS Config ルール

      - CIS-SecurityGroupsMustRestrictSshTraffic

      - セキュリティグループルール評価用の Lambda 関数 OpenSecurityGroupRuleCheck と共に

      - check-ec2-for-required-tag

      - check-for-unrestricted-ports

CloudFormation スタック 3 - CloudWatch ログのエクスポート

- Amazon Kinesis サブスクリプションを使用した CloudWatch ロググループから Amazon S3 へのログのエクスポート Amazon S3 Amazon Kinesis

ツール

  • AWS CloudFormation – AWS CloudFormation はテンプレートを使用して、すべての AWS リージョンとアカウントのアプリケーションに必要なすべてのリソースを自動的かつ安全な方法でモデル化およびプロビジョニングします。

  • Amazon CloudWatch – Amazon は、AWS リソースと AWS で実行しているアプリケーションをリアルタイムで CloudWatch モニタリングします。 CloudWatch を使用してメトリクスを収集および追跡できます。メトリクスとは、リソースやアプリケーションに関して測定できる変数です。

  • AWS CodeCommit – AWS CodeCommit は、AWS によってホストされるバージョン管理サービスです。を使用して CodeCommit 、アセット (ドキュメント、ソースコード、バイナリファイルなど) をクラウドにプライベートに保存および管理できます。

  • AWS CodePipeline – AWS CodePipeline は、ソフトウェアのリリースに必要なステップをモデル化、視覚化、および自動化するために使用できる継続的な配信サービスです。

  • AWS Config」 — AWS Config は、 AWS アカウントにおける AWS リソースの設定を詳細に表示します。これには、リソース間の関係と設定の履歴が含まれるため、時間の経過と共に設定と関係がどのように変わるかを確認できます。

  • Amazon Detective」 — Amazon Detective を使用して、セキュリティに関する検出結果や疑わしいアクティビティの根本原因を簡単に分析、調査、および迅速に特定できます。Detective は、AWS リソースからログデータを自動的に収集します。次に、機械学習、統計分析、グラフ理論を使用して、セキュリティ調査をより迅速かつ効率的に可視化、および実行することを支援します。

  • Amazon GuardDuty – Amazon GuardDuty は、フローログ、 CloudTrail 管理イベントログ、 CloudTrail データイベントログ、ドメインネームシステム (DNS) ログを分析して処理する継続的なセキュリティモニタリングサービスです。悪意のある IP アドレスやドメインのリストなどの脅威インテリジェンスフィード、および機械学習を使用して、AWS 環境内の予期しない、潜在的に未許可である、悪意のあるアクティビティを識別します。

  • AWS 識別とアクセス管理」 — AWS 識別とアクセス管理(IAM)は、AWS リソースへのアクセスをセキュアに制御するためのウェブサービスです。IAM を使用して、誰を認証 (サインイン) し、誰にリソースの使用を認可する (アクセス許可を付与する) かを制御します。

  • Amazon Macie」 — Macie は、組織が Simple Storage Service (Amazon S3) に保存している個人を特定できる情報 (PII) や財務データなどの機密データを寄り良く把握できるよう、そのようなデータの検出を自動化します。

  • Amazon S3」 — Amazon Simple Storage Service (Amazon S3) は、拡張性の高いオブジェクトストレージサービスで、ウェブサイト、モバイルアプリケーション、バックアップ、データレイクなど、幅広いストレージソリューションに使用できます。

  • AWS Security Hub」 — AWS Security Hubでは、AWS のセキュリティ状態を包括的に把握し、セキュリティ業界標準およびベストプラクティスに照らして環境をチェックするのに役立ちます。

  • Amazon SNS – Amazon Simple Notification Service (Amazon SNS) は、パブリッシャーからサブスクライバー (または生産者から消費者) へのメッセージ配信を提供するマネージドサービスです。

エピック

タスク説明必要なスキル
Childaccount_IAM_role_All_Accounts.yaml CloudFormation テンプレートを起動して、us-east-1 リージョンに IAM ロールを作成します。

必要な IAM ロールと許可を作成するには、us-east-1 リージョンの各アカウント (一元化ログアカウント、親セキュリティアカウント、および組織内のその他すべての AWS アカウント) で、このテンプレートを 1 つずつ手動で起動する必要があります。Childaccount_IAM_role_All_Accounts.yaml テンプレートは、パッケージの /templates/initial_deployment_templates ディレクトリにあります。IAM ロールは、残りのアーキテクチャのプロビジョニングとセットアップのための API 呼び出しを行うときに使用されます。パラメータとして渡される IAM ロールの名前が、すべてのアカウントにわたり確実に一致しているようにします。

クラウドアーキテクト
テンプレートパラメータで、IAM ロール名を指定します。

親セキュリティアカウントの が CodeBuild他のすべての子アカウントで引き受けることができる IAM ロールを指定します。デフォルトのロール名は security_execute_child_stack_role です。

クラウドアーキテクト
パラメータに、親セキュリティアカウントのアカウント ID を指定します。

親セキュリティアカウントは、 が CodeBuild 実行されるアカウントです。

クラウドアーキテクト
タスク説明必要なスキル
集中ログ記録アカウントで、us-east-1 で S3Buckets-Centralized -LoggingAccount.yaml CloudFormation テンプレートを起動します。

集中型ロギングアカウントに S3 バケットを作成するには、 S3Buckets-Centralized-LoggingAccount.yaml を起動します。テンプレートはパッケージの /templates/initial_deployment_templates ディレクトリにあります。S3 バケットには、すべてのログ、テンプレート、Amazon S3 アクセスログが保存されます。S3 バケット名をすべて書き留めておきます。この名前は、次のステップでパラメータファイルを変更するときに使用します。

クラウドアーキテクト
テンプレートパラメータで、AWS ログストレージの S3 バケットの名前を指定します。

S3 Bucket Name for Centralized Logging in Logging Account パラメータの名前を入力します。このバケットは、フローログや CloudTrail ログなどの AWS ログをすべてのアカウントから一元的に保存する場所として機能します。バケット名と Amazon リソースネーム (ARN) をメモしておきます。

クラウドアーキテクト
アクセスログ S3 バケットの名前を提供します。

S3 Bucket Name for Access Logs in Logging Account パラメータの S3 バケット名を入力します。この S3 バケットには Amazon S3 のアクセスログが格納されます

クラウドアーキテクト
テンプレートを保存する S3 バケットの名前を指定します。

S3 Bucket Name for CloudFormation Template storage in Logging Account パラメータに S3 バケット名を入力します。

クラウドアーキテクト
組織 ID を提供します。

組織内の S3 バケットへのアクセスを提供するには、Organization Id for Non-AMS accounts パラメータに組織の ID を入力します。

クラウドアーキテクト
タスク説明必要なスキル
security-guard-rails-codepipeline-Centralized-SecurityAccount.yml CloudFormation テンプレートを起動します。

CI/CD パイプラインをデプロイするには、us-east-1 の親セキュリティアカウントで security-guard-rails-codepipeline-Centralized-SecurityAccount.yml テンプレートを手動で起動します。テンプレートはパッケージの /templates/initial_deployment_templates ディレクトリにあります。このパイプラインは、すべての子アカウントにすべてのインフラストラクチャをデプロイします。

クラウドアーキテクト
テンプレートを集中ロギングアカウントに格納する S3 バケットの名前を指定します。

ステップ 2 で S3 Bucket Name for the CloudFormation Template storage in Logging Account パラメータに指定した S3 バケットの名前を入力します。

クラウドアーキテクト
子アカウントで使用される IAM ロール名を指定します。

ステップ 1 の Name of the IAM role でパラメータに提供された名前を入力します。

クラウドアーキテクト
CodePipeline 失敗通知を受信するための有効な E メールアドレスを指定します。

CodePipeline 障害通知やその他の CloudWatch アラーム関連の通知を受信するために使用する E メールアドレスを入力します。

クラウドアーキテクト
タスク説明必要なスキル
アカウントリスト.json を修正します。

パッケージの最上位にある Accountlist.json ファイルに、親セキュリティアカウント番号と子アカウント番号を追加します。ChildAccountList フィールドには親のセキュリティアカウント番号も含まれていることに注意します。パッケージの deployment-instructions.md ファイルの例を参照してください。

クラウドアーキテクト
accounts.csv の変更

パッケージの最上位にある accounts.csv ファイルに、すべての子アカウントと、アカウントに登録されているメールを追加します。この例では、 ファイル内の を呼び出します。

クラウドアーキテクト
パラメータ.config を変更します。

/templates フォルダーの parameters.config ファイルでは、次の 6 つのパラメータを更新します

  • pNotifyEmail : パイプラインを設定した際に指定した E メールアドレス (ステップ 3 を参照)

  • pstackNameLogging: 集中ログ記録用の CloudFormation スタックの名前

  • pS3LogsBucket : すべてのアカウントからのログが保存される S3 バケットの名前 (ステップ 2 を参照)

  • pBucketName : ログの保存に使用されるS3 バケットの ARN

  • pTemplateBucketName : テンプレートが保存される S3 バケットの名前 (ステップ 2 を参照)

  • pAllowedAccounts : 親アカウントと子アカウントのアカウント ID

他のパラメータについては、デフォルト値をそのまま使用できます。例えば、deployment-instructions.mdファイルのコードを参照してください。

クラウドアーキテクト
タスク説明必要なスキル
ステップ 3 で作成した CodeCommit リポジトリにアクセスします。

CI/CD インフラストラクチャ CloudFormation スタックの出力セクション (ステップ 3 で起動) で、 CodeCommit リポジトリ URL の名前を書き留めます。リポジトリへのアクセスを作成して、ファイルをそのリポジトリにプッシュして、インフラストラクチャをすべてのターゲットアカウントにデプロイできるようにします。詳細については、「AWS のセットアップ CodeCommit」を参照してください。

クラウドアーキテクト
ファイルを CodeCommit リポジトリにプッシュします。

ローカルマシンで Git をインストールします。次に、Git コマンドを実行して空のリポジトリをクローンし、ラップトップからリポジトリフォルダにファイルをコピーし、アーティファクトをリポジトリにプッシュします。パッケージの deployment-instructions.md ファイルのサンプル Git コマンドを確認します。基本的な Git コマンドについては、関連リソースセクションを参照します。

クラウドアーキテクト
タスク説明必要なスキル
CodePipeline および のステータスを確認します CodeBuild。

アーティファクトを CodeCommit リポジトリにプッシュしたら、ステップ 3 で作成した CodePipeline パイプラインが開始されたことを確認します。次に、 CodeBuild ログをチェックしてステータスまたはエラーを確認します。

クラウドアーキテクト

関連リソース

添付ファイル

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「attachment.zip