Cisco Umbrella DNS ログを収集する
以下でサポートされています。
Google SecOps
SIEM
このドキュメントでは、AWS S3 バケットを使用して Cisco Umbrella DNS ログを Google Security Operations フィードに収集する方法について説明します。パーサーは、JSON 形式と CSV 形式の両方のログを処理します。フィールドを抽出し、UDM に一致するように名前を変更し、さまざまなログ バージョンと形式(プロキシログや IP ログなど)を処理し、ID、セキュリティ カテゴリ、ネットワーク イベントに関する特定のロジックを実行して、最終的に抽出されたデータを UDM スキーマに統合します。
始める前に
- Google SecOps インスタンスがあることを確認します。
- AWS IAM と S3 への特権アクセス権があることを確認します。
- Cisco Umbrella に対する特権アクセス権があることを確認します。
Cisco 管理の Amazon S3 バケットを構成する
- Cisco Umbrella ダッシュボードにログインします。
- [管理者] > [ログ管理] に移動します。
- [Use a Cisco-managed Amazon S3 bucket] オプションを選択します。
- 次の構成の詳細を入力します。
- リージョンを選択: レイテンシを低減するため、ロケーションに近いリージョンを選択します。
- 保持期間を選択する: 期間を選択します。保持期間は 7 日、14 日、30 日のいずれかです。選択した期間が過ぎると、データは削除され、復元できなくなります。取り込みサイクルが定期的な場合は、期間を短くします。保持期間は後で変更できます。
- [保存] をクリックします。
- [続行] をクリックして選択内容を確定し、有効化の通知を受け取ります。
表示された [Activation complete] ウィンドウに、[Access key] と [Secret key] の値が表示されます。 - [アクセスキー] と [シークレット キー] の値をコピーします。これらのキーを紛失した場合は、再生成する必要があります。
- [OK > 続行] をクリックします。
- 概要ページに、構成とバケット名が表示されます。ロギングは、組織の要件に応じて無効または有効にできます。ただし、新しいデータが追加されても、ログは保持期間に基づいて削除されます。
省略可: セルフマネージド AWS S3 バケットのユーザー アクセスキーを構成する
- AWS Management Console にログインします。
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] で [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで、[権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索して選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
省略可: セルフマネージド Amazon S3 バケットを構成する
AWS Management Console にログインします。
S3 に移動します。
[バケットを作成] をクリックします。
次の構成情報を提供してください。
- バケット名: Amazon S3 バケットの名前を指定します。
- リージョン: リージョンを選択します。
[作成] をクリックします。
省略可: セルフマネージド AWS S3 バケットのバケット ポリシーを構成する
- 新しく作成されたバケットをクリックして開きます。
- [プロパティ> 権限] を選択します。
- [権限] リストで、[バケット ポリシーを追加] をクリックします。
次のように、事前構成されたバケット ポリシーを入力します。
{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*" }, { "Sid": "", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*"}, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::BUCKET_NAME" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::BUCKET_NAME" } ] }
BUCKET_NAME
は、指定した Amazon S3 バケット名に置き換えます。
[保存] をクリックします。
省略可: セルフマネージド Amazon S3 バケットに必要な検証
- Cisco Umbrella ダッシュボードで、[Admin] > [Log management] > [Amazon S3] を選択します。
- [バケット名] フィールドに Amazon S3 バケット名を正確に指定し、[確認] をクリックします。
- 確認プロセスの一環として、
README_FROM_UMBRELLA.txt
という名前のファイルが Cisco Umbrella から Amazon S3 バケットにアップロードされます。アップロードされた README ファイルを表示するには、ブラウザの更新が必要になることがあります。 README_FROM_UMBRELLA.txt
ファイルをダウンロードし、テキスト エディタで開きます。- ファイルから一意の Cisco Umbrella トークンをコピーして保存します。
- Cisco Umbrella ダッシュボードに移動します。
- [トークン番号] フィールドでトークンを指定し、[保存] をクリックします。
- 成功すると、バケットが正常に検証されたことを示す確認メッセージがダッシュボードに表示されます。バケットを検証できないことを示すエラーが表示された場合は、バケット名の構文を再確認し、構成を見直してください。
Cisco Umbrella DNS ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Cisco Umbrella DNS Logs)。
- [ソースタイプ] として [Amazon S3 V2] を選択します。
- [Log type] として [Cisco Umbrella DNS] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- S3 URI: バケット URI。
s3:/BUCKET_NAME/
BUCKET_NAME
は、バケットの実際の名前に置き換えます。
- Source deletion options: 必要に応じて削除オプションを選択します。
- S3 URI: バケット URI。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
action |
security_result.action_details |
値は、JSON ログに存在する場合は action フィールドから、CSV ログの場合は column6 または column7 から取得され、大文字(ALLOW または BLOCK)に変換されます。 |
amp.disposition |
security_result.detection_fields[].key |
値は ampDisposition です。 |
amp.disposition |
security_result.detection_fields[].value |
値は amp.disposition フィールドから取得されます。 |
amp.malware |
security_result.detection_fields[].key |
値は ampMalware です。 |
amp.malware |
security_result.detection_fields[].value |
値は amp.malware フィールドから取得されます。 |
amp.score |
security_result.detection_fields[].key |
値は ampScore です。 |
amp.score |
security_result.detection_fields[].value |
値は amp.score フィールドから取得されます。 |
blocked_categories |
security_result.category_details |
値は blocked_categories フィールドから取得されます。 |
blockedfiletype |
security_result.detection_fields[].key |
値は egress type です。 |
blockedfiletype |
security_result.detection_fields[].value |
値は blockedfiletype フィールドから取得されます。 |
bundleid |
additional.fields[].key |
値は bundleid です。 |
bundleid |
additional.fields[].value.string_value |
値は bundleid フィールドから取得されます。 |
categories[] |
security_result.category_details |
値は categories[].label フィールドから取得されます。 |
column1 |
metadata.event_timestamp.seconds |
値は column1 フィールドからタイムスタンプとして解析されます。プロキシログの場合、date フィールドと time フィールドが存在する場合は、それらが結合されてタイムスタンプとして解析されます。 |
column10 |
network.http.user_agent |
値は column10 フィールドから取得されます。 |
column10 |
additional.fields[].value.string_value |
値は column10 フィールドから取得されます。 |
column11 |
target.port |
値は column11 フィールドから取得されます。 |
column12 |
principal.resource.name |
値は column12 フィールドから取得されます。 |
column13 |
security_result.rule_id |
値は column13 フィールドから取得されます。 |
column14 |
security_result.action_details |
値は column14 フィールドから取得されます。 |
column2 |
principal.user.user_display_name |
値は column2 フィールドから取得されます。 |
column2 |
principal.user.userid |
値は column2 フィールドから取得されます。 |
column2 |
principal.location.name |
値は column2 フィールドから取得されます。 |
column3 |
principal.hostname |
値は column3 フィールドから取得されます。 |
column3 |
principal.user.product_object_id |
値は column3 フィールドから取得されます。 |
column3 |
principal.location.city |
値は column3 フィールドから取得されます。 |
column3 |
additional.fields[].value.string_value |
値は column3 フィールドから取得されます。 |
column4 |
principal.asset.ip |
値は column4 フィールドから取得されます。 |
column4 |
principal.ip |
値は column4 フィールドから取得されます。 |
column4 |
principal.port |
値は column4 フィールドから取得されます。 |
column5 |
principal.asset.ip |
値は column5 フィールドから取得されます。 |
column5 |
principal.ip |
値は column5 フィールドから取得されます。 |
column5 |
target.asset.ip |
値は column5 フィールドから取得されます。 |
column5 |
target.ip |
値は column5 フィールドから取得されます。 |
column6 |
security_result.action_details |
値は column6 フィールドから取得されます。 |
column6 |
target.port |
値は column6 フィールドから取得されます。 |
column7 |
network.received_bytes |
値は column7 フィールドから取得されます。 |
column7 |
additional.fields[].value.string_value |
値は column7 フィールドから取得されます。 |
column8 |
principal.asset.ip |
値は column8 フィールドから取得されます。 |
column8 |
principal.ip |
値は column8 フィールドから取得されます。 |
column8 |
target.url |
値は column8 フィールドから取得されます。 |
column9 |
principal.port |
値は column9 フィールドから取得されます。 |
column9 |
network.http.referral_url |
値は column9 フィールドから取得されます。 |
data_center_name |
principal.resource.name |
値は data_center_name フィールドから取得されます。 |
datacenter.label |
security_result.detection_fields[].key |
値は datacenter label です。 |
datacenter.label |
security_result.detection_fields[].value |
値は datacenter.label フィールドから取得されます。 |
destinationip |
target.asset.ip |
値は destinationip フィールドから取得されます。 |
destinationip |
target.ip |
値は destinationip フィールドから取得されます。 |
direction |
network.direction |
値は direction フィールドから取得され、大文字に変換されます。 |
domain |
network.dns.questions[].name |
値は domain フィールドから取得されます。末尾のドットがある場合は削除されます。 |
dstPort |
target.port |
値は dstPort フィールドから取得されます。 |
dstip |
target.asset.ip |
値は dstip フィールドから取得されます。 |
dstip |
target.ip |
値は dstip フィールドから取得されます。 |
egress.ip |
security_result.detection_fields[].key |
値は egress ip です。 |
egress.ip |
security_result.detection_fields[].value |
値は egress.ip フィールドから取得されます。 |
egress.type |
security_result.detection_fields[].key |
値は egress type です。 |
egress.type |
security_result.detection_fields[].value |
値は egress.type フィールドから取得されます。 |
externalip |
principal.asset.ip |
値は externalip フィールドから取得されます。 |
externalip |
principal.ip |
値は externalip フィールドから取得されます。 |
forwardingmethod |
additional.fields[].key |
値は forwardingmethod です。 |
forwardingmethod |
additional.fields[].value.string_value |
値は forwardingmethod フィールドから取得されます。 |
granular_identity |
principal.user.user_display_name |
granular_identity と most_granular_identity の両方が存在する場合、値は granular_identity フィールドから取得されます。それ以外の場合は、_policy_identity フィールドから取得され、identityType に基づいてさらに解析されます。 |
granular_identity |
principal.user.email_addresses |
値は、正規表現を使用して granular_identity フィールドから抽出されます。 |
granular_identity |
principal.user.first_name |
値は、正規表現を使用して granular_identity フィールドから抽出されます。 |
granular_identity |
principal.user.last_name |
値は、正規表現を使用して granular_identity フィールドから抽出されます。 |
granular_identity |
principal.user.userid |
値は、正規表現を使用して granular_identity フィールドから抽出されます。 |
granular_identity |
principal.hostname |
値は granular_identity フィールドから取得されます。 |
granular_identity |
principal.location.name |
値は granular_identity フィールドから取得されます。 |
identity_types |
additional.fields[].value.string_value |
値は identity_types フィールドから取得されます。 |
identities[] |
principal.user.product_object_id |
値は identities[] フィールドから取得されます。 |
identities |
principal.user.product_object_id |
値は identities フィールドから取得されます。 |
internalip |
principal.asset.ip |
値は internalip フィールドから取得されます。 |
internalip |
principal.ip |
値は internalip フィールドから取得されます。 |
isolated.fileaction |
security_result.detection_fields[].key |
値は isolated fileaction です。 |
isolated.fileaction |
security_result.detection_fields[].value |
値は isolated.fileaction フィールドから取得されます。 |
isolated.state |
security_result.detection_fields[].key |
値は isolated state です。 |
isolated.state |
security_result.detection_fields[].value |
値は isolated.state フィールドから取得されます。 |
most_granular_identity |
principal.user.identityType |
granular_identity と most_granular_identity の両方が存在する場合、値は most_granular_identity フィールドから取得されます。それ以外の場合は、_policy_identity_type フィールドから取得されます。 |
nat_destination_ip |
principal.asset.ip |
値は nat_destination_ip フィールドから取得されます。 |
nat_destination_ip |
principal.ip |
値は nat_destination_ip フィールドから取得されます。 |
odns_categories |
security_result.category_details |
値は odns_categories フィールドから取得されます。 |
policy.ruleid |
security_result.rule_id |
値は policy.ruleid フィールドから取得されます。 |
policy.rulesetid |
security_result.detection_fields[].key |
値は rulesetid です。 |
policy.rulesetid |
security_result.detection_fields[].value |
値は policy.rulesetid フィールドから取得されます。 |
policy.timebasedrule |
security_result.detection_fields[].key |
値は timebasedrule です。 |
policy.timebasedrule |
security_result.detection_fields[].value |
値は policy.timebasedrule フィールドから取得されます。 |
port |
target.port |
値は port フィールドから取得されます。 |
query_type_name |
network.dns.questions[].type |
数値部分は、正規表現を使用して query_type_name フィールドから抽出され、整数に変換されます。 |
query_type_name |
additional.fields[].value.string_value |
かっこ内の文字列部分は、正規表現を使用して query_type_name フィールドから抽出されます。 |
querytype |
network.dns.questions[].type |
値は querytype フィールドから取得され、DNS レコードタイプに基づいて数値にマッピングされます。 |
referer |
network.http.referral_url |
値は referer フィールドから取得されます。 |
requestmethod |
network.http.method |
値は requestmethod フィールドから取得されます。 |
requestsize |
network.sent_bytes |
値は requestsize フィールドから取得され、符号なし整数に変換されます。 |
response |
additional.fields[].value.string_value |
値は response フィールドから取得されます。 |
responsecode |
network.http.response_code |
値は responsecode フィールドから取得されます。 |
responsefilename |
target.file.names |
値は responsefilename フィールドから取得されます。 |
responsesize |
network.received_bytes |
値は responsesize フィールドから取得され、符号なし整数に変換されます。 |
returncode |
network.dns.response_code |
値は returncode フィールドから取得され、符号なし整数に変換されます。 |
securityoverridden |
additional.fields[].key |
値は securityoverridden です。 |
securityoverridden |
additional.fields[].value.string_value |
値は securityoverridden フィールドから取得されます。 |
sha256 |
target.file.sha256 |
値は sha256 フィールドから取得されます。 |
source_ip |
principal.asset.ip |
値は、JSON ログに source_ip フィールドが存在する場合はそこから取得され、CSV ログでは column3 から取得されます。 |
source_ip |
principal.ip |
値は、JSON ログに source_ip フィールドが存在する場合はそこから取得され、CSV ログでは column3 から取得されます。 |
srcPort |
principal.port |
値は srcPort フィールドから取得されます。 |
statuscode |
network.http.response_code |
値は statuscode フィールドから取得されます。 |
tenantcontrols |
additional.fields[].key |
値は tenantcontrols です。 |
tenantcontrols |
additional.fields[].value.string_value |
値は tenantcontrols フィールドから取得されます。 |
timestamp |
metadata.event_timestamp.seconds |
値は timestamp フィールドからタイムスタンプとして解析されます。 |
tunnel_name |
additional.fields[].key |
値は tunnel_name です。 |
tunnel_name |
additional.fields[].value.string_value |
値は tunnel_name フィールドから取得されます。 |
tunnel_type |
metadata.product_event_type |
値は tunnel_type フィールドから取得されます。 |
type |
additional.fields[].key |
値は type です。 |
type |
additional.fields[].value.string_value |
値は type フィールドから取得されます。 |
url |
target.url |
値は url フィールドから取得されます。 |
useragent |
network.http.user_agent |
値は useragent フィールドから取得されます。 |
verdict |
security_result.action_details |
値は verdict フィールドから取得されます。 |
warnstatus |
security_result.detection_fields[].key |
値は warnstatus です。 |
warnstatus |
security_result.detection_fields[].value |
値は warnstatus フィールドから取得されます。値は DNS Lookup Type です。かっこ内の文字列部分は、正規表現を使用して query_type_name フィールドから抽出されます。フィールドが存在しない場合は空の文字列になります。値は DNS request and response were made. です。特定のフィールドの有無に基づいて決定されます。question.name が存在する場合は NETWORK_DNS、principal.ip と target.ip の両方が存在する場合は NETWORK_CONNECTION、principal.ip のみが存在する場合は STATUS_UPDATE、それ以外の場合は GENERIC_EVENT です。値は UMBRELLA_DNS です。値は Umbrella DNS です。値は Cisco です。値は最初は DNS に設定されています。requestmethod が有効な HTTP メソッドの場合、HTTP に変更されます。数値部分は、正規表現を使用して query_type_name フィールドから抽出されて整数に変換されるか、querytype フィールドから派生して DNS レコードタイプに基づいて数値にマッピングされます。値は、parseduseragent フィルタを使用して useragent フィールドまたは column10 フィールドから導出されます。値は、column3 フィールドの最後の部分をカンマで分割した後に取得されます。フィールドが存在しない場合は、空の文字列になります。値は、カンマで分割した後の column3 フィールドの最初の部分から取得されます。column3 が存在しない場合は、column2 フィールドから取得されます。値は、正規表現を使用して column2 フィールドまたは column3 フィールドから抽出されます。値は、正規表現を使用して column2 フィールドまたは column3 フィールドから抽出されます。値は、正規表現を使用して column2 フィールドまたは column3 フィールドから抽出されます。値は、正規表現を使用して column2 フィールドまたは column3 フィールドから抽出されます。値は action 、column6 、column7 、verdict フィールドから取得され、大文字(ALLOW または BLOCK)に変換されます。_categories に Malware が含まれている場合は NETWORK_MALICIOUS に、_categories に Potentially Harmful が含まれている場合は NETWORK_SUSPICIOUS に設定されます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。