Azure WAF ๋กœ๊ทธ ์ˆ˜์ง‘

๋‹ค์Œ์—์„œ ์ง€์›:

์ด ๋ฌธ์„œ์—์„œ๋Š” Azure ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ Azure ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฉํ™”๋ฒฝ (WAF) ๋กœ๊ทธ๋ฅผ Google Security Operations๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์„œ๋Š” JSON ํ˜•์‹์˜ ๋กœ๊ทธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ UDM์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  ํŠน์ • ํ•„๋“œ๋ฅผ UDM ์†์„ฑ์— ๋งคํ•‘ํ•˜์—ฌ records ๋ฐฐ์—ด์ด ํฌํ•จ๋œ ๋กœ๊ทธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. records ๋ฐฐ์—ด์ด ์—†์œผ๋ฉด ํŒŒ์„œ๊ฐ€ ๋กœ๊ทธ๋ฅผ ๋‹จ์ผ ์ด๋ฒคํŠธ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ•„๋“œ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

๋‹ค์Œ ๊ธฐ๋ณธ ์š”๊ฑด์ด ์ถฉ์กฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • Google SecOps ์ธ์Šคํ„ด์Šค
  • ํ™œ์„ฑ Azure ํ…Œ๋„ŒํŠธ
  • Azure์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ ๊ด€๋ฆฌ

