본문으로 건너뛰기

EKS에서 SageMaker AI Spaces로 클러스터 내 JupyterLab과 VS Code 실행

SageMaker AI Spaces add-on으로 EKS 클러스터에서 JupyterLab과 VS Code를 브라우저와 SSM으로 빠르게 실행할 수 있다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

SageMaker AI Spaces add-on을 EKS 클러스터에 설치하면 JupyterLab과 Code Editor를 클러스터 내부에서 5분 내에 실행할 수 있다. 구현은 Route 53·ALB·Traefik으로 라우팅하고 auth middleware가 KMS로 암호화된 JWT를 검증하며 Pod Identity로 IAM 역할을 네임스페이스 수준에서 바인딩한다. VS Code는 SSH-over-SSM으로 원격 파일시스템과 커널에 연결하며, Dex+Cognito를 통해 OIDC 기반 사내 로그인과 Kubernetes RBAC 연동도 가능하다.

섹션별 상세

문제는 데이터 과학자가 파이프라인이 구동되는 동일 클러스터에서 인터랙티브 IDE를 실행하기 어려워 GPU, 공유 스토리지, 네이티브 IAM 역할을 잃는다는 점이다. 이 글은 SageMaker AI Spaces add-on이 EKS 클러스터 내부에서 관리형 JupyterLab과 Code Editor를 실행하도록 구성해 그 격차를 메운다는 해결책을 제시한다. 구현은 ALB와 Traefik 기반 라우팅, KMS로 암호화된 JWT를 검증하는 인증 미들웨어, Pod Identity를 통한 최소 권한 IAM 바인딩을 결합해 보안과 접근성 모두를 만족시킨다.
아키텍처는 세 계층으로 구성된다: 네트워크·접근, 클러스터 라우팅, 컴퓨트·스토리지다. 네트워크 계층에서는 Route 53으로 와일드카드 도메인을 ALB로 해석하고 ACM에서 발급한 TLS로 종단간 암호화를 제공한다. 클러스터 내부에서는 AWS Load Balancer Controller가 ALB를 생성하고 Traefik이 호스트명 기준 라우팅을 수행하며, auth middleware가 KMS로 암호화된 JWT를 복호화해 사용자를 검증한다. 이 구성은 브라우저 기반 접속과 VS Code의 SSM 터널 접속 둘 다 지원하므로 운영 편의성과 보안 제어를 동시에 달성한다.
아키텍처 다이어그램: Route 53→ALB→Traefik→Spaces 파드 흐름과 EKS Pod Identity, KMS, EBS 연동을 보여 준다.
Diagram이 다이어그램은 외부 도메인을 ALB로 종단하고 Traefik이 호스트명 기준으로 Space 파드로 트래픽을 전달하는 흐름을 시각화한다. 추가로 auth middleware가 KMS로 JWT를 복호화하며 Pod Identity가 각 컴포넌트에 최소 권한 IAM 역할을 할당하는 방식을 명시한다. 운영 관점에서 네트워크 경계와 인증·스토리지 책임이 어디에 있는지 한눈에 파악할 수 있다.
근거
  • 클러스터에 인터랙티브 IDE를 통합하면 전용 노트북 플릿보다 GPU 활용률을 최대 30% 상승시킬 수 있다. 본문의 'This can lift GPU utilization by up to 30 percent' 단락과 아키텍처 설명
설치 흐름은 사전요건 확인 → 컨트롤러와 외부 컴포넌트 설치 → 인증서와 KMS 키 생성 → Spaces add-on 설치 순서로 진행된다. 구체적으로 External DNS와 Load Balancer Controller를 위한 IAM 역할을 만들고 EKS Pod Identity로 바인딩한 뒤 Helm으로 컨트롤러를 배포하고 ACM에서 DNS 검증으로 인증서를 발급받는다. 본문은 필요한 CLI 명령과 정책 예시를 제시하며 설치 후 파드 상태와 add-on의 ACTIVE 상태 확인 방법을 명확히 보여 준다.
bash
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=$CLUSTER_NAME \
  --set serviceAccount.create=true \
  --set serviceAccount.name=aws-load-balancer-controller \
  --set region=$REGION \
  --set vpcId=$VPC_ID

이 명령은 AWS Load Balancer Controller Helm 차트를 클러스터에 설치해 ALB를 프로비저닝하도록 구성한다. 차트 설치 시 clusterName, region, vpcId를 명시해 EKS 파드에서 VPC를 자동 감지하지 못하는 환경을 보완한다. 설치가 완료되면 컨트롤러가 ALB 리소스를 생성해 외부 트래픽을 Traefik으로 라우팅한다.

