Amazon Macie を使用して CloudWatch Logs で機密データを保護する - AWS 規範ガイダンス

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

Amazon Macie を使用して CloudWatch Logs で機密データを保護する

Anisha Salunkhe、Omar Franco、David Guardiola、Amazon Web Services

概要

このパターンは、包括的なセキュリティモニタリングワークフローを実装することでAmazon Macie を使用して Amazon CloudWatch Logs ロググループの機密データを自動的に検出する方法を示しています。このソリューションは、Amazon Data Firehose を使用して CloudWatch Logs エントリを Amazon Simple Storage Service (Amazon S3) にストリーミングします。Macie は、このバケットを定期的にスキャンして、個人を特定できる情報 (PII)、財務データ、その他の機密コンテンツがないか調べます。インフラストラクチャは、必要なすべての AWS のサービス および 設定をプロビジョニングする AWS CloudFormation テンプレートを介してデプロイされます。

CloudWatch Logs には、機密性の高いユーザー情報が誤って含まれる可能性があるアプリケーションデータが含まれていることがよくあります。これにより、コンプライアンスとセキュリティのリスクが発生する可能性があります。従来のログモニタリングアプローチには、機密データの自動検出機能がありません。これにより、潜在的なデータ漏洩をリアルタイムで特定して対応することが困難になる可能性があります。

このパターンは、ログ記録システム内の機密データの自動検出とアラートを提供することで、セキュリティチームとコンプライアンス責任者がデータの機密性を維持するのに役立ちます。このソリューションは、Amazon Simple Notification Service (Amazon SNS) 通知によるプロアクティブなインシデント対応を可能にし、機密データを安全な Amazon S3 バケットに自動的に分離します。検出パターンをカスタマイズし、ワークフローを既存のセキュリティオペレーションプロセスと統合できます。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • CloudFormation スタックを作成するアクセス許可

  • モニタリングする CloudWatch Logs ロググループ

  • Amazon SNS から通知を受け取るためのアクティブな E メールアドレス

  • AWS CloudShell へのアクセス

  • (オプション) インストールおよび設定されている AWS Command Line Interface (AWS CLI) へのアクセス

制限事項

アーキテクチャ

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

次の図は、Macie を使用して機密データの CloudWatch Logs ログエントリを調べるためのワークフローを示しています。

 

ワークフローには以下のステップが表示されます。

  1. CloudWatch Logs ロググループは、サブスクリプションフィルターの対象となるログを生成します。

  2. サブスクリプションフィルターは、ログを Amazon Data Firehose に転送します。

  3. ログは、Amazon Data Firehose 配信ストリームを通過するときに AWS Key Management Service (AWS KMS) キーで暗号化されます。

  4. 配信ストリームは、Amazon S3 のエクスポートされたログバケットにログを配信します。

  5. 毎日午前 4 時に、Amazon EventBridge は、エクスポートされたログバケット内の機密データの Macie スキャンを開始する AWS Lambda 関数を開始します。

  6. Macie がバケット内の機密データを識別すると、Lambda 関数はエクスポートされたログバケットからログを削除し、 で暗号化します AWS KMS key。

  7. Lambda 関数は、データ分離バケットに機密データを含むログを分離します。

  8. 機密データを識別すると、Amazon SNS トピックが開始されます。

  9. Amazon SNS は、機密データを含むログに関する情報を含む E メールアドレスに E メール通知を送信します。

デプロイされたリソース

CloudFormation テンプレートは、次のリソースをターゲットにデプロイ AWS アカウント します AWS リージョン。

ツール

AWS のサービス

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。

  • Amazon CloudWatch Logs を使用すると、すべてのシステム、アプリケーション、および からのログを一元化 AWS のサービス できるため、ログをモニタリングして安全にアーカイブできます。

  • Amazon Data Firehose は AWS のサービス、サポートされているサードパーティーサービスプロバイダーが所有する他の HTTP エンドポイント、カスタム HTTP エンドポイント、HTTP エンドポイントにリアルタイムのストリーミングデータを配信するのに役立ちます。

  • Amazon EventBridge は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどのソースです AWS アカウント。

  • AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Macie は、機密データを検出し、データセキュリティリスクを可視化し、それらのリスクに対する自動保護を可能にします。

  • Amazon Simple Notification Service (Amazon SNS)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

コードリポジトリ

