Fine-Grained Authorization

Keycloak์˜ Fine-Grained Authorization์€ ๋ฆฌ์†Œ์Šค ๋‹จ์œ„๋กœ ๋งค์šฐ ์„ธ๋ฐ€ํ•œ ์ ‘๊ทผ ์ •์ฑ…์„ ์ˆ˜๋ฆฝํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ์ž ์—ญํ• (Role)์—๋งŒ ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฆฌ์†Œ์Šค(Resource)์™€ ์Šค์ฝ”ํ”„(Scope)์˜ ๊ฐœ๋…์„ ๋„์ž…ํ•ด ๋ณด๋‹ค ๋†’์€ ์ˆ˜์ค€์˜ ์ •์ฑ…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์€ ๊ฐ ๋ฆฌ์†Œ์Šค๋งˆ๋‹ค ๋…๋ฆฝ์ ์ธ ์ ‘๊ทผ ํ†ต์ œ ๊ธฐ์ค€์„ ๋งˆ๋ จํ•˜๊ณ , ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์€ Fine-Grained Authorization์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฃผ์š” ์š”์†Œ์™€ ๋™์ž‘ ๋ฐฉ์‹์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์‚ดํŽด๋ณธ ๋‚ด์šฉ์ด๋‹ค.

  1. ๋ฆฌ์†Œ์Šค(Resource)

    • Keycloak์—์„œ์˜ ๋ฆฌ์†Œ์Šค๋Š” ๋ณดํ˜ธ๊ฐ€ ํ•„์š”ํ•œ ๋Œ€์ƒ(์˜ˆ: API ์—”๋“œํฌ์ธํŠธ, ํŒŒ์ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ์ฝ”๋“œ ๋“ฑ)์„ ์˜๋ฏธํ•œ๋‹ค.

    • ๊ด€๋ฆฌ์ž๋Š” Keycloak Admin Console์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งˆ๋‹ค ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ๋ฆฌ์†Œ์Šค์—๋Š” ์ด๋ฆ„๊ณผ URI, ์†Œ์œ ์ž ๋“ฑ์„ ์„ค์ •ํ•œ๋‹ค.

    • ๋ฆฌ์†Œ์Šค๋Š” ์Šค์ฝ”ํ”„๋ฅผ ํฌํ•จํ•˜์—ฌ ์ •์˜๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์ปจ๋Œ€ document๋ผ๋Š” ๋ฆฌ์†Œ์Šค์— view, edit ์Šค์ฝ”ํ”„๋ฅผ ๋ถ€์—ฌํ•ด โ€œ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•  ๊ถŒํ•œโ€๊ณผ โ€œ๋ฌธ์„œ๋ฅผ ํŽธ์ง‘ํ•  ๊ถŒํ•œโ€์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. ์Šค์ฝ”ํ”„(Scope)

    • ํŠน์ • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์„ ์ •์˜ํ•œ๋‹ค.

    • โ€œ์ฝ๊ธฐโ€, โ€œ์“ฐ๊ธฐโ€, โ€œ์‚ญ์ œโ€์™€ ๊ฐ™์ด RESTful API ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ธฐ์ค€์œผ๋กœ ๋ช…๋ช…ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

    • ์Šค์ฝ”ํ”„ ๋‹จ์œ„์˜ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ผ๋„ ๋™์ž‘๋ณ„๋กœ ์ ‘๊ทผ์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ํด๋ฆฌ์‹œ(Policy)

    • โ€œ์–ด๋– ํ•œ ์กฐ๊ฑด์—์„œ ์ ‘๊ทผ์ด ํ—ˆ์šฉ(๋˜๋Š” ๊ฑฐ๋ถ€)๋˜๋Š”๊ฐ€?โ€๋ฅผ ์ •์˜ํ•˜๋Š” ๊ทœ์น™์ด๋‹ค.

    • ์—ญํ• (Role), ๊ทธ๋ฃน(Group), ์‚ฌ์šฉ์ž ์†์„ฑ, ์‹œ๊ฐ„ ์กฐ๊ฑด, ์‚ฌ์šฉ์ž ๋™์˜(Consent) ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์กฐ๊ฑด์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, JBoss Drools ๋“ฑ)๋ฅผ ํ™œ์šฉํ•œ ๊ณ ๊ธ‰ ์ •์ฑ…๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ํด๋ฆฌ์‹œ๋Š” ๋‹จ์ผ ์กฐ๊ฑด๋งŒ ์ •์˜ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํด๋ฆฌ์‹œ๋ฅผ ์ฐธ์กฐํ•ด ๋ณตํ•ฉ์ ์ธ ๋กœ์ง์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  4. ํผ๋ฏธ์…˜(Permission)

    • ํด๋ฆฌ์‹œ์™€ ๋ฆฌ์†Œ์Šค(ํ˜น์€ ์Šค์ฝ”ํ”„)๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์ตœ์ข…์ ์ธ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค์–ด, โ€œdocument ๋ฆฌ์†Œ์Šค์˜ edit ์Šค์ฝ”ํ”„์— ๋Œ€ํ•ด โ€˜Adminโ€™ ์—ญํ• ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅโ€์ด๋ผ๋Š” ํผ๋ฏธ์…˜์„ ์ •์˜ํ•˜๋ฉด, ํ•ด๋‹น ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ ๋ฌธ์„œ๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

    • ํผ๋ฏธ์…˜ ๋‹จ์œ„์—์„œ ์ •์ฑ… ์กฐํ•ฉ ๋ฐฉ์‹์„ ์„ค์ •ํ•ด, ์—ฌ๋Ÿฌ ํด๋ฆฌ์‹œ๋ฅผ โ€œANDโ€ ๋˜๋Š” โ€œORโ€ ์กฐ๊ฑด์œผ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  5. ์ •์ฑ… ํ‰๊ฐ€(Policy Evaluation)

    • ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ ์š”์ฒญ์„ ํ•˜๋ฉด Keycloak์€ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค์™€ ์Šค์ฝ”ํ”„๋ฅผ ํ™•์ธํ•˜๊ณ , ์—ฌ๊ธฐ์— ํ• ๋‹น๋œ ํผ๋ฏธ์…˜ ๋ฐ ์ •์ฑ…์„ ๊ฒ€์‚ฌํ•œ๋‹ค.

    • ์ •์ฑ…์—์„œ ์„ค์ •ํ•œ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜๋ฉด ์ ‘๊ทผ์ด ํ—ˆ๊ฐ€๋˜๊ณ , ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ์ ‘๊ทผ์ด ๊ฑฐ๋ถ€๋œ๋‹ค.

    • Keycloak์€ ์ด ๊ณผ์ •์„ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

  6. ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„(Resource Server) ๊ตฌ์„ฑ

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Keycloak์œผ๋กœ๋ถ€ํ„ฐ ์ •์ฑ… ํ‰๊ฐ€๋ฅผ ๋ฐ›์•„ ์ ์šฉํ•˜๋ ค๋ฉด, ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๋กœ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.

    • Admin Console์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ผ์ด์–ธํŠธ(Client)์˜ โ€œAuthorizationโ€ ํƒญ์„ ํ™œ์„ฑํ™”ํ•ด ๋ฆฌ์†Œ์Šค์™€ ํด๋ฆฌ์‹œ, ํผ๋ฏธ์…˜ ๋“ฑ์„ ์„ค์ •ํ•œ๋‹ค.

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธก์—์„œ๋Š” Keycloak Policy Enforcement Point(PEP) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ Authorization API๋ฅผ ํ˜ธ์ถœํ•ด ์ ‘๊ทผ ๊ถŒํ•œ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  7. ๊ณ ๋ ค ์‚ฌํ•ญ

    • ์„ธ๋ฐ€ํ•œ ์ •์ฑ…์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ •์ฑ… ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์†Œ์Šค์™€ ์Šค์ฝ”ํ”„, ์ •์ฑ…, ํผ๋ฏธ์…˜ ์„ค๊ณ„๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

    • ์ •์ฑ… ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์—ญํ• , ๊ทธ๋ฃน, ์†์„ฑ ๊ธฐ๋ฐ˜ ์ •์ฑ…๋“ค์„ ์ถฉ๋ถ„ํžˆ ๊ฒ€ํ† ํ•˜๊ณ , ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ฑฐ์ณ ์‹ค์ œ ์šด์˜์— ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค.

    • ์‹คํ–‰ ์‹œ๊ฐ„์— ๋ถ€ํ•˜๊ฐ€ ์šฐ๋ ค๋˜๋Š” ๋ณตํ•ฉ ์ •์ฑ…(์Šคํฌ๋ฆฝํŠธ, ๋‹ค๋‹จ๊ณ„ ์กฐ๊ฑด ๋“ฑ)์„ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•œ๋‹ค.

Fine-Grained Authorization์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋ฉด, ์‹œ์Šคํ…œ์˜ ๋ฆฌ์†Œ์Šค๋ณ„ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํˆฌ๋ช…ํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ๋‚˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ณด์•ˆ์„ ํ•œ์ธต ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์กฐ์ง ๋‚ด ๋‹ค์–‘ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Keycloak์ด ์ œ๊ณตํ•˜๋Š” Authorization Services UI์™€ API๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋ฉด ๊ด€๋ฆฌ์™€ ํ™•์žฅ์ด ์šฉ์ดํ•˜๋ฏ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ์„ธ๋ฐ€ํ•œ ์ •์ฑ…์„ ์ ๊ทน์ ์œผ๋กœ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Last updated