bash
CERT_ARN=$(aws acm request-certificate \
  --domain-name "example.com" \
  --subject-alternative-names "*.example.com" \
  --validation-method DNS \
  --region $REGION \
  --query CertificateArn --output text)
aws acm describe-certificate --certificate-arn "$CERT_ARN" \
  --region $REGION \
  --query 'Certificate.DomainValidationOptions[].ResourceRecord'

이 스니펫은 ACM에 도메인과 와일드카드 인증서를 DNS 검증 방식으로 요청하고, ACM이 요구하는 CNAME 검증 레코드를 조회한다. 반환된 CNAME 값을 Route 53에 추가하면 인증서가 Issued 상태로 전환된다. 발급된 ARN은 add-on 구성에 전달되어 Spaces의 TLS 종료에 사용된다.

Route 53 호스티드 존 콘솔 스크린샷으로 ACM에서 요구하는 DNS 검증용 CNAME 레코드가 등록된 상태를 보여 준다.
Screenshot이 화면은 ACM의 DNS 검증 프로세스에서 반환된 CNAME 레코드를 Route 53에 추가해 인증서를 발급받는 실무 단계를 증명한다. 문서의 지침처럼 콘솔의 'Create records in Route 53' 버튼으로 자동 추가가 가능함을 뒷받침한다. DNS 레코드를 유지해야 자동 갱신이 동작한다는 보안 주석과 연결된다.
ACM 콘솔의 인증서 발급 완료 화면으로 도메인과 와일드카드에 대해 Issued 상태가 확인된다.
Screenshot인증서가 Issued 상태인 스크린샷은 TLS 종단 준비가 완료되었음을 검증한다. 문서가 권장하는 대로 루트 도메인과 와일드카드를 함께 요청한 결과를 보여 주며, 발급된 ARN이 add-on 구성에 사용되는 흐름을 뒷받침한다. 또한 인증서 발급과 함께 자동 갱신을 위해 검증 레코드 유지가 필요하다는 보안 권고와 연결된다.
근거
  • SSM advanced-instances tier는 Space 파드당 약 $0.00695/hr 비용이 발생한다. SSM 고급 티어 비용 주석과 aws ssm update-service-setting 명령이 포함된 설명
사용자 접근과 워크스페이스 생성은 EKS Access Entry와 Workspace CRD를 통해 이루어진다. 플랫폼 운영자는 특정 IAM 역할 또는 사용자에게 네임스페이스 범위 접근을 할당하고 AmazonSagemakerHyperpodSpacePolicy 같은 최소 권한 정책을 적용한다. 그 다음 미리 설치된 sagemaker-jupyter-template를 참조한 Workspace 리소스를 생성하면 약 5분 내에 Space가 Available 상태가 되고, 컨트롤러가 presigned URL 또는 vscode:// 딥링크를 발급해 브라우저와 VS Code에서 각각 접근할 수 있다.
yaml
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-space
  namespace: default
spec:
  templateRef:
    name: sagemaker-jupyter-template
    namespace: jupyter-k8s-system
  appType: jupyterlab
  accessType: OwnerOnly
  accessStrategy:
    name: hyperpod-access-strategy
    namespace: jupyter-k8s-system
  image: public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu

workspace 리소스는 JupyterLab 기반 Space를 네임스페이스 내에 생성하도록 정의한다. templateRef로 미리 설치된 템플릿을 참조해 이미지, 접근 전략, 권한 모델을 재사용하며, apply 후 약 5분 내에 워크스페이스가 Available 상태가 된다. 이 방식은 많은 설정을 템플릿으로 추상화해 사용자 셀프서비스를 단순화한다.

