์š”์ฒญ ๋กœ๊น… ์‚ฌ์šฉ

๋ณด์•ˆ ์ •์ฑ… ์ด๋ฆ„, ์ผ์น˜ ๊ทœ์น™ ์šฐ์„ ์ˆœ์œ„, ๊ด€๋ จ ์ž‘์—…, ๊ด€๋ จ ์ •๋ณด์— ๋Œ€ํ•œ Google Cloud Armor ์š”์ฒญ๋ณ„ ๋กœ๊ทธ๋Š” ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๋ฐ ์™ธ๋ถ€ ํ”„๋ก์‹œ ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ๋Œ€ํ•œ ๋กœ๊น…์˜ ์ผ๋ถ€๋กœ ๋กœ๊น…๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๋กœ๊น…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค‘์ง€๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ Google Cloud Armor์˜ ์ „์ฒด ๋กœ๊น… ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋ ค๋ฉด ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Google Cloud Armor ๋กœ๊ทธ๋Š” Cloud Load Balancing ๋กœ๊ทธ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ฆ‰, Google Cloud Armor ๋กœ๊ทธ ์ƒ์„ฑ์—๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ๊ตฌ์„ฑ๋œ ๋กœ๊ทธ ์ƒ˜ํ”Œ๋ง ๋ ˆ์ดํŠธ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ์ƒ˜ํ”Œ๋ง ๋ ˆ์ดํŠธ๋ฅผ ์ค„์ด๋ฉด Google Cloud Armor ์š”์ฒญ ๋กœ๊ทธ๊ฐ€ ์ค„์–ด๋“  ๋ ˆ์ดํŠธ๋กœ ์ƒ˜ํ”Œ๋ง๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ต์ฐจ ํ”„๋กœ์ ํŠธ ์„œ๋น„์Šค ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ํ”„๋ŸฐํŠธ์—”๋“œ ๋ฐ URL ๋งต์„ ํฌํ•จํ•˜๋Š” ํ˜ธ์ŠคํŠธ ๋˜๋Š” ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ์—์„œ ๋กœ๊ทธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋ŸฐํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์˜ ๊ด€๋ฆฌ์ž๋Š” ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์˜ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋กœ๊ทธ์™€ ์ธก์ •ํ•ญ๋ชฉ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋กœ๊น…์„ ์‚ฌ์šฉํ•˜๋ฉด Google Cloud Armor ๋ณด์•ˆ ์ •์ฑ…์œผ๋กœ ํ‰๊ฐ€๋œ ๋ชจ๋“  ์š”์ฒญ๊ณผ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ์ผ์น˜ ๊ทœ์น™์— ๋”ฐ๋ผ ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ ๋˜๋Š” ์กฐ์น˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฑฐ๋ถ€๋œ ์š”์ฒญ์„ ๋ณด๋ ค๋ฉด jsonPayload.enforcedSecurityPolicy.outcome="DENY" ๋˜๋Š” jsonPayload.statusDetails="denied_by_security_policy" ๊ฐ™์€ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ์ „์—ญ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ํŽ˜์ด์ง€์˜ ๋กœ๊น…์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์™ธ๋ถ€ ํ”„๋ก์‹œ ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ฒฝ์šฐ ์ด์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ํŽ˜์ด์ง€์— ๋‚˜์—ด๋œ ๋Œ€๋กœ Google Cloud CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์™ธ๋ถ€ ํ”„๋ก์‹œ ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ณด์•ˆ ์ •์ฑ… ๋ฐ ๊ทœ์น™์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์—ฌ๋Ÿฌ ๋กœ๊น… ์ˆ˜์ค€์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ƒ์„ธ ๋กœ๊น…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ณด์•ˆ ์ •์ฑ… ๋กœ๊ทธ ํ•ญ๋ชฉ

๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ์˜ ๋‹ค์Œ ๋กœ๊ทธ ํ•ญ๋ชฉ์€ Google Cloud Armor ๋ณด์•ˆ ์ •์ฑ… ๋ฐ ๊ทœ์น™ ๋กœ๊น…์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ญ๋ชฉ์—๋Š” jsonPayload์˜ ๋‹ค์Œ ๊ตฌ์กฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. HTTP ์š”์ฒญ ์„ธ๋ถ€์ •๋ณด๋Š” httpRequest ๋ฉ”์‹œ์ง€์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  • statusDetails: ์‘๋‹ต ์ฝ”๋“œ์˜ ํ…์ŠคํŠธ ์„ค๋ช…
    • redirected_by_security_policy: ์š”์ฒญ์ด GOOGLE_RECAPTCHA ๋˜๋Š” EXTERNAL_302 ๋ฆฌ๋””๋ ‰์…˜ ๊ทœ์น™์— ์˜ํ•ด ๋ฆฌ๋””๋ ‰์…˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • denied_by_security_policy: ์š”์ฒญ์ด Google Cloud Armor ๋ณด์•ˆ ์ •์ฑ…์œผ๋กœ ์ธํ•ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ์˜ํ•ด ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • body_denied_by_security_policy: Google Cloud Armor ๋ณด์•ˆ ์ •์ฑ…์œผ๋กœ ์ธํ•ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์—์„œ ์š”์ฒญ ๋ณธ๋ฌธ์ด ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • enforcedSecurityPolicy: ์ ์šฉ๋œ ๋ณด์•ˆ ์ •์ฑ… ๊ทœ์น™
    • name: ๋ณด์•ˆ ์ •์ฑ…์˜ ์ด๋ฆ„
    • priority: ๋ณด์•ˆ ์ •์ฑ…์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ์ˆซ์ž ์šฐ์„ ์ˆœ์œ„
    • adaptiveProtection: ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋œ Adaptive Protection ๊ทœ์น™์— ๋Œ€ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.
      • autoDeployAlertId: Adaptive Protection์—์„œ ๊ฐ์ง€ํ•œ ์ด๋ฒคํŠธ์˜ ์•Œ๋ฆผ ID์ž…๋‹ˆ๋‹ค.
    • configuredAction: ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ๊ตฌ์„ฑ๋œ ์ž‘์—… ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ: ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE(์ œํ•œ ๊ทœ์น™์˜ ๊ฒฝ์šฐ), RATE_BASED_BAN(๋น„์œจ ๊ธฐ๋ฐ˜ ์ฐจ๋‹จ ๊ทœ์น™์˜ ๊ฒฝ์šฐ)
    • rateLimitAction: ์ œํ•œ ๊ทœ์น™ ๋˜๋Š” ๋น„์œจ ๊ธฐ๋ฐ˜ ์ฐจ๋‹จ ๊ทœ์น™์ด ์ผ์น˜ํ•  ๋•Œ ๋น„์œจ ์ œํ•œ ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด
      • key: ๋น„์œจ ์ œํ•œ ํ‚ค ๊ฐ’(์ตœ๋Œ€ 36๋ฐ”์ดํŠธ) ํ‚ค ์œ ํ˜•์ด ALL์ด๊ฑฐ๋‚˜, ํ‚ค ์œ ํ˜•์ด HTTP-HEADER ๋˜๋Š” HTTP-COOKIE์ธ๋ฐ ์ง€์ •๋œ ํ—ค๋” ๋˜๋Š” ์ฟ ํ‚ค๊ฐ€ ์š”์ฒญ์— ์—†๋Š” ๊ฒฝ์šฐ ์ด ํ•„๋“œ๋Š” ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค.
      • outcome: ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
        • ๊ตฌ์„ฑ๋œ ๋น„์œจ ์ œํ•œ ๊ธฐ์ค€ ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ "RATE_LIMIT_THRESHOLD_CONFORM"
        • ๊ตฌ์„ฑ๋œ ๋น„์œจ ์ œํ•œ ๊ธฐ์ค€์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ "RATE_LIMIT_THRESHOLD_EXCEED"
        • ๊ตฌ์„ฑ๋œ ์ฐจ๋‹จ ๊ธฐ์ค€์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ "BAN_THRESHOLD_EXCEED"
    • outcome: ๊ตฌ์„ฑ๋œ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์˜ˆ: ACCEPT, DENY, REDIRECT, EXEMPT
    • preconfiguredExprIds: ๊ทœ์น™์„ ํŠธ๋ฆฌ๊ฑฐํ•œ ๋ชจ๋“  ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ WAF ๊ทœ์น™ ํ‘œํ˜„์‹์˜ ID
    • threatIntelligence: Google Threat Intelligence์˜ ์ผ์น˜ํ•˜๋Š” IP ์ฃผ์†Œ ๋ชฉ๋ก์— ๋Œ€ํ•œ ์ •๋ณด(ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ)
      • categories: ์ผ์น˜ํ•˜๋Š” IP ์ฃผ์†Œ ๋ชฉ๋ก ์ด๋ฆ„
    • addressGroup: ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Œ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ •๋ณด(ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ)
      • names: ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Œ ๊ทธ๋ฃน ์ด๋ฆ„
  • previewSecurityPolicy: ์š”์ฒญ์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋ฉด ์ฑ„์›Œ์ง(๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ทœ์น™์ด ์ ์šฉ๋œ ๊ทœ์น™๋ณด๋‹ค ์šฐ์„ ํ•  ๋•Œ๋งŒ ํ‘œ์‹œ๋จ)
    • name: ๋ณด์•ˆ ์ •์ฑ…์˜ ์ด๋ฆ„
    • priority: ๋ณด์•ˆ ์ •์ฑ…์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ์ˆซ์ž ์šฐ์„ ์ˆœ์œ„
    • configuredAction: ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ๊ตฌ์„ฑ๋œ ์ž‘์—… ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ: ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE(์ œํ•œ ๊ทœ์น™์˜ ๊ฒฝ์šฐ), RATE_BASED_BAN(๋น„์œจ ๊ธฐ๋ฐ˜ ์ฐจ๋‹จ ๊ทœ์น™์˜ ๊ฒฝ์šฐ)
    • rateLimitAction: ์ œํ•œ ๊ทœ์น™ ๋˜๋Š” ๋น„์œจ ๊ธฐ๋ฐ˜ ์ฐจ๋‹จ ๊ทœ์น™์ด ์ผ์น˜ํ•  ๋•Œ ๋น„์œจ ์ œํ•œ ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด
      • key: ๋น„์œจ ์ œํ•œ ํ‚ค ๊ฐ’(์ตœ๋Œ€ 36๋ฐ”์ดํŠธ) ํ‚ค ์œ ํ˜•์ด ALL์ด๊ฑฐ๋‚˜, ํ‚ค ์œ ํ˜•์ด HTTP-HEADER ๋˜๋Š” HTTP-COOKIE์ธ๋ฐ ์ง€์ •๋œ ํ—ค๋” ๋˜๋Š” ์ฟ ํ‚ค๊ฐ€ ์š”์ฒญ์— ์—†๋Š” ๊ฒฝ์šฐ ์ด ํ•„๋“œ๋Š” ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค.
      • outcome: ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
        • ๊ตฌ์„ฑ๋œ ๋น„์œจ ์ œํ•œ ๊ธฐ์ค€ ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ "RATE_LIMIT_THRESHOLD_CONFORM"
        • ๊ตฌ์„ฑ๋œ ๋น„์œจ ์ œํ•œ ๊ธฐ์ค€์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ "RATE_LIMIT_THRESHOLD_EXCEED"
        • ๊ตฌ์„ฑ๋œ ์ฐจ๋‹จ ๊ธฐ์ค€์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ "BAN_THRESHOLD_EXCEED"
    • outcome: ๊ตฌ์„ฑ๋œ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์˜ˆ: ACCEPT, DENY, REDIRECT, EXEMPT
    • preconfiguredExprIds: ๊ทœ์น™์„ ํŠธ๋ฆฌ๊ฑฐํ•œ ๋ชจ๋“  ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ WAF ๊ทœ์น™ ํ‘œํ˜„์‹์˜ ID
    • threatIntelligence: ์œ„ํ˜‘ ์ธํ…”๋ฆฌ์ „์Šค์˜ ์ผ์น˜ํ•˜๋Š” IP ์ฃผ์†Œ ๋ชฉ๋ก์— ๋Œ€ํ•œ ์ •๋ณด(ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ)
      • categories: ์ผ์น˜ํ•˜๋Š” IP ์ฃผ์†Œ ๋ชฉ๋ก ์ด๋ฆ„
    • addressGroup: ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Œ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ •๋ณด(ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ)
      • names: ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Œ ๊ทธ๋ฃน ์ด๋ฆ„
  • enforcedEdgeSecurityPolicy: ์ ์šฉ๋œ ์—์ง€ ๋ณด์•ˆ ์ •์ฑ… ๊ทœ์น™
    • name: ๋ณด์•ˆ ์ •์ฑ…์˜ ์ด๋ฆ„
    • priority: ๋ณด์•ˆ ์ •์ฑ…์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ์šฐ์„ ์ˆœ์œ„
    • configuredAction: ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ๊ตฌ์„ฑ๋œ ์ž‘์—… ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ: ALLOW, DENY
    • outcome: ๊ตฌ์„ฑ๋œ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์˜ˆ: ACCEPT, DENY
  • previewEdgeSecurityPolicy: ์š”์ฒญ์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์—์ง€ ๋ณด์•ˆ ์ •์ฑ… ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ฑ„์›Œ์ง previewEdgeSecurityPolicy ๋กœ๊ทธ ํ•ญ๋ชฉ์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ทœ์น™์ด ์ ์šฉ๋œ ๊ทœ์น™๋ณด๋‹ค ์šฐ์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • name: ๋ณด์•ˆ ์ •์ฑ…์˜ ์ด๋ฆ„
    • priority: ๋ณด์•ˆ ์ •์ฑ…์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ์ˆซ์ž ์šฐ์„ ์ˆœ์œ„
    • configuredAction: ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™์˜ ๊ตฌ์„ฑ๋œ ์ž‘์—… ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ: ALLOW, DENY
    • outcome: ๊ตฌ์„ฑ๋œ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์˜ˆ: ACCEPT, DENY