このパターンのコードは、GitHub sample-macie-for-securing-cloudwatch-logs リポジトリで入手できます。

ベストプラクティス

CloudFormation ドキュメントのCloudFormation ベストプラクティスに従ってください。

エピック

タスク説明必要なスキル

コードリポジトリを複製します。

次のコマンドを入力し、リポジトリのクローンをローカルのワークステーションに作成します。

git clone https://github.com/aws-samples/sample-macie-for-securing-cloudwatch-logs
アプリ開発者

(オプション) CloudFormation テンプレートを編集します。

  1. main.yaml ファイルを開きます。

  2. 次のいずれかを実行して、テンプレートをカスタマイズします。

  3. main.yaml ファイルを保存して閉じます。

アプリ開発者

オプション 1 – コマンドラインパラメータを含むスクリプトを使用してデプロイします。

次のコマンドを入力して、コマンドラインパラメータを使用してソリューションをデプロイします。 の値は Amazon Macie がまだ有効になっていないtrue場合のみenable-macieです。

./scripts/test-macie-solution.sh --deploy-stack \ --stack-name <stack name> \ --email <email address> \ --enable-macie <true or false> \ --region <region> \ --resource-name <prefix for all resources> \ --bucket-name <bucket name>
AWS 全般

オプション 2 – 環境変数を含むスクリプトを使用してデプロイします。

  1. 次のコマンドを入力して環境変数を定義します。 の値は Amazon Macie がまだ有効になっていないtrue場合のみENABLE_MACIEです。

    export STACK_NAME=<stack name> export SNS_EMAIL=<email address> export ENABLE_MACIE=<true or false> export REGION=<region> export RESOURCE_NAME=<prefix for all resources> export BUCKET_NAME=<bucket name>
  2. デプロイ前にパラメータを検証するには、次のコマンドを入力します。

    ./scripts/test-macie-solution.sh \ --validate-params \ --email <email address> \ --region <region>
  3. 次のコマンドを入力してソリューションをデプロイします。

    ./scripts/test-macie-solution.sh --deploy-stack
AWS 全般

オプション 3 – を使用してデプロイします AWS CLI。

を使用してソリューションをデプロイするには、次のコマンドを入力します。 の値は AWS CLI Amazon Macie がまだ有効になっていないtrue場合のみEnableMacieです。

aws cloudformation create-stack \ --region us-east-1 \ --stack-name macie-for-securing-cloudwatch-logs \ --template-body file://app/main.yml \ --capabilities CAPABILITY_IAM \ --parameters \ ParameterKey=ResourceName,ParameterValue=<prefix for all resources> \ ParameterKey=BucketName,ParameterValue=<bucket name> \ ParameterKey=LogGroupName,ParameterValue=<path for log group> \ ParameterKey=SNSTopicEndpointEmail,ParameterValue=<email address> \ ParameterKey=EnableMacie,ParameterValue=<true or false>

オプション 4 – を通じてデプロイします AWS マネジメントコンソール。

  1. AWS CloudFormation コンソールを開きます。

  2. 画面上部のナビゲーションバーで、スタック AWS リージョン を作成する を選択します。

  3. [スタック] ページでは、右上の [スタックの作成] を選択してから、[新しいリソースを使用 (標準)] を選択します。

  4. スタックの作成ページの「前提条件 - テンプレートを準備する」で、「既存のテンプレートを選択する」を選択します。

  5. テンプレートを指定 で、テンプレートファイルをアップロード を選択し、クローンされたリポジトリから main.yaml テンプレートをアップロードします。

  6. [次へ] を選択します。

  7. スタックの詳細の指定ページで、スタック名ボックスにスタック名を入力します。

  8. パラメータセクションで、次のテンプレートパラメータの値を指定します。

    • ResourceName: すべてのリソースのプレフィックス

    • BucketName: Amazon S3 バケットの一意の名前

    • LogGroupName: CloudWatch Logs のロググループ名

    • SNSTopicEndpointEmail: 通知の E メールアドレス

    • EnableMacie: Macie がまだ有効になっていないtrue場合は に設定します

    • (オプション) Region: スタックをデプロイする AWS リージョン 。

    • (オプション) TemplatePath: CloudFormation テンプレートへのパス

  9. [次へ] を選択します。

  10. 機能 で、このテンプレートが IAM リソースを作成し、テンプレートで IAM リソースを使用するように指定できることを確認します

  11. [次へ] を選択します。

  12. [確認して作成] ページで、スタックの詳細を確認します。

  13. [送信] を選択してスタックを起動します。