EKS 콘솔의 Access 탭 스크린샷으로 특정 IAM 역할에 네임스페이스 범위 접근을 부여하는 Access entry 생성 화면을 보여 준다.
Screenshot이 화면은 플랫폼 운영자가 사용자를 네임스페이스 수준으로 제한하는 방법을 실무적으로 확인시킨다. AmazonSagemakerHyperpodSpacePolicy가 바인딩된 예시가 보이며, 문서 권고처럼 네임스페이스 범위를 사용해 권한을 최소화하는 운영 방침을 증명한다. 결과적으로 사용자는 클러스터의 다른 네임스페이스 리소스에 접근할 수 없다.
kubectl 출력 또는 콘솔에서 my-space 워크스페이스가 Available 상태로 표시된 스크린샷이다.
Screenshot워크스페이스가 Available로 보고되는 스냅샷은 리소스가 정상적으로 프로비저닝되어 이용 가능함을 보여 준다. 문서의 '약 5분 소요'라는 시간 근거와 함께 초기 스타트업 과정이 성공적으로 완료되었음을 확인시킨다. 실제 파드 상태와 SSM 등록 과정을 추적할 때 유용한 증거가 된다.
사용자가 커스텀 도메인으로 접속해 브라우저에서 JupyterLab을 실행한 화면을 보여 준다.
Screenshot브라우저에서 JupyterLab이 동작하는 스크린샷은 ALB+Traefik+auth middleware+Space 파드가 연동되어 웹 UI가 정상 제공됨을 실증한다. presigned URL로 접근하는 흐름과 TLS가 정상 동작함을 시각적으로 확인할 수 있다. 또한 VS Code 없이도 브라우저 기반 작업이 가능한 운영 시나리오를 보여 준다.
브라우저에서 vscode:// 딥링크를 열도록 사용자에게 묻는 프롬프트 스크린샷이다.
Screenshot이 프롬프트는 워크스페이스가 vscode-remote 연결 URL을 발급했음을 보여 주며, 사용자가 이를 승인하면 AWS Toolkit이 SSH-over-SSM 터널을 설정한다고 문서에 적힌 흐름을 검증한다. 브라우저-IDE 연계 방식의 사용자 경험을 설명하는 중요한 시각적 근거다.
VS Code가 원격 Space 파일시스템과 커널에 연결된 상태의 스크린샷으로 파일 트리와 실행 결과가 보인다.
ScreenshotVS Code 내부에서 원격 Jupyter 커널과 파일 시스템이 노출된 화면은 SSM 터널을 통한 개발자 워크플로우가 의도대로 동작함을 입증한다. 이 방식은 도메인이나 ALB가 불필요한 환경에서 안전한 개발 접속을 가능하게 하며, 로컬 IDE와 클러스터 리소스의 밀착된 통합을 지원한다.
근거
  • Space 첫 생성 시 약 5분 내에 사용 가능한 상태가 된다. 본문의 'First-time startup takes about five minutes' 문장 및 Space 생성 후 kubectl get workspace 출력, Figure 5 콘솔 스크린샷
  • presigned URL에는 KMS로 암호화된 JWT가 포함되며 만료시간은 5분이다. presigned URL 동작 설명과 'KMS-encrypted JWT with a 5-minute expiry' 보안 주석, 예시 kubectl create 명령 블럭
SSM 기반 VS Code 연결과 OIDC 인증 추가가 실무 활용도를 높인다. VS Code는 AWS Toolkit과 Session Manager 플러그인을 통해 SSH-over-SSM 터널로 Space에 접속해 원격 파일시스템과 커널을 사용하며, 이는 ALB·도메인·퍼블릭 접속을 우회할 때 유용하다. 조직 로그인을 위해서는 Dex를 클러스터 내 OIDC 공급자로 배포하고 Cognito를 연결해 preferred_username과 그룹 클레임 매핑을 조정하면 Kubernetes RBAC와 연동된 셀프서비스 콘솔을 제공할 수 있다.
Dex와 Amazon Cognito를 사용한 자체 관리 OIDC 로그인 아키텍처 다이어그램이다.
Diagram이 다이어그램은 클러스터 내부의 Dex가 Cognito와 연결되어 OIDC 흐름을 구성하는 방법을 설명한다. preferred_username 및 그룹 클레임 매핑 같은 구체적 연동 포인트를 강조하며, Kubernetes RBAC과의 매핑 문제가 발생할 수 있는 지점을 명확히 나타낸다. 조직별 SSO 통합을 설계할 때 필요한 구성 요소와 책임 범위를 보여 준다.
Cognito 관리 로그인 페이지의 스크린샷으로 사용자가 이메일과 비밀번호로 로그인하는 화면을 보여 준다.
ScreenshotCognito의 관리 로그인 UI는 문서에 언급된 대로 사용자가 Cognito 그룹에 속해 있으면 콘솔에서 자신의 워크스페이스를 관리할 수 있게 해 준다. 스크린샷은 Dex에서 Cognito로 연결되어 단일 로그인 경험을 제공하는 사례를 시각적으로 입증한다. 또한 클레임 매핑이 잘못되면 세션 만료 메시지가 발생할 수 있다는 경고와 연결된다.
Cognito 사용자로 로그인한 상태에서 JupyterLab이 실행된 화면으로, 사용자 아이덴티티가 연동된 세션을 보여 준다.
Screenshot이 스크린샷은 OIDC 기반 로그인 후 JupyterLab이 해당 사용자 권한으로 동작함을 실증한다. 사용자별 셀프서비스 워크스페이스 생성과 액세스 제어 플로우가 의도대로 동작할 때의 결과를 보여 주며 조직 통합 시나리오의 실무성을 뒷받침한다. 또한 운영자가 그룹과 RBAC 매핑을 올바르게 구성했음을 간접적으로 증명한다.
웹 콘솔에서 셀프서비스로 관리 가능한 워크스페이스 목록을 보여 주는 스크린샷이다.
Screenshot콘솔 기반 워크스페이스 목록 화면은 최종 사용자가 자신 권한 하에서 워크스페이스를 생성·삭제·조회할 수 있는 운영 UX를 보여 준다. 이는 Dex+Cognito 또는 IAM 기반 접근 모두에서 셀프서비스가 가능한 설계 목표가 충족되었음을 입증한다. 플랫폼 팀은 이 화면을 통해 네임스페이스와 정책이 의도대로 적용되었는지 확인할 수 있다.