๋กœ๊ทธ ๋ณด๊ธฐ

Google Cloud Armor ๋ณด์•ˆ ์ •์ฑ… ๋กœ๊ทธ๋Š”Google Cloud ์ฝ˜์†”์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Google Cloud Armor ์ •์ฑ…์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Google Cloud Armor ์ •์ฑ…์œผ๋กœ ์ด๋™

  2. ์ž‘์—…์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ๋กœ๊ทธ ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋กœ๊น… ์š”์ฒญ

Google Cloud Armor์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ jsonPayload์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • securityPolicyRequestData: ์ตœ์ข…์ ์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™๊ณผ ๊ด€๊ณ„์—†์ด ๋ณด์•ˆ ์ •์ฑ…์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ ์ค‘์ธ ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ
    • recaptchaActionToken: reCAPTCHA ์ž‘์—… ํ† ํฐ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ
      • score: reCAPTCHA ์ž‘์—… ํ† ํฐ์— ์‚ฝ์ž…๋œ ์‚ฌ์šฉ์ž ์ ๋ฒ•์„ฑ ์ ์ˆ˜. reCAPTCHA ์ž‘์—… ํ† ํฐ์ด ์š”์ฒญ์— ์—ฐ๊ฒฐ๋˜๊ณ  ๋ณด์•ˆ ์ •์ฑ… ๊ทœ์น™์— ๋”ฐ๋ผ ์„ฑ๊ณต์ ์œผ๋กœ ๋””์ฝ”๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ reCAPTCHA ํ‰๊ฐ€ ์‹œํ–‰์„ ์ฐธ์กฐํ•˜์„ธ์š”.
    • recaptchaSessionToken: reCAPTCHA ์„ธ์…˜ ํ† ํฐ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ.
      • score: reCAPTCHA ํ† ํฐ์— ์‚ฝ์ž…๋œ ์‚ฌ์šฉ์ž ์ ๋ฒ•์„ฑ ์ ์ˆ˜. reCAPTCHA ์„ธ์…˜ ํ† ํฐ์ด ์š”์ฒญ์— ์—ฐ๊ฒฐ๋˜๊ณ  ๋ณด์•ˆ ์ •์ฑ… ๊ทœ์น™์— ๋”ฐ๋ผ ์„ฑ๊ณต์ ์œผ๋กœ ๋””์ฝ”๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • tlsJa4Fingerprint: ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTPS, HTTP/2, HTTP/3์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ JA4 TTL/SSL ๋””์ง€ํ„ธ ์ง€๋ฌธ์ž…๋‹ˆ๋‹ค. ๋””์ง€ํ„ธ ์ง€๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ •์ฑ…์˜ ํ‘œํ˜„์‹์ด ์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์š”์ฒญ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ณด์•ˆ ์ •์ฑ…์ด ์žˆ์„ ๋•Œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
    • tlsJa3Fingerprint: ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTPS, HTTP/2, HTTP/3์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ JA3 TTL/SSL ๋””์ง€ํ„ธ ์ง€๋ฌธ์ž…๋‹ˆ๋‹ค. ๋””์ง€ํ„ธ ์ง€๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ •์ฑ…์˜ ํ‘œํ˜„์‹์ด ์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์š”์ฒญ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ณด์•ˆ ์ •์ฑ…์ด ์žˆ์„ ๋•Œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ์˜ˆ์‹œ

๋‹ค์Œ์€ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๋Š” ์ œํ•œ ๊ทœ์น™์˜ ๋กœ๊ทธ ์„ธ๋ถ€์ •๋ณด ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "DENY"
  rateLimitAction: {
    key:"sample-key"
    outcome:"RATE_LIMIT_THRESHOLD_EXCEED"
  }
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"

๋‹ค์Œ์€ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๋Š” ๋น„์œจ ๊ธฐ๋ฐ˜ ์ฐจ๋‹จ ๊ทœ์น™์˜ ๋กœ๊ทธ ์„ธ๋ถ€์ •๋ณด ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

jsonPayload: {
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 enforcedSecurityPolicy: {
  priority: 150
  name: "sample-prod-policy"
  outcome: "DENY"
  configuredAction: "RATE_BASED_BAN"
  rateLimitAction: {
    key:"sample-key"
    outcome:"BAN_THRESHOLD_EXCEED"
  }
 }
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

๋‹ค์Œ ๋‹จ๊ณ„