Shinyproxy: Digitalocean ์•ฑ ํ”Œ๋žซํผ ๋ฐฐํฌ

์— ๋งŒ๋“  2021๋…„ 01์›” 15์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: openanalytics/shinyproxy

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„!

Digitalocean ์•ฑ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ œ์•ˆ/ํŒ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? (https://www.digitalocean.com/products/app-platform/).

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ ์ด๊ฒƒ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Kubernetes์™€ ํ•จ๊ป˜ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฑฐ๊ธฐ์—์„œ shinyproxy ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ€์žฅ ์ ์ ˆํ•œ ๊ตฌ์„ฑ์€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!
ํŽ ๋ฆฌํŽ˜

question

๋ชจ๋“  15 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š”

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Kubernetes API๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ShinyProxy๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ค‘๊ฐ„์— ์ด๊ฒƒ์„ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ๋ฌผ๋ก  ์ด ํ”Œ๋žซํผ์—์„œ ShinyProxy๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๋ชจ๋“  ๊ฒƒ์„ AWS๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œํ—˜ํ•ด ๋ณผ ๋˜ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@fmmattioni Dockerfile ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ ํ…œํ”Œ๋ฆฟ์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/digitalocean/sample-dockerfile ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋‹ค์Œ ๊ตฌ์„ฑ ์ค‘ ์–ด๋Š ๊ฒƒ์ด ๋” ์ ํ•ฉํ•œ์ง€ ๋” ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @fmmattioni

๊ฐ€๋Šฅํ•˜๋ฉด ํ•ญ์ƒ ๊ณต์‹ Docker ์ด๋ฏธ์ง€ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ์ด๋ฏธ์ง€์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ณด์•ˆ ํ–ฅ์ƒ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ShinyProxy ์‹คํ–‰).

ํ , ์ข‹์€ ์ง€์ ! ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ชฐ๋ž๋‹ค! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์งˆ๋ฌธ: ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๊ฐ€ AWS Cognito ์ธ์ฆ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๋ฒ„์ „์˜ shinyproxy๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ด ์ด์ „ ๋ฒ„์ „์„ ๊ฐ„๋‹จํžˆ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด๋Ÿฌํ•œ ๋ณด์•ˆ ํ–ฅ์ƒ ๊ธฐ๋Šฅ์ด ์ตœ์‹  ๋ฒ„์ „์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @fmmattioni

๋ณด์•ˆ ๊ฐ•ํ™” ๊ธฐ๋Šฅ์€ ๋ชจ๋“  ๋ฒ„์ „์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฒ„์ „์˜ ShinyProxy๊ฐ€ AWS Cognito์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์–ธ๊ธ‰ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „(2.4.3)์˜ OIDC์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ธ์‹๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์ด ํฌํ•จ๋œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (์˜ˆ: ๊ฒฝํ—˜ํ•œ ํ–‰๋™, ๊ธฐ๋ก๋œ ์˜ค๋ฅ˜ ๋“ฑ). ์šฐ๋ฆฌ๋Š” ShinyProxy๊ฐ€ ๋ชจ๋“  ์ธ์ฆ ์ œ๊ณต์ž์™€ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์ •๋ง๋กœ ์›ํ•˜๋ฏ€๋กœ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์–ป์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์ด ๋‚ด Dockerfile์— ์žˆ์–ด์•ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

FROM openanalytics/shinyproxy:latest

COPY application.yml /opt/shinyproxy/application.yml

WORKDIR /opt/shinyproxy/
CMD ["java", "-jar", "/opt/shinyproxy/shinyproxy.jar"]

AWS Cognito์˜ ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ค์ •ํ•  ๋•Œ ๋กœ๊ทธ์— server.useForwardHeaders ์˜ต์…˜์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์–ธ๊ธ‰๋œ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด 2.4.3 ์ธ์ง€ ์—ฌ๋ถ€๋Š” ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ณ  ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์˜ˆ, ShinyProxy์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ์ ˆํ•œ Docker ํŒŒ์ผ์ด์ง€๋งŒ ๋” ์งง๊ฒŒ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

FROM openanalytics/shinyproxy:latest