Azure ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ • ๊ตฌ์„ฑ

  1. Azure ์ฝ˜์†”์—์„œ ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ •์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ๋…: ๊ตฌ๋…์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน: ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฆฌ์ „: ๋ฆฌ์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ์„ฑ๋Šฅ: ์„ฑ๋Šฅ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค (ํ‘œ์ค€ ๊ถŒ์žฅ).
    • ์ค‘๋ณต์„ฑ: ์ค‘๋ณต์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค (GRS ๋˜๋Š” LRS ๊ถŒ์žฅ).
    • ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ • ์ด๋ฆ„: ์ƒˆ ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ •์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฒ€ํ†  + ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ณ„์ • ๊ฐœ์š”๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ • ๊ฐœ์š” ํŽ˜์ด์ง€์˜ ๋ณด์•ˆ + ๋„คํŠธ์›Œํ‚น์—์„œ ์•ก์„ธ์Šค ํ‚ค ํ•˜์œ„ ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  7. key1 ๋˜๋Š” key2 ์˜†์— ์žˆ๋Š” ํ‘œ์‹œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํ‚ค๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  9. ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‚ค๋ฅผ ์•ˆ์ „ํ•œ ์œ„์น˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  10. ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ • ๊ฐœ์š” ํŽ˜์ด์ง€์˜ ์„ค์ •์—์„œ ์—”๋“œํฌ์ธํŠธ ํ•˜์œ„ ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  11. ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ Blob ์„œ๋น„์Šค ์—”๋“œํฌ์ธํŠธ URL(์˜ˆ: https://<storageaccountname>.blob.core.windows.net)์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  12. ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—”๋“œํฌ์ธํŠธ URL์„ ์•ˆ์ „ํ•œ ์œ„์น˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Azure WAF ๋กœ๊ทธ์˜ ๋กœ๊ทธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ Azure Portal์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฉํ™”๋ฒฝ (WAF) ๊ทœ์น™์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋งํ•  WAF๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ชจ๋‹ˆํ„ฐ๋ง > ์ง„๋‹จ ์„ค์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. + ์ง„๋‹จ ์„ค์ • ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • ์ง„๋‹จ ์„ค์ •์„ ์„ค๋ช…ํ•˜๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  5. allLogs๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  6. ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ •์— ์•„์นด์ด๋ธŒ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ๋… ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ •์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  7. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

ํ”ผ๋“œ ์„ค์ •

Google SecOps ํ”Œ๋žซํผ์—์„œ ํ”ผ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • SIEM ์„ค์ • > ํ”ผ๋“œ > ์ƒˆ๋กœ ์ถ”๊ฐ€
  • ์ฝ˜ํ…์ธ  ํ—ˆ๋ธŒ > ์ฝ˜ํ…์ธ  ํŒฉ > ์‹œ์ž‘ํ•˜๊ธฐ

Azure WAF ํ”ผ๋“œ ์„ค์ • ๋ฐฉ๋ฒ•

  1. Azure ํ”Œ๋žซํผ ํŒฉ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. Azure WAF ๋กœ๊ทธ ์œ ํ˜•์„ ์ฐพ์•„ ์ƒˆ ํ”ผ๋“œ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ ํ•„๋“œ์˜ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    • ์†Œ์Šค ์œ ํ˜•: Microsoft Azure Blob Storage V2
    • Azure URI: blob ์—”๋“œํฌ์ธํŠธ URL์ž…๋‹ˆ๋‹ค.
      • ENDPOINT_URL/BLOB_NAME
        • ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
          • ENDPOINT_URL: blob ์—”๋“œํฌ์ธํŠธ URL (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: Blob์˜ ์ด๋ฆ„ (์˜ˆ: <logname>-logs)
    • ์†Œ์Šค ์‚ญ์ œ ์˜ต์…˜: ์ˆ˜์ง‘ ํ™˜๊ฒฝ์„ค์ •์— ๋”ฐ๋ผ ์‚ญ์ œ ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ : Delete transferred files ๋˜๋Š” Delete transferred files and empty directories ์˜ต์…˜์„ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ •์— ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
    • ์ตœ๋Œ€ ํŒŒ์ผ ๊ธฐ๊ฐ„: ์ง€๋‚œ ์ผ์ˆ˜ ๋™์•ˆ ์ˆ˜์ •๋œ ํŒŒ์ผ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 180์ผ์ž…๋‹ˆ๋‹ค.
    • ๊ณต์œ  ํ‚ค: Azure Blob Storage์˜ ์•ก์„ธ์Šค ํ‚ค์ž…๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ์˜ต์…˜

    • ํ”ผ๋“œ ์ด๋ฆ„: ํ”ผ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฏธ๋ฆฌ ์ฑ„์›Œ์ง„ ๊ฐ’์ž…๋‹ˆ๋‹ค.

    • ์• ์…‹ ๋„ค์ž„์ŠคํŽ˜์ด์Šค: ํ”ผ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

    • ์ˆ˜์ง‘ ๋ผ๋ฒจ: ์ด ํ”ผ๋“œ์˜ ๋ชจ๋“  ์ด๋ฒคํŠธ์— ์ ์šฉ๋˜๋Š” ๋ผ๋ฒจ์ž…๋‹ˆ๋‹ค.

  4. ํ”ผ๋“œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œํ’ˆ๊ตฐ ๋‚ด์—์„œ ๋‹ค์–‘ํ•œ ๋กœ๊ทธ ์œ ํ˜•์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ํ”ผ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ œํ’ˆ๋ณ„ ํ”ผ๋“œ ๊ตฌ์„ฑ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

UDM ๋งคํ•‘ ํ…Œ์ด๋ธ”

๋กœ๊ทธ ํ•„๋“œ UDM ๋งคํ•‘ ๋…ผ๋ฆฌ
backendPoolName additional.fields[?key=='backendPoolName'].value.string_value ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ backendPoolName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
backendSettingName additional.fields[?key=='backendSettingName'].value.string_value ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ backendSettingName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
category metadata.product_event_type ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ category ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
EventEnqueuedUtcTime additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ EventEnqueuedUtcTime ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
EventProcessedUtcTime additional.fields[?key=='EventProcessedUtcTime'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ EventProcessedUtcTime ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
operationName additional.fields[?key=='operationName'].value.string_value ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ operationName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.action additional.fields[?key=='action'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.action ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.action security_result.action_details records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.action ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.clientIP, properties.clientIp principal.asset.ip, principal.ip ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.clientIP ๋˜๋Š” properties.clientIp ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ clientIP๊ฐ€ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
properties.clientPort principal.port ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.clientPort ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.clientResponseTime principal.resource.attribute.labels[?key=='Client Response Time'].value records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.clientResponseTime ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.details.data additional.fields[?key=='Properties data'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.details.data ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.details.file principal.process.file.full_path records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.details.file ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.details.matches[].matchVariableName, properties.details.matches[].matchVariableValue additional.fields[?key.startsWith('%{idx} ')].value.string_value ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.details.matches ๋ฐฐ์—ด์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. UDM์˜ key๋Š” ์ƒ‰์ธ (idx)๊ณผ matchVariableName๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. value์€ matchVariableValue์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.details.message metadata.description ์ด ๊ฐ’์€ ๋ฐฑ์Šฌ๋ž˜์‹œ์™€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ญ์ œํ•œ ํ›„ ์›์‹œ ๋กœ๊ทธ์˜ properties.details.message ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.details.msg metadata.description records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.details.msg ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.httpMethod network.http.method ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.httpMethod ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.httpStatus network.http.response_code ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.httpStatus ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.httpVersion network.application_protocol properties.httpVersion ํ•„๋“œ์— HTTP์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ๊ฐ’ HTTP์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
properties.host, properties.hostname, properties.originalHost principal.asset.hostname, principal.hostname ๊ฐ’์€ properties.originalHost, properties.host ๋˜๋Š” properties.hostname ์ค‘ ํ•˜๋‚˜์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ, ์ด ์ˆœ์„œ๋Œ€๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
properties.policyId security_result.detection_fields[?key=='policyId'].value ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.policyId ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.policyMode security_result.detection_fields[?key=='policyMode'].value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.policyMode ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.policy additional.fields[?key=='Properties policy'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.policy ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.receivedBytes network.received_bytes ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.receivedBytes ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.requestUri target.url ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.requestUri ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.ruleId security_result.rule_id ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.ruleId ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.ruleName security_result.rule_name records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.ruleName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.ruleName, ruleSetType security_result.rule_name ๊ฐ’์€ properties.ruleName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ค๊ณ , ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ records ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ์›์‹œ ๋กœ๊ทธ์˜ ruleSetType ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.ruleSetVersion security_result.detection_fields[?key=='ruleSetVersion'].value ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.ruleSetVersion ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.sentBytes network.sent_bytes ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.sentBytes ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.serverResponseLatency additional.fields[?key=='Server Response Latency'].value.string_value records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.serverResponseLatency ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.serverRouted target.asset.ip, target.ip, target.port IP์™€ ํฌํŠธ๋Š” properties.serverRouted ํ•„๋“œ์—์„œ ์ถ”์ถœ๋ฉ๋‹ˆ๋‹ค.
properties.sslCipher network.tls.cipher ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.sslCipher ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.sslClientCertificateIssuerName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.sslProtocol network.tls.version ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.sslProtocol ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.timeTaken additional.fields[?key=='Properties Timetaken'].value.string_value records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.timeTaken ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.trackingReference ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.transactionId network.session_id ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.transactionId ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.userAgent network.http.user_agent ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.userAgent ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.WAFEvaluationTime additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.WAFEvaluationTime ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
properties.WAFMode additional.fields[?key=='Properties WAFMode'].value.string_value records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ properties.WAFMode ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.category metadata.product_event_type records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.category ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.operationName additional.fields[?key=='operationName'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.operationName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.properties.clientIP, rec.properties.clientIp principal.asset.ip, principal.ip ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.properties.clientIP ๋˜๋Š” rec.properties.clientIp ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ, records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ clientIP์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.
rec.properties.clientPort principal.port records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.properties.clientPort ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.properties.host principal.asset.hostname, principal.hostname records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.properties.host ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.properties.policy additional.fields[?key=='Properties policy'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.properties.policy ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.properties.requestUri target.url records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.properties.requestUri ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.properties.ruleName security_result.rule_name records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.properties.ruleName ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.properties.trackingReference ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.resourceId target.resource.id records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.resourceId ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
rec.time metadata.event_timestamp records ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ rec.time ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
resourceId target.resource.id records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ resourceId ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
timeStamp metadata.event_timestamp records ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ ์›์‹œ ๋กœ๊ทธ์˜ timeStamp ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ metadata.event_type ์ฃผ์ฒด (ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ IP)์™€ ๋Œ€์ƒ IP๊ฐ€ ๋ชจ๋‘ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์€ NETWORK_CONNECTION๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ฃผ ๊ตฌ์„ฑ์›์ด ์žˆ์ง€๋งŒ ๋Œ€์ƒ IP๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ STATUS_UPDATE๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ GENERIC_EVENT ๋˜๋Š” event_type ํ•„๋“œ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.
ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ metadata.log_type ๊ฐ’์€ AZURE_WAF๋กœ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ metadata.product_name ๊ฐ’์€ Azure WAF Logs๋กœ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ metadata.vendor_name ๊ฐ’์€ Microsoft๋กœ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ security_result.action properties.action์ด Matched์ด๋ฉด ๊ฐ’์€ ALLOW๋กœ ์„ค์ •๋˜๊ณ , properties.action์ด Block์ด๋ฉด ๊ฐ’์€ BLOCK๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋„์›€์ด ๋” ํ•„์š”ํ•˜์‹ ๊ฐ€์š”? ์ปค๋ฎค๋‹ˆํ‹ฐ ํšŒ์› ๋ฐ Google SecOps ์ „๋ฌธ๊ฐ€๋กœ๋ถ€ํ„ฐ ๋‹ต๋ณ€์„ ๋ฐ›์œผ์„ธ์š”.