업데이트로 돌아가기
New releaseAug 12, 2026

multi-juicer v10.3.0

보안 교육 및 Capture The Flags를 위해 여러 Juice Shop 인스턴스를 호스팅하고 관리합니다.

공유

MultiJuicer, 다중 사용자 Juice Shop 플랫폼

OWASP Juice Shop로 CTF와 보안 교육을 진행하는 것은 보통 꽤 까다롭습니다. Juice Shop은 여러 사용자가 동시에 사용하도록 의도된 것이 아니기 때문입니다. 모든 사람에게 자신의 머신에서 Juice Shop을 시작하는 방법을 알려주는 것도 괜찮긴 하지만, 너무 많은 귀중한 시간을 빼앗습니다.

MultiJuicer는 중앙 kubernetes 클러스터에서 모든 참가자를 위해 별도의 Juice Shop 인스턴스를 실행할 수 있는 기능을 제공하여, 로컬 Juice Shop 인스턴스 없이도 이벤트를 진행할 수 있게 해줍니다.

주요 기능:

  • 필요할 때 동적으로 새로운 Juice Shop 인스턴스를 생성합니다
  • 단일 도메인에서 실행되며, LoadBalancer가 트래픽을 참가자의 Juice Shop 인스턴스로 전달합니다
  • 모든 참가자의 진행 상황을 보여주는 깔끔한 리더보드
  • 인스턴스 관리를 위한 편리한 관리자 페이지
  • Juice Shop 컨테이너가 재시작될 경우 챌린지 진행 상황을 백업하고 자동으로 적용합니다
  • 오래되고 사용되지 않는 인스턴스를 자동으로 정리합니다

MultiJuicer, 고수준 아키텍처 다이어그램

아키텍처와 개별 구성 요소에 대한 자세한 설명은 아키텍처 문서를 참조하세요.

👉 MultiJuicer가 처음이신가요? 참가자가 등록하고 JuiceShop 인스턴스를 받는 방법, 그리고 점수가 스코어보드에 어떻게 기록되는지에 대한 시각적 안내를 참조하세요.

설치

MultiJuicer는 kubernetes에서 실행되며, 설치하려면 helm이 필요합니다

helm install multi-juicer oci://ghcr.io/juice-shop/multi-juicer/helm/multi-juicer

MultiJuicer를 실제 이벤트에서 사용하기 전에 구성해야 할 값들의 체크리스트는 프로덕션 노트를 참조하세요.

JuiceShop v20+ AI/LLM 관련 챌린지를 지원하도록 MultiJuicer를 설정하려면 AI/LLM 구성 가이드를 참조하세요.

특정 클라우드 제공자 / 환경을 위한 설치 가이드

일반적으로 MultiJuicer는 거의 모든 kubernetes 클러스터에서 실행되지만, kubernetes가 처음인 사람도 쉽게 사용할 수 있도록 일부 특정 클라우드 제공자에서 MultiJuicer가 설치된 kubernetes 클러스터를 설정하는 방법에 대한 가이드를 제공합니다.

설정 사용자 지정

스택을 설정하는 방법에는 몇 가지 옵션이 있으며, JuiceShop 인스턴스를 원하는 대로 사용자 지정할 수 있는 옵션도 있습니다. 기본 구성 값은 다음에서 확인할 수 있습니다: helm/multi-juicer/values.yaml

파일을 다운로드하여 저장한 후, 다음을 실행하여 기본값 대신 구성 파일을 사용하도록 helm에 지시하세요:

helm install -f values.yaml multi-juicer ./multi-juicer/helm/multi-juicer/

JuiceShop 인스턴스와 MultiJuicer UI의 테마(테마, 로고, 활성화된 챌린지 등)를 사용자 지정하려면 JuiceShop 사용자 지정 가이드를 참조하세요.

제거

helm delete multi-juicer

FAQ

클러스터에 얼마나 많은 컴퓨팅 리소스가 필요합니까?

안전하게 계산하려면 다음을 기준으로 하십시오:

  • MultiJuicer 자체를 위해 1GB 메모리 및 1CPU 오버헤드
  • 개별 JuiceShop 인스턴스를 위해 384MB 및 0.1CPU * 참가자 / 팀 수