용어 해설

EKS Pod Identity
EKS Pod Identity는 Kubernetes 서비스 계정이 AWS IAM 역할을 일시적으로 수임하도록 연결하는 메커니즘이다. 서비스 계정 → IAM 역할 트러스트 정책을 통해 Pod가 필요 권한만 획득하게 하며, Pod 수준 권한 분리를 가능하게 한다. 이 글에서는 ExternalDNS, Load Balancer Controller, Spaces 컨트롤러 등에서 Pod Identity를 사용해 역할을 바인딩한다.
SSM Session Manager
SSM Session Manager는 AWS Systems Manager를 통한 원격 세션 터널링 기능으로, SSH 포트 개방 없이도 인스턴스나 하이브리드 엔드포인트에 셸 또는 포트 포워딩을 제공한다. 본 워크플로우에서는 VS Code가 SSM을 통해 Space pod의 파일 시스템과 커널에 안전하게 연결된다. 고급 tier(advanced)를 활성화하면 세션 기반 하이브리드 인스턴스 연결이 가능하다.
ACM DNS 검증(ACM DNS validation)
ACM DNS 검증은 인증서 발급을 위해 도메인 소유권을 입증하는 방법으로, ACM이 제공하는 CNAME 레코드를 Route 53 같은 DNS 호스팅에 추가하면 인증서가 발급된다. DNS 레코드를 삭제하면 자동 갱신이 실패하므로 검증용 CNAME을 유지해야 한다. 본문에서는 와일드카드와 루트 도메인을 함께 요청한다.
AWS KMS JWT 암호화(AWS KMS (JWT encryption))
Auth middleware는 JSON Web Token을 KMS 대칭 키로 암호화·복호화하며, 각 토큰 발급 시 kms:GenerateDataKey를 호출해 암호화된 데이터키를 얻는다. 이 설계는 presigned URL에 담긴 토큰의 기밀성을 유지하기 위한 목적이며 키는 ENCRYPT_DECRYPT로 생성되어야 한다. 키 정책과 최소 권한을 권장한다.
Dex + Amazon Cognito 기반 OIDC(OIDC with Dex and Cognito)
클러스터 내부의 Dex가 OIDC 프로바이더 역할을 하고, Dex는 Amazon Cognito 같은 외부 IdP와 커넥터로 연동해 사용자를 인증한다. EKS는 Dex를 신뢰할 수 있는 OIDC 공급자로 등록하고, Kubernetes RBAC은 그룹 클레임을 통해 사용자를 권한에 매핑한다. 본문은 Cognito와의 claim 매핑(예: preferred_username과 cognito:groups)을 구체적으로 다룬다.

기술

  • AWS CLI
  • kubectl
  • Helm
  • AWS Certificate Manager (ACM)
  • AWS KMS
  • AWS Load Balancer Controller
  • Traefik
  • AWS Systems Manager (SSM)

활용 사례

  • EKS 클러스터 내부에서 JupyterLab과 Code Editor를 GPU, EBS로 직접 실행해 파이프라인과 동일 환경에서 개발하기
  • 로컬 VS Code에서 SSM 터널을 통해 워크스페이스에 접속해 원격 파일시스템과 커널을 사용하는 개발 워크플로우
  • 사내 IdP(Cognito 등)와 연계한 OIDC 로그인으로 팀 단위의 셀프서비스 워크스페이스 관리
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 11.수집 2026. 08. 11.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.