COPY application.yml /etc/shinyproxy/application.yml

WORKDIR ๋˜๋Š” CMD ์ง€์‹œ๋ฌธ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Docker๊ฐ€ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์—์„œ ์ง€์‹œ๋ฌธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋Š” /etc/shinyproxy ๋ฅผ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ง€์ •ํ•˜๋ฏ€๋กœ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ทธ๊ณณ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

server.useForwardHeaders ์†์„ฑ์— ๋Œ€ํ•ด. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WARNING: Using server.use-forward-headers will not work in this ShinyProxy release. See https://shinyproxy.io/documentation/security/#https-ssl--tls on how to change your configuration.

๋”ฐ๋ผ์„œ 2.4.0๋ถ€ํ„ฐ๋Š” ํฌ์›Œ๋”ฉ ํ—ค๋”๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ ํฌ์›Œ๋”ฉ ํ—ค๋”๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ตฌ์„ฑ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

server:
  forward-headers-strategy: native

์˜ค๋ž˜๋œ ์žฌ์‚ฐ ๋Œ€์‹ .
๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์‹ค์ œ๋กœ https://shinyproxy.io/documentation/security/#forward -headers ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๋‚ด๊ฐ€ ๋ฐ›๊ณ  ์žˆ๋˜ ๊ฒฝ๊ณ ์ž…๋‹ˆ๋‹ค!

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ท€์ฐฎ๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ์ž์„ธํžˆ ์ฝ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค... ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋น ๋ฅธ ์—…๋ฐ์ดํŠธ: server.forward-headers-strategy ์†์„ฑ์ด ์‹ค์ œ๋กœ AWS Cognito์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์ €๋ฅผ ๊ฐ€๋ฅด์ณ ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@LEDfan ๋‹˜ , openanalytics/shinyproxy ๋„์ปค ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ์ œ์•ˆ๋œ ๋Œ€๋กœ ์ƒˆ ๊ตฌ์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋™์•ˆ ํ•ญ์ƒ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

image

์ด๊ฒƒ์€ ๋‚ด Dockerfile์ž…๋‹ˆ๋‹ค.

FROM openanalytics/shinyproxy:latest

COPY application.yml /etc/shinyproxy/application.yml

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด Dockerfile์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•  ๋•Œ:

FROM openjdk:8-jre

RUN mkdir -p /opt/shinyproxy/
RUN wget https://www.shinyproxy.io/downloads/shinyproxy-2.4.3.jar -O /opt/shinyproxy/shinyproxy.jar
COPY application.yml /opt/shinyproxy/application.yml

WORKDIR /opt/shinyproxy/
CMD ["java", "-jar", "/opt/shinyproxy/shinyproxy.jar"]

๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ Dockerfile์„ ์‚ฌ์šฉํ•  ๋•Œ application.yml ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ nginx ์—์„œ ํŠน์ • ์„ค์ •์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

์•ˆ๋…•ํ•˜์„ธ์š” @fmmattioni

์ด๋ฏธ์ง€๊ฐ€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„์ปค ์†Œ์ผ“์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ShinyProxy ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

docker run  -v /var/run/docker.sock:/var/run/docker.sock:ro --group-add $(getent group docker | cut -d: -f3) -p 8080:8080 openanalytics/shinyproxy

$(getent group docker | cut -d: -f3) ๋ถ€๋ถ„์€ docker์˜ group-id๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. --group-add ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ShinyProxy ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹คํ–‰ ์ค‘์ธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๊ทธ๋ฃน(์ฆ‰, ๋„์ปค ๊ทธ๋ฃน)์˜ ์ผ๋ถ€์ด๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ShinyProxy ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋„์ปค ์†Œ์ผ“์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ proxy.docker.url ์†์„ฑ์„ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ShinyProxy๋Š” ์ผ๋ถ€ ๋„์ปค HTTP ํฌํŠธ๊ฐ€ ์•„๋‹Œ ๋„์ปค ์†Œ์ผ“์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

๋‹ฌ์ฝคํ•œ! ์ž์„ธํ•œ ์ •๋ณด ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด๊ฒƒ์ด ์ง€๊ธˆ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