AWS Redshift ログを収集する
このドキュメントでは、Amazon S3 を使用して AWS Redshift ログを Google Security Operations に取り込む方法について説明します。
Amazon Redshift は、Amazon Web Services が提供するフルマネージドのペタバイト規模のクラウド データ ウェアハウス サービスです。SQL ベースのツールとビジネス インテリジェンス アプリケーションを使用して、大規模なデータセットに対する高速なクエリと分析を可能にします。Amazon Redshift は、認証の試行、接続、切断、ユーザー定義の変更、データベースに対して実行されたクエリなど、データベース アクティビティをログに記録します。この統合では、Amazon Redshift のネイティブ監査ロギング機能を使用してログファイルを S3 バケットに配信します。Google SecOps は、Amazon S3 V2 フィードを使用してログファイルを取り込みます。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- 次の権限を持つ AWS Management Console への特権アクセス。
- Amazon Redshift (クラスタ、パラメータ グループ)
- Amazon S3 (バケット、バケット ポリシー)
- AWS IAM (ユーザー、ポリシー)
Amazon Redshift 監査ロギング用に S3 バケットを構成する
Amazon Redshift は、監査ログファイルを S3 バケットにアップロードします。Amazon Redshift サービスがログファイルを書き込めるように、S3 バケット ポリシーを構成する必要があります。
S3 バケットを作成して構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケット を作成します。
バケットの名前 とリージョン を保存して、後で参照できるようにします(例:
redshift-audit-logs-to-secops)。https://console.aws.amazon.com/s3 の Amazon S3 コンソール で、作成したバケットを選択します。
[権限] タブを選択します。
[バケット ポリシー] セクションで [編集] をクリックします。
次のバケット ポリシーを追加します(
redshift-audit-logs-to-secopsはバケット名に置き換えます)。{ "Version": "2012-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::redshift-audit-logs-to-secops", "arn:aws:s3:::redshift-audit-logs-to-secops/*" ] } ] }redshift.<region>.amazonaws.com[変更を保存] をクリックします。
ユーザー アクティビティ ログ パラメータを有効にする
監査ロギングが有効になっている場合、接続ログとユーザーログは自動的にキャプチャされます。ユーザー アクティビティ
ログ(データベースで実行される前の各クエリを記録)もキャプチャするには、enable_user_activity_logging データベース
パラメータを有効にする必要があります。
- https://console.aws.amazon.com/redshiftv2/ で Amazon Redshift コンソール にログインします。
- ナビゲーション メニューで、[構成] > [ワークロード管理] に移動します。
- クラスタに関連付けられているパラメータ グループを選択します。
- [パラメータ] タブを選択します。
- [パラメータを編集] をクリックします。
- enable_user_activity_logging パラメータの値を true に設定します。
[保存] をクリックします。
Amazon Redshift 監査ロギングを S3 に対して有効にする
- https://console.aws.amazon.com/redshiftv2/ で Amazon Redshift コンソール にログインします。
- ナビゲーション メニューで [クラスタ] を選択し、構成するクラスタを選択します。
- [Properties] タブをクリックします。
- [**データベース構成**] パネルで [**編集**] をクリックし、[**監査ログを編集**] を選択します。
- [監査ログを編集] ページで、[オンにする] を選択します。
- [ログの宛先] で [S3 バケット] を選択します。
- [S3 バケット] で、構成したバケット(
redshift-audit-logs-to-secopsなど)を選択します。 - 省略可: S3 キーの接頭辞 を入力して、バケット内のログファイルを整理します(例:
audit-logs/)。 - エクスポートするログを選択します。
- 接続ログ - 認証の試行、接続、切断
- ユーザーログ - データベース ユーザー定義の変更
- ユーザー アクティビティ ログ - データベースで実行される前の各クエリ
- [変更を保存] をクリックします。
詳細については、Amazon Redshift 管理ガイドのデータベース監査ロギングをご覧ください。
Google SecOps 用に IAM ユーザーを構成する
Google SecOps では、エクスポートされた監査ログを取り込むために、S3 バケットへの読み取りアクセス権を持つ IAM ユーザーが必要です。
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザー を作成します。
- 作成したユーザー を選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [Create Access Key] をクリックします。
- [ユースケース] で [サードパーティ サービス] を選択します。
- [Next] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [Download .csv file] をクリックして、アクセスキー とシークレット アクセスキー を保存し、後で参照できるようにします。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで [権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
AWS Redshift ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[Configure a single feed] をクリックします。
- [Feed name] に一意の名前を入力します。
- [ソースタイプ] として [Amazon S3 V2] を選択します。
- [Log type] で [AWS Redshift] を選択します。
- [次へ] をクリックしてから、[送信] をクリックします。
次のフィールドに値を指定します。
- S3 URI:
s3://redshift-audit-logs-to-secops/audit-logs/ - Source deletion option: 必要に応じて削除オプションを選択します。
- Maximum File Age: 過去数日間に変更されたファイルを含めます(デフォルトは 180 日)。
- アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー
- シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー
- Asset namespace: アセットの名前空間
- 取り込みラベル: このフィードのイベントに適用されるラベル
- S3 URI:
[次へ] をクリックしてから、[送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
func_label |
additional.fields |
統合済み |
lpclagg_label |
additional.fields |
統合済み |
lpcltype_label |
additional.fields |
統合済み |
msg |
metadata.description |
直接マッピングされます。 |
has_principal |
metadata.event_type |
マッピング: true → STATUS_UPDATE |
has_target_resource |
metadata.event_type |
マッピング: true → USER_RESOURCE_ACCESS |
has_user |
metadata.event_type |
マッピング: true → USER_UNCATEGORIZED |
column1 |
metadata.product_event_type |
直接マッピングされます。 |
requestID |
metadata.product_log_id |
直接マッピングされます。 |
column20 |
network.application_protocol_version |
直接マッピングされます。 |
column9 |
network.session_duration.seconds |
名前変更/マッピング |
column21 |
network.session_id |
直接マッピングされます。 |
xid |
network.session_id |
直接マッピングされます。 |
column11 |
network.tls.cipher |
直接マッピングされます。 |
column10 |
network.tls.version |
直接マッピングされます。 |
column16 |
principal.application |
直接マッピングされます。 |
column3 |
principal.asset.ip |
統合済み |
log_event.src_ip |
principal.asset.ip |
統合済み |
column3 |
principal.hostname |
直接マッピングされます。 |
column3 |
principal.ip |
統合済み |
log_event.src_ip |
principal.ip |
統合済み |
region |
principal.location.name |
直接マッピングされます。 |
column17 |
principal.platform_version |
直接マッピングされます。 |
column4 |
principal.port |
直接マッピングされます。 |
column5 |
principal.process.pid |
直接マッピングされます。 |
pid |
principal.process.pid |
直接マッピングされます。 |
accountID |
principal.user.userid |
直接マッピングされます。 |
user_id |
principal.user.userid |
直接マッピングされます。 |
authmethod_label |
security_result.detection_fields |
統合済み |
compression_label |
security_result.detection_fields |
統合済み |
driver_version_label |
security_result.detection_fields |
統合済み |
iamauthguid_label |
security_result.detection_fields |
統合済み |
mtu_label |
security_result.detection_fields |
統合済み |
plugin_name_label |
security_result.detection_fields |
統合済み |
ssl_compression_label |
security_result.detection_fields |
統合済み |
ssl_expansion_label |
security_result.detection_fields |
統合済み |
level |
security_result.severity |
マッピング: (?i)Info → INFORMATIONAL、(?i)Error → ERROR、(?i)Warning → MEDIUM |
file |
target.file.full_path |
直接マッピングされます。 |
expected_bucket_label |
target.resource.attribute.labels |
統合済み |
expected_s3_prefix_label |
target.resource.attribute.labels |
統合済み |
sql_query_label |
target.resource.attribute.labels |
統合済み |
time_zone_label |
target.resource.attribute.labels |
統合済み |
ClusterIdentifier |
target.resource.name |
直接マッピングされます。 |
column6 |
target.resource.name |
直接マッピングされます。 |
db |
target.resource.name |
直接マッピングされます。 |
column7 |
target.user.user_display_name |
直接マッピングされます。 |
user |
target.user.user_display_name |
直接マッピングされます。 |
| なし | metadata.event_type |
定数: USER_RESOURCE_ACCESS |
| なし | security_result.severity |
定数: INFORMATIONAL |
| なし | target.resource.type |
定数: DATABASE |
さらにサポートが必要な場合コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。