AWS Elastic MapReduce ログを収集する
このドキュメントでは、AWS Elastic MapReduce(EMR)ログを Google Security Operations に取り込む方法について説明します。AWS EMR は、大量のデータを迅速に処理するクラウドネイティブのビッグデータ プラットフォームです。EMR ログを Google SecOps に統合すると、クラスタ アクティビティを分析して、潜在的なセキュリティ上の脅威を検出できます。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- AWS への特権アクセス
Amazon S3 バケットを構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- 後で使用するために、バケットの名前とリージョンを保存します。
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成した [ユーザー] を選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] として [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで、[権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーと CloudWatchLogsFullAccess ポリシーを検索して選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
ログを転送するように AWS EMR を構成する方法
- AWS Management Console にログインします。
- 検索バーに「EMR」と入力し、サービスリストから [Amazon EMR] を選択します。
- [クラスタ] をクリックします。
- ロギングを有効にする EMR クラスタを見つけて選択します。
- [クラスタの詳細] ページで、[編集] をクリックします。
- [クラスタの編集] 画面で、[ロギング] セクションに移動します。
- [ロギングを有効にする] を選択します。
- ログが保存される S3 バケットを指定します。
- S3 URI を
s3://your-bucket-name/
の形式で指定します(これにより、すべての EMR ログがバケットのルートに保存されます)。 - 次のログタイプを選択します。
Step logs
Application logs
YARN logs
System logs
HDFS Logs
(Hadoop を使用している場合)
- [保存] をクリックします。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
このプロダクト ファミリー内で異なるログタイプに対して複数のフィードを構成するには、プロダクトごとにフィードを構成するをご覧ください。
1 つのフィードを設定する手順は次のとおりです。
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: AWS EMR Logs)。
- [ソースタイプ] として [Amazon S3] を選択します。
- [ログタイプ] として [AWS EMR] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3://your-log-bucket-name/
your-log-bucket-name
は、実際の S3 バケットの名前に置き換えます。
- URI is a: バケット構造に応じて、[ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。
シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3://your-log-bucket-name/
your-log-bucket-name
は、実際の S3 バケットの名前に置き換えます。
- URI is a: バケット構造に応じて、[ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
- Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。
シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- Asset Namespace: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
app_id |
additional.fields[].key |
値「APP」はパーサーによって割り当てられます |
app_id |
additional.fields[].value.string_value |
未加工ログの APP フィールドから直接マッピングされます。 |
app_name |
additional.fields[].key |
値「APPNAME」はパーサーによって割り当てられます |
app_name |
additional.fields[].value.string_value |
未加工ログの APPNAME フィールドから直接マッピングされます。 |
blockid |
additional.fields[].key |
値「blockid」はパーサーによって割り当てられます |
blockid |
additional.fields[].value.string_value |
未加工ログの blockid フィールドから直接マッピングされます。 |
bytes |
network.received_bytes |
未加工ログの bytes フィールドから直接マッピングされ、符号なし整数に変換されます。 |
cliID |
additional.fields[].key |
値「cliID」はパーサーによって割り当てられます |
cliID |
additional.fields[].value.string_value |
未加工ログの cliID フィールドから直接マッピングされます。 |
cmd |
target.process.command_line |
未加工ログの cmd フィールドから直接マッピングされます。 |
comp_name |
additional.fields[].key |
値「COMP」はパーサーによって割り当てられます |
comp_name |
additional.fields[].value.string_value |
未加工ログの COMP フィールドから直接マッピングされます。 |
configuration_version |
additional.fields[].key |
値「configuration_version」はパーサーによって割り当てられます |
configuration_version |
additional.fields[].value.string_value |
未加工ログの configuration_version フィールドから直接マッピングされ、文字列に変換されます。 |
containerID |
additional.fields[].key |
値「containerID」はパーサーによって割り当てられます |
containerID |
additional.fields[].value.string_value |
未加工ログの CONTAINERID フィールドから直接マッピングされます。 |
description |
security_result.description |
未加工ログの description フィールドから直接マッピングされます。 |
dfs.FSNamesystem.* |
additional.fields[].key |
キーは、「dfs.FSNamesystem.」と JSON データのキーを連結して生成されます。 |
dfs.FSNamesystem.* |
additional.fields[].value.string_value |
値は dfs.FSNamesystem JSON オブジェクトの対応する値から直接マッピングされ、文字列に変換されます。 |
duration |
additional.fields[].key |
値「duration」はパーサーによって割り当てられます |
duration |
additional.fields[].value.string_value |
未加工ログの duration フィールドから直接マッピングされます。 |
duration |
network.session_duration.seconds |
未加工ログの duration フィールドから直接マッピングされ、整数に変換されます。 |
environment |
additional.fields[].key |
値「environment」はパーサーによって割り当てられます |
environment |
additional.fields[].value.string_value |
未加工ログの environment フィールドから直接マッピングされます。Grok と文字列操作を使用して ip_port フィールドから抽出されます。grok と文字列操作を使用して ip_port フィールドから抽出され、整数に変換されます。 |
event_type |
metadata.event_type |
principal と target の情報の有無に基づいてパーサー ロジックによって決定されます。NETWORK_CONNECTION 、USER_RESOURCE_ACCESS 、STATUS_UPDATE 、GENERIC_EVENT のいずれかです。 |
file_path |
target.file.full_path |
未加工ログの file_path フィールドから直接マッピングされます。 |
host |
principal.hostname |
未加工ログの host フィールドから直接マッピングされます。 |
host |
target.hostname |
未加工ログの host フィールドから直接マッピングされます。 |
host_ip |
principal.ip |
未加工ログの host_ip フィールドから直接マッピングされます。 |
host_port |
principal.port |
未加工ログの host_port フィールドから直接マッピングされ、整数に変換されます。 |
http_url |
target.url |
未加工ログの http_url フィールドから直接マッピングされます。 |
index |
additional.fields[].key |
値「index」はパーサーによって割り当てられます |
index |
additional.fields[].value.string_value |
未加工ログの index フィールドから直接マッピングされます。 |
kind |
metadata.product_event_type |
未加工ログの kind フィールドから直接マッピングされます。値「AWS_EMR」はパーサーによって割り当てられます。値「AWS EMR」はパーサーによって割り当てられます。値「AMAZON」はパーサーによって割り当てられます。 |
offset |
additional.fields[].key |
値「offset」はパーサーによって割り当てられます |
offset |
additional.fields[].value.string_value |
未加工ログの offset フィールドから直接マッピングされます。 |
op |
metadata.product_event_type |
未加工ログの op フィールドまたは OPERATION フィールドから直接マッピングされます。 |
proto |
network.application_protocol |
grok を使用して http_url フィールドから抽出され、大文字に変換されます。 |
puppet_version |
additional.fields[].key |
値「puppet_version」はパーサーによって割り当てられます |
puppet_version |
additional.fields[].value.string_value |
未加工ログの puppet_version フィールドから直接マッピングされます。 |
queue_name |
additional.fields[].key |
値「queue_name」はパーサーによって割り当てられます |
queue_name |
additional.fields[].value.string_value |
未加工ログの queue_name フィールドから直接マッピングされます。 |
report_format |
additional.fields[].key |
値「report_format」はパーサーによって割り当てられます |
report_format |
additional.fields[].value.string_value |
未加工ログの report_format フィールドから直接マッピングされ、文字列に変換されます。 |
resource |
additional.fields[].key |
値「resource」はパーサーによって割り当てられます |
resource |
additional.fields[].value.string_value |
未加工ログの resource フィールドから直接マッピングされます。 |
result |
security_result.action_details |
未加工ログの RESULT フィールドから直接マッピングされます。 |
security_id |
additional.fields[].key |
値「security_id」はパーサーによって割り当てられます |
security_id |
additional.fields[].value.string_value |
未加工ログの security_id フィールドから直接マッピングされます。 |
severity |
security_result.severity |
未加工ログの severity フィールドからマッピングされます。INFO は INFORMATIONAL にマッピングされ、WARN は MEDIUM にマッピングされます。 |
srvID |
additional.fields[].key |
値「srvID」はパーサーによって割り当てられます |
srvID |
additional.fields[].value.string_value |
未加工ログの srvID フィールドから直接マッピングされます。 |
status |
additional.fields[].key |
値「status」はパーサーによって割り当てられます |
status |
additional.fields[].value.string_value |
未加工ログの status フィールドから直接マッピングされます。 |
summary |
security_result.summary |
未加工ログの summary フィールドから直接マッピングされます。 |
target_app |
target.application |
未加工ログの TARGET フィールドから直接マッピングされます。 |
target_ip |
target.ip |
未加工ログの target_ip フィールドまたは IP フィールドから直接マッピングされます。 |
target_port |
target.port |
未加工ログの target_port フィールドから直接マッピングされ、整数に変換されます。 |
timestamp |
metadata.event_timestamp |
未加工ログの timestamp フィールドから直接マッピングされ、ISO8601 タイムスタンプとして解析されます。 |
timestamp |
event.timestamp |
未加工ログの timestamp フィールドから直接マッピングされ、ISO8601 タイムスタンプとして解析されます。 |
trade_date |
additional.fields[].key |
値「trade_date」はパーサーによって割り当てられます |
trade_date |
additional.fields[].value.string_value |
未加工ログの trade_date フィールドから直接マッピングされます。 |
transaction_uuid |
additional.fields[].key |
値「transaction_uuid」はパーサーによって割り当てられます |
transaction_uuid |
additional.fields[].value.string_value |
未加工ログの transaction_uuid フィールドから直接マッピングされます。 |
type |
additional.fields[].key |
値「type」はパーサーによって割り当てられます |
type |
additional.fields[].value.string_value |
未加工ログの type フィールドから直接マッピングされます。 |
user |
target.user.userid |
未加工ログの USER フィールドまたは ugi フィールドから直接マッピングされます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。