위 수치는 기본 리소스 제한을 반영합니다. 이는 조정할 수 있습니다. 참조: 설정 사용자 지정

MultiJuicer는 몇 명의 사용자를 처리할 수 있습니까?

실질적인 고정 제한은 없습니다. (설정할 수는 있지만요 😉) 개별 인스턴스에 대한 모든 트래픽이 흐르는 커스텀 LoadBalancer는 원하는 만큼 복제할 수 있습니다. 또한 Horizontal Pod Autoscaler를 연결하여 LoadBalancer를 자동으로 확장할 수 있습니다.

왜 커스텀 LoadBalancer인가요?

기존의 사전 구축된 로드 밸런서로는 쉽게 해결되지 않는 몇 가지 특별한 요구 사항이 있습니다:

  • 배포의 사용자 수를 특정 팀의 구성원으로만 제한하기.
  • 다른 인스턴스에 접근하기 위해 스푸핑하기 어렵고 안전한 로드 밸런서 쿠키.
  • 새 인스턴스의 시작 처리.

커스텀 로드 밸런서 없이 이러한 문제를 해결할 수 있는 멋진 아이디어가 있다면 저희에게 알려주세요. 듣고 싶습니다!

왜 팀마다 별도의 kubernetes 배포를 사용하나요?

여기에는 꽤 좋은 이유가 있습니다:

  • 팀의 인스턴스를 개별적으로 삭제할 수 있는 능력. 활성 팀의 인스턴스를 제거하지 않고 안전하게 축소하는 것은 스케일된 배포에서는 정말 까다롭습니다. 원하는 규모만 선택할 수 있을 뿐 어떤 파드를 유지하고 어떤 파드를 버릴지는 선택할 수 없습니다.
  • 파드가 재생성된 후에도 파드가 팀과 적절하게 연결되어 있도록 보장하기. 이는 별도 배포에서는 문제가 되지 않지만 스케일된 배포에서는 정말 어렵습니다.
  • 배포 이름에 팀 이름을 포함할 수 있는 능력. 바보 같은 이유처럼 보일 수 있지만 kubectl만 사용하여 디버깅을 훨씬 쉽게 만들어 줍니다.

kubectl을 사용하여 JuiceShop을 쉽게 관리하는 방법은?

kubectl의 custom-columns 기능을 사용하여 관련 정보와 함께 모든 JuiceShop을 나열할 수 있습니다.

$ kubectl get -l app.kubernetes.io/name=juice-shop -o custom-columns="TEAM:metadata.labels.team,SOLVED-CHALLENGES:metadata.annotations.multi-juicer\.owasp-juice\.shop/challengesSolved,LAST-REQUEST:metadata.annotations.multi-juicer\.owasp-juice\.shop/lastRequestReadable" deployments
TEAM         SOLVED-CHALLENGES   LAST-REQUEST
foobar       3                   Wed May 4 2042 18:14:22 GMT+0000 (Coordinated Universal Time)
team-42      0                   Wed May 4 2042 18:14:30 GMT+0000 (Coordinated Universal Time)
the-empire   0                   Wed May 4 2042 18:14:46 GMT+0000 (Coordinated Universal Time)

이 프로젝트는 어디에서 시작되었나요

이 프로젝트는 독일에 기반을 둔 소프트웨어 개발 회사인 iteratec에서 자사 개발자와 고객을 대상으로 보안 교육을 진행하기 위해 시작되었습니다. 그 후 2019년에 오픈 소스로 공개되었고, 2023년에 OWASP 조직 / OWASP Juice Shop 프로젝트에 기부되었습니다.

우리와 이야기하세요!

OWASP Slack Workspace의 #project-juiceshop 채널에서 저희에게 연락하실 수 있습니다. 여러분의 피드백이나 사용 사례를 듣고 싶습니다. 아직 OWASP Slack Workspace에 가입하지 않으셨다면 이 링크를 통해 가입하실 수 있습니다.

카테고리