AWS 全般

デプロイステータスをモニタリングし、デプロイを確認します。

  1. デプロイステータスをモニタリングするには、次のコマンドを入力します。

    ./scripts/test-macie-solution.sh \ --deployment-status \ --stack-name <stack name>
    注記

    新しいスタックのイベントタブで、スタック作成の進行状況とステータスを監視することもできます。詳細については、「スタックの進行状況のモニタリング」を参照してください。

  2. ステータスが CREATE_COMPLETE に変わったら、スタック出力でリソース情報を確認します。

AWS 全般

Amazon SNS サブスクリプションを確認します。

Amazon Amazon SNSドキュメントのAmazon SNSサブスクリプションの確認」の指示に従って、Amazon SNS サブスクリプションを確認します。

アプリ開発者
タスク説明必要なスキル

オプション 1 – 自動レポートを使用してテストします。

デフォルトのスタック名を使用した場合は、次のコマンドを入力してソリューションをテストします。

./scripts/test-macie-solution.sh \ --full-test

カスタムスタック名を使用した場合は、次のコマンドを入力してソリューションをテストします。

./scripts/test-macie-solution.sh \ --full-test \ --stack-name <stack name>

カスタムスタック名とカスタムパラメータを使用した場合は、次のコマンドを入力してソリューションをテストします。

./scripts/test-macie-solution.sh --full-test \ --stack-name <stack name> \ --region <region> \ --log-group <log group path>
AWS 全般

オプション 2 – ターゲット検証でテストします。

  1. 次のコマンドを入力して、機密情報を含むテストデータを生成します。

    ./scripts/test-macie-solution.sh \ --generate-test-data \ --stack-name <stack name>

    このコマンドは次のことを行います。

    • 従業員 IDs、特許 IDs、クレジットカード番号、社会保障番号、E メールアドレスなど、現実的な機密データパターンを含む CloudWatch Logs ログエントリを作成します。

    • 包括的なテストのために、機密ログエントリと非機密ログエントリの両方を生成します。

    • テストデータ生成プロセスの詳細なログ記録を提供します。

  2. 次のコマンドを入力して、データパイプラインフローを確認します。

    ./scripts/test-macie-solution.sh \ --verify-pipeline \ --stack-name <stack name>

    このコマンドは次のことを行います。

    • CloudWatch Logs エントリが Amazon Data Firehose にストリーミングされていることを確認します

    • ログデータが適切な暗号化を使用して Amazon S3 バケットに配信されたことを検証します

    • Amazon S3 オブジェクトストレージのプレフィックス構造が正しいことを確認します

    • 保存されたオブジェクトの暗号化ステータスを確認します。

    • データフローのタイミングをモニタリングし、処理の待機期間を提供します

  3. Macie 分類ジョブを開始するには、次のコマンドを入力します。

    ./scripts/test-macie-solution.sh \ --trigger-macie-job \ --stack-name <stack name>

    このコマンドは次のことを行います。

    • Lambda 関数を介して Macie 分類ジョブを手動でトリガーします

    • ジョブの実行ステータスをモニタリングし、フィードバックを提供します

    • 実行前に Macie サービスの可用性を検証します

    • アカウントで Macie が有効になっていない場合の処理

    • 詳細なジョブ実行結果を提供します。

  4. 次のコマンドを入力して、アラートとデータの分離を検証します。

    ./scripts/test-macie-solution.sh \ --verify-alerts \ --stack-name <stack name>

    このコマンドは次のことを行います。

    • EventBridge ルールが正しく設定され、アクティブであることを確認します

    • Amazon SNS トピック設定とサブスクリプションステータスを検証します

    • データ分離バケットの設定とアクセス許可を確認します

    • 分離バケットへの機密データの移動をモニタリングします

    • アラートワークフローの完全な機能を検証する

AWS 全般
タスク説明必要なスキル

オプション 1 – 自動クリーンアップを実行します。

デフォルトのスタック名を使用した場合は、次のコマンドを入力してスタックを削除します。

./scripts/cleanup-macie-solution.sh \ --full-cleanup

カスタムスタック名を使用した場合は、次のコマンドを入力してスタックを削除します。

./scripts/cleanup-macie-solution.sh \ --full-cleanup \ --stack-name <stack name>

