SIEM on Amazon OpenSearch Service は、セキュリティインシデントを調査するためのソリューションです。Amazon OpenSearch Service (Amazon Elasticsearch Service の後継) を活用して、AWS のマルチアカウント環境下で、複数種類のログを収集し、ログの相関分析や可視化をすることができます。デプロイは、AWS CloudFormation または AWS Cloud Development Kit (AWS CDK) で行います。30分程度でデプロイは終わります。AWS サービスのログを Simple Storage Service (Amazon S3) のバケットに PUT すると、自動的に ETL 処理を行い、SIEM on OpenSearch Service に取り込まれます。ログを取り込んだ後は、ダッシュボードによる可視化や、複数ログの相関分析ができるようになります。
Amazon OpenSearch Service のサービス名変更に伴い、SIEM on Amazon Elasticsearch Service から SIEM on Amazon OpenSearch Service に名前を変更しました。
Jump to | AWS サービス(ログ送信元)の設定 | SIEM の設定 | 高度なデプロイ | ダッシュボード | サポートログタイプ | よくある質問 | 変更履歴 |
SIEM on OpenSearch Service は以下のログを取り込むことができます。
AWS Service | Log | |
---|---|---|
セキュリティ、ID、およびコンプライアンス | Amazon GuardDuty | GuardDuty findings |
セキュリティ、ID、およびコンプライアンス | AWS Directory Service | Microsoft AD |
セキュリティ、ID、およびコンプライアンス | AWS WAF | AWS WAF Web ACL traffic information AWS WAF Classic Web ACL traffic information |
セキュリティ、ID、およびコンプライアンス | AWS Security Hub | Security Hub findings GuardDuty findings Amazon Macie findings Amazon Inspector findings AWS IAM Access Analyzer findings |
セキュリティ、ID、およびコンプライアンス | AWS Network Firewall | Flow logs Alert logs |
管理とガバナンス | AWS CloudTrail | CloudTrail Log Event CloudTrail Insight Event |
管理とガバナンス | AWS Config | Configuration 履歴 Configuration スナップショット Config Rules |
ネットワーキングとコンテンツ配信 | Amazon CloudFront | Standard access log Real-time log |
ネットワーキングとコンテンツ配信 | Amazon Route 53 Resolver | VPC DNS query log |
ネットワーキングとコンテンツ配信 | Amazon Virtual Private Cloud (Amazon VPC) | VPC Flow Logs (Version5) |
ネットワーキングとコンテンツ配信 | Elastic Load Balancing | Application Load Balancer access logs Network Load Balancer access logs Classic Load Balancer access logs |
ストレージ | Amazon FSx for Windows File Server | audit log |
ストレージ | Amazon Simple Storage Service (Amazon S3) | access log |
データベース | Amazon Relational Database Service (Amazon RDS) (Experimental Support) |
Amazon Aurora(MySQL) Amazon Aurora(PostgreSQL) Amazon RDS for MariaDB Amazon RDS for MySQL Amazon RDS for PostgreSQL |
データベース | Amazon ElastiCache | ElastiCache for Redis SLOWLOG |
分析 | Amazon OpenSearch Service | Audit logs |
分析 | Amazon Managed Streaming for Apache Kafka (Amazon MSK) | Broker log |
コンピューティング | Linux OS via CloudWatch Logs |
/var/log/messages /var/log/secure |
コンピューティング | Windows Server 2012/2016/2019 via CloudWatch Logs |
System event log Security event log |
コンテナ | Amazon Elastic Container Service (Amazon ECS) via FireLens |
Framework only |
エンドユーザーコンピューティング | Amazon WorkSpaces | Event log Inventory |
Experimental Support はログフィールドの正規化等を大きく変更する可能性があります
対応ログは、Elastic Common Schema に従って正規化しています。ログのオリジナルと正規化したフィールド名の対応表は こちら をご参照ください。
Product/Service | Pull Request | Doc | Contributor |
---|---|---|---|
TrendMicro Deep Security | #27 | README | @EijiSugiura |
Okta audit log | #168 | README | @yopiyama |
こちら をご参照ください
CloudFormation テンプレートを使って、SIEM on OpenSearch Service のドメインをパブリックアクセスに作成します。Amazon VPC 内へのデプロイやカスタマイズをする場合の手順は こちら をご参照ください。
IP アドレスに国情報や緯度・経度のロケーション情報を付与することができます。ロケーション情報は MaxMind 社の GeoLite2 Free をダウンロードして活用します。ロケーション情報を付与したい方は MaxMind にて無料ライセンスを取得してください。
注) CloudFormation テンプレートは OpenSearch Service を t3.medium.search インスタンスでデプロイします。無料利用枠ではありません。また SIEM は、多くのログを集約して負荷が高くなるため、小さい t3 を避けて、メトリクスを確認しつつ最適なインスタンスを選択してください。 インスタンスの変更、ディスクの拡張、UltraWarm の使用等は、AWS マネジメントコンソールから直接行ってください。SIEM on OpenSearch Service の CloudFormation テンプレートは OpenSearch Service に対しては初期デプロイのみで、ノードの変更、削除等の管理はしません。
SIEM on OpenSearch Service をデプロイするリージョンを選択してください。
(※) 大阪リージョンのみ導入時は r5.large.search インスタンスでデプロイされます
ご希望のリージョンがこのリストない場合は、手動で次のテンプレートを選択してください。
https://aes-siem-<REGION>.s3.amazonaws.com/siem-on-amazon-opensearch-service.template
次の手順に従って CloudFormation のテンプレートを作成することもできます。
クイックスタートでデプロイされた方は CloudFormation テンプレートの作成はスキップしてください。
AWS CloudShell または Amazon Linux 2 を実行している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使って CloudFormation テンプレートを作成します
前提の環境)
- AWS CloudShell または Amazon Linux 2 on Amazon EC2
- "Development Tools"
- Python 3.8
- Python 3.8 libraries and header files
- Git
上記がインストールされてない場合は以下を実行
sudo yum groups mark install -y "Development Tools"
sudo yum install -y amazon-linux-extras
sudo amazon-linux-extras enable python3.8
sudo yum install -y python38 python38-devel git jq
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
GitHub レポジトリからコードを clone します
cd
git clone https://github.com/aws-samples/siem-on-amazon-opensearch-service.git
export TEMPLATE_OUTPUT_BUCKET=<YOUR_TEMPLATE_OUTPUT_BUCKET> # Name for the S3 bucket where the template will be located
export AWS_REGION=<AWS_REGION> # region where the distributable is deployed
注) $TEMPLATE_OUTPUT_BUCKET は S3 バケット名です。事前に作成してください。デプロイ用のファイルの配布に使用します。ファイルはパブリックからアクセスできる必要があります。テンプレート作成時に使用する build-s3-dist.sh は S3 バケットの作成をしません。
cd ~/siem-on-amazon-opensearch-service/deployment/cdk-solution-helper/
chmod +x ./step1-build-lambda-pkg.sh && ./step1-build-lambda-pkg.sh && cd ..
chmod +x ./build-s3-dist.sh && ./build-s3-dist.sh $TEMPLATE_OUTPUT_BUCKET
aws s3 cp ./global-s3-assets s3://$TEMPLATE_OUTPUT_BUCKET/ --recursive --acl bucket-owner-full-control
aws s3 cp ./regional-s3-assets s3://$TEMPLATE_OUTPUT_BUCKET/ --recursive --acl bucket-owner-full-control
注) コマンドを実行するために S3 バケットへファイルをアップロードする権限を付与し、アップロードしたファイルに適切なアクセスポリシーを設定してください。
コピーしたテンプレートは、https://s3.amazonaws.com/$TEMPLATE_OUTPUT_BUCKET/siem-on-amazon-opensearch-service.template
にあります。このテンプレートを AWS CloudFormation に指定してデプロイしてください。
約30分で CloudFormation によるデプロイが完了します。次に、OpenSearch Dashboards (Kibana の後継) の設定をします。
- AWS CloudFormation コンソールで、作成したスタックを選択。画面右上のタブメニューから「出力」を選択。OpenSearch Dashboards のユーザー名、パスワード、URL を確認できます。この認証情報を使って OpenSearch Dashboards にログインしてください
- 最初のログイン時に [Select your tenant] と表示されるので、[Global] を選択してください。作成済みのダッシュボード等を利用できます。
- [Select your tenant] で [Global] を選択せずに、[Private] を選んで、各ユーザー専用のダッシュボード等を用意して、カスタマイズをすることもできます。以下は、その方法で、Global を選んだ場合は設定不要です。
- OpenSearch Dashboards の Dashboard等 のファイルをここ からダウンロードします。ダウンロードしたファイルを解凍してください
- OpenSearch Dashboards のコンソールに移動してください。画面左側に並んでいるアイコンから「Stack Management」 を選択してください、「Saved Objects」、「Import」、「Import」の順に選択をして、先ほど解凍したZIPファイルの中ある「dashboard.ndjson」をインポートしてください
- インポートした設定ファイルを反映させるために一度ログアウトしてから、再ログインをしてください
S3 バケットの aes-siem-[AWS アカウント ID]-log にログを出力してください。ログは自動的に SIEM on OpenSearch Service に取り込まれて分析ができるようになります。
AWS の各サービスのログを S3 バケットへの出力する方法は、こちら をご参照ください。
SIEM on Amazon OpenSearch Service のワークショップ を用意しています。SIEM の構築、AWS リソースのログの取り込み、OpenSearch Dashboards / Kibana の使い方、セキュリティインシデントの調査、ダッシュボードの作成、アラートの作成、Apache HTTPD サーバーのログの取り込みを体験できます。
SIEM on OpenSearch Service または SIEM on Amazon ES を新しいバージョンにアップデートする時は、OpenSearch / Elasticsearch のドメインをアップグレードしてから、初期インストールと同じ方法 (CloudFormation or AWS CDK) でアップデートしてください。SIEM の変更履歴は こちら から確認できます。
注) Global tenant の 設定やダッシュボード等は自動で上書きされるのでご注意ください。アップデート前に使用していた設定ファイルやダッシュボード等は S3 バケットの aes-siem-[AWS_Account]-snapshot/saved_objects/ にバックアップされるので、元の設定にする場合は手動でリストアしてください。
OpenSearch Service の 1.0 か、Elasticsearch の 7.10 にアップグレードします
- OpenSearch Service コンソール に移動
- [aes-siem] ドメインを選択
- [アクション] アイコンを選択して、プルダウンリストから [ドメインのアップグレード] を選択
- アップグレード先のバージョンで [OpenSearch 1.0] または、[Elasticsearch 7.10] を選んで、[送信] を選択
CloudFormation で初期インストールした場合は次へ進み、AWS CDK で初期インストールしている場合は 高度なデプロイ のアップデートを参照してください。
CloudFormation のテンプレートを指定して更新します。テンプレートの URL は下記です。
https://aes-siem-<REGION>.s3.amazonaws.com/siem-on-amazon-opensearch-service.template
- CloudFormation コンソール に移動
- [aes-siem] のスタックを選択
- 画面右上の [更新する] を選択
- スタックの更新で下記を選択
- テンプレートの準備: [既存テンプレートを置き換える]
- テンプレートソース: [Amazon S3 URL]
- Amazon S3 URL:
- [次へ] を選択
- 残りの全てデフォルト値で変更せず最後まで選択して完了
以上でアップデートは完了です。
OpenSearch Service のアクセスポリシーの変更、インスタンスのスペック変更、AZ の追加と変更、UltraWarm への変更等の OpenSearch Service ドメイン自体の変更は、AWS マネジメントコンソールの OpenSearch Service コンソール から実行してください
SIEM on OpenSearch Service はログをインデックスに保存しており、デフォルトでは毎月1回ローテーションをしています。この期間を変更や、AWS 以外のログを取り込みたい方は、こちら をご参照ください。
Python スクリプトの es-loader をローカル環境で実行することで、すでに S3 バケット に保存されている過去のログを SIEM on OpenSearch Service に取り込むことができます。
CloudFormation テンプレートで作成される AWS リソースは以下の通りです。AWS Identity and Access Management (IAM) のリソースは AWS マネジメントコンソールから確認してください。
AWS Resource | Resource Name | 目的 |
---|---|---|
OpenSearch Service 1.0 or Elasticsearch 7.X | aes-siem | SIEM 本体 |
S3 bucket | aes-siem-[AWS_Account]-log | ログを集約するため |
S3 bucket | aes-siem-[AWS_Account]-snapshot | OpenSearch Service の手動スナップショット取得 |
S3 bucket | aes-siem-[AWS_Account]-geo | ダウンロードした GeoIP を保存 |
Lambda function | aes-siem-es-loader | ログを正規化し OpenSearch Service へロード |
Lambda function | aes-siem-deploy-aes | OpenSearch Service のドメイン作成 |
Lambda function | aes-siem-configure-aes | OpenSearch Service の設定 |
Lambda function | aes-siem-geoip-downloader | GeoIP のダウンロード |
Lambda function | aes-siem-BucketNotificationsHandler | ログ用 S3 バケットのイベント通知を設定 |
AWS Key Management Service (AWS KMS) CMK & Alias |
aes-siem-key | ログの暗号化に使用 |
Amazon SQS Queue | aes-siem-sqs-splitted-logs | 処理するログ行数が多い時は分割。それを管理するキュー |
Amazon SQS Queue | aes-siem-dlq | OpenSearch Service のログ取り込み失敗用 Dead Letter Queue |
CloudWatch Events | aes-siem-CwlRuleLambdaGeoipDownloader | aes-siem-geoip-downloader を12時間毎に実行 |
Amazon SNS Topic | aes-siem-alert | OpenSearch Service の Alerting の Destinations で選択 |
Amazon SNS Subscription | inputed email | Alert の送信先メールアドレス |
- AWSマネジメントコンソールの CloudFormation からスタックの aes-siem を削除
- 手動で次の AWS リソースを削除
- OpenSearch Service ドメイン: aes-siem
- Amazon S3 バケット: aes-siem-[AWS_Account]-log
- Amazon S3 バケット: aes-siem-[AWS_Account]-snapshot
- Amazon S3 バケット: aes-siem-[AWS_Account]-geo
- AWS KMS カスタマーマネジメントキー: aes-siem-key
- 削除は注意して行ってください。ログをこのカスタマーマネジメントキーで暗号化していると、キーの削除後はそのログは読み込むことができなくなります。
- SIEM on OpenSearch Service を Amazon VPC 内にデプロイした場合は以下の AWS リソースも削除
- Amazon VPC: aes-siem/VpcAesSiem (VPC を新規に作成した場合)
- SecurityGroup: aes-siem-vpc-sg
注) SIEM on OpenSearch Service をすぐに再デプロイする場合は、KMS CMK のエイリアスが残っているため失敗します。次の AWS CLI コマンドで キーエイリアスを削除してください
export AWS_DEFAULT_REGION=<AWS_REGION>
aws kms delete-alias --alias-name "alias/aes-siem-key"
See CONTRIBUTING for more information.
This library is licensed under the MIT-0 License. See the LICENSE file.
This product uses GeoLite2 data created by MaxMind and licensed under CC BY-SA 4.0, available from https://www.maxmind.com.