カスタムスタック名とカスタムパラメータを使用した場合は、次のコマンドを入力してスタックを削除します。

./scripts/cleanup-macie-solution.sh \ --full-cleanup \ --stack-name <stack name> \ --region <region> \ --disable-macie <true or false>
AWS 全般

オプション 2 – step-by-stepクリーンアップを実行します。

  1. アクティブなプロセスを停止するには、次のコマンドを入力します。

    ./scripts/cleanup-macie-solution.sh \ --stop-processes \ --stack-name <stack name>

    このコマンドは次のことを行います。

    • EventBridge ルールをオフにして、新しいジョブの実行を防止します

    • 現在実行中の Macie 分類ジョブをすべて停止します

    • 保留中の Macie ジョブ実行をキャンセルします

    • キュー内の保留中の Amazon SNS メッセージをクリアします

    • 停止した各プロセスのステータス更新を提供します。

  2. Amazon S3 バケットを空にするには、次のコマンドを入力します。

    ./scripts/cleanup-macie-solution.sh \ --empty-buckets \ --stack-name <stack name>

    このコマンドは次のことを行います。

    • CloudWatch Logs のバケットからすべてのオブジェクトを削除します

    • データ分離 Amazon S3 バケットからすべてのオブジェクトを削除します

    • 不完全なマルチパートアップロードをすべて削除します

    • Amazon S3 バージョニングが有効になっている場合、バージョニングされたオブジェクトを処理します

    • オブジェクト数と削除の進行状況の更新を提供します

  3. CloudFormation スタックを削除するには、次のコマンドを入力します。

    ./scripts/cleanup-macie-solution.sh \ --delete-stack \ --stack-name <stack name>

    このコマンドは次のことを行います。

    • CloudFormation スタックの削除プロセスを開始します。

    • リアルタイムのステータス更新で削除の進行状況をモニタリングします

    • 詳細なエラーレポートで削除の失敗を処理します

    • 続行する前にスタックが完全に削除されるまで待機します

    • トラブルシューティング用のスタックイベント履歴を提供します。

  4. Macie リソースをクリーンアップするには、次のコマンドを入力します。

    ./scripts/cleanup-macie-solution.sh \ --cleanup-macie \ --stack-name <stack name>

    このスタックは以下を実行します。

    • ソリューションによって作成されたカスタムデータ識別子を削除します

    • 残りの Macie ジョブアーティファクトと検出結果をクリーンアップします

    • スタックによって有効になっている場合、Macie セッションを無効にします

    • Macie リソースが他のアプリケーションと共有されている場合に対処します

    • 各 Macie コンポーネントの詳細なクリーンアップステータスを提供します。

AWS 全般

クリーンアップを確認します。

  1. 次のコマンドを入力して、スタックが削除されたことを確認します。

    aws cloudformation describe-stacks \ --stack-name <stack name> \ --region <region>
  2. 次のコマンドを入力して、Amazon S3 バケットが削除されたことを確認します。

    aws s3 ls | grep macie
  3. 次のコマンドを入力して、Macie カスタムデータ識別子が削除されたことを確認します。

    aws macie2 list-custom-data-identifiers \ --region <region>
  4. 次のコマンドを入力して、残りのリソースを確認します。

    ./scripts/cleanup-macie-solution.sh \ --verify-cleanup \ --stack-name <stack name>
AWS 全般

トラブルシューティング

問題ソリューション

CloudFormation スタックのステータスは CREATE_FAILED と表示されます。

CloudFormation テンプレートは、CloudWatch Logs にログを発行するように設定されています。でログを表示 AWS マネジメントコンソール できるため、Amazon EC2 インスタンスに接続する必要はありません。詳細については、「コンソールで CloudFormation ログを表示する」(AWS ブログ記事) を参照してください。

CloudFormation delete-stack コマンドは失敗します。

一部のリソースは、削除する前に空にしなければなりません。たとえば、バケットまたはセキュリティグループを削除するには、Amazon S3 バケットのすべてのオブジェクト、または Amazon EC2 セキュリティグループのすべてのインスタンスを削除する必要があります。詳細については、Amazon S3 ドキュメントの「スタックの削除が失敗する」を参照してください。

パラメータを解析する際のエラー。

AWS CLI または CloudFormation コンソールを使用して値を渡す場合は、引用符を追加します。

関連リソース