CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
  • Week 1
    • 1.ML 수명주기와 ML 엔지니어의 역할
    • 2.ML 문제 유형과 평가 지표 기초
    • 3.AWS ML 스택 한눈에 보기
    • 4.SageMaker 개요: Studio, 학습/추론, 빌트인 알고리즘
    • 5.Week 1 종합 — ML 기초·AWS 스택 복습
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
    • 1.SageMaker IAM 보안: 실행 역할과 최소 권한
    • 2.네트워크 격리: VPC 모드 SageMaker와 PrivateLink
    • 3.데이터·모델 보호: KMS 암호화와 Secrets
    • 4.ML 비용 최적화: Spot 학습부터 비용 모니터링까지
    • 5.Week 9 종합: 보안·거버넌스·비용 복습
  • Week 10
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← MLA-C01/Week 9/Day 2

기준: MLA-C01 시험 가이드·오류 제보

MLA-C01· AssociateWeek 9 · Day 2읽기 약 13분
핵심 정리
  • 기본 SageMaker는 AWS 관리 네트워크에서 컨테이너를 돌리고 인터넷으로 나갈 수 있다. 규제 환경에서는 이걸 막아야 한다.
  • VPC 모드(VpcConfig)는 컨테이너 ENI를 내 VPC 서브넷에 붙여 보안 그룹·라우팅·엔드포인트 통제를 적용하게 한다.
  • EnableNetworkIsolation은 한 단계 더 강한 차단으로, 컨테이너의 모든 아웃바운드 호출을 끊는다.
  • 인터넷 게이트웨이를 없앤 VPC에서 AWS 서비스에 닿으려면 VPC 엔드포인트가 필요하다. S3·DynamoDB는 게이트웨이형, 나머지는 인터페이스형(PrivateLink).
  • VPC 모드 학습이 멈추면 대개 S3/ECR 엔드포인트 누락, 분산 학습이 안 되면 보안 그룹 자기 참조 규칙 누락이다.

Day 2 - 네트워크 격리: VPC 모드 SageMaker와 PrivateLink

격리의 3단계 — 무엇을 어디까지 막을 것인가

어제가 "누가 무엇을 할 수 있는가"의 권한이었다면, 오늘은 "트래픽이 어디로 흐르는가"의 네트워크다. 기본 설정에서 SageMaker 학습 작업은 AWS가 관리하는 격리된 네트워크에서 실행되고 필요하면 인터넷에 접근할 수 있다. 편하지만 두 가지 걸림돌이 있다 — ① 데이터가 인터넷 경로로 유출될 수 있다는 우려, ② 금융·의료 규제의 "모든 트래픽은 우리 VPC 안에서만" 요구.

항목기본 (SageMaker 관리 네트워크)VPC 모드 (VpcConfig)네트워크 격리 (EnableNetworkIsolation)
컨테이너가 붙는 곳AWS가 관리하는 네트워크내 VPC 서브넷의 ENIVPC 모드와 병행 가능. 아웃바운드 자체를 차단
인터넷 접근가능서브넷 라우팅에 달림(프라이빗이면 불가)불가
보안 그룹·NACL 적용불가가능해당 없음(호출 자체가 없음)
S3 접근 경로서비스가 알아서 처리VPC 엔드포인트가 있어야 함SageMaker가 데이터를 미리 내려 컨테이너에 제공
설정 키없음(기본값)Subnets + SecurityGroupIdsEnableNetworkIsolation: true
대표 용도실험·PoC규제 준수, 트래픽 경로 통제최고 수준 격리, 데이터 반출 차단
대표 부작용통제 수단이 없음엔드포인트 누락 시 작업이 멈춤pip install·외부 API 호출 불가

세 단계는 배타적이지 않고 쌓아 올리는 관계다. VPC 모드로 트래픽을 내 경계 안으로 끌어들이고, 인터넷 게이트웨이를 없애고, 빠진 경로를 VPC 엔드포인트로 메우고, 가장 민감한 워크로드에는 네트워크 격리를 얹는다.

[기본 모드]
학습 컨테이너 → AWS 관리 네트워크 → (인터넷 가능)
 
[VPC 모드]
학습 컨테이너 → 고객 VPC 서브넷(ENI) → 보안 그룹 → VPC 엔드포인트 → S3 / SageMaker API
                                                  (인터넷 게이트웨이 없음)
 
[VPC 모드 + 네트워크 격리]
학습 컨테이너 ─╳─ 아웃바운드 전면 차단
        ▲
        └── SageMaker가 미리 내려받아 마운트해 준 데이터만 사용

💡 관련 이론: VPC 모드의 본질은 "트래픽의 경로를 고객이 통제 가능한 경계 안으로 끌어들이는 것"이다. 일단 VPC 안으로 들어오면 보안 그룹·NACL·라우팅 테이블·VPC 엔드포인트 등 익숙한 VPC 통제 수단을 전부 적용할 수 있다. 격리는 "막는 것"이 아니라 "내가 볼 수 있는 곳으로 트래픽을 모으는 것"에서 시작한다.

VPC 모드 구성

학습 작업이나 모델에 VpcConfig로 서브넷과 보안 그룹을 지정한다. SageMaker는 지정한 서브넷에 ENI(탄력적 네트워크 인터페이스)를 만들어 컨테이너를 VPC에 연결한다.

{
  "VpcConfig": {
    "Subnets": ["subnet-0a1b2c3d", "subnet-4e5f6a7b"],
    "SecurityGroupIds": ["sg-0123456789abcdef0"]
  }
}
  • Subnets: 여러 AZ의 서브넷을 주면 가용성이 올라간다. 보통 프라이빗 서브넷(인터넷 게이트웨이로 가는 라우트가 없는)을 쓴다.
  • SecurityGroupIds: 컨테이너 ENI에 붙는 보안 그룹. 인바운드·아웃바운드 규칙을 통제한다.
  • 서브넷의 가용 IP 수가 넉넉해야 한다. 인스턴스마다 ENI가 필요하므로 분산 학습에서 IP가 고갈되면 작업이 실패한다.

Python SDK에서는 Estimator 파라미터로 그대로 넘긴다.

from sagemaker.estimator import Estimator
 
estimator = Estimator(
    image_uri=container,
    role=role,
    instance_count=2,
    instance_type='ml.m5.xlarge',
    subnets=['subnet-0a1b2c3d', 'subnet-4e5f6a7b'],   # VPC 모드
    security_group_ids=['sg-0123456789abcdef0'],
    enable_network_isolation=True,                     # 아웃바운드 전면 차단
    encrypt_inter_container_traffic=True,              # 노드 간 트래픽 암호화
)

인터넷 차단 — EnableNetworkIsolation

VPC 모드만으로는 부족할 수 있다. 더 강한 격리는 네트워크 격리(network isolation)다. 이를 켜면 컨테이너가 어떤 아웃바운드 네트워크 호출도 못 한다 — 인터넷은 물론 VPC 내부 호출도 막힌다. 컨테이너는 오직 SageMaker가 제공한 데이터로만 동작한다.

{
  "EnableNetworkIsolation": true
}

네트워크 격리를 켜면 컨테이너가 외부 패키지를 다운로드하거나 외부 API를 호출할 수 없다. 그래서 의존성을 미리 컨테이너 이미지에 다 넣어둬야 한다. 가장 엄격한 격리가 필요한 민감 워크로드에 쓴다.

EnableNetworkIsolation과 VPC 모드는 헷갈리기 쉽지만 다른 레벨이다. VPC 모드는 "트래픽을 고객 VPC로 보낸다"이고, 네트워크 격리는 "컨테이너의 모든 아웃바운드를 끊는다"이다. 둘을 함께 쓰면 가장 강력하다 — 그런데 격리를 켜면 학습 데이터는 SageMaker가 미리 다운로드해 컨테이너에 마운트한다. "컨테이너가 인터넷에서 모델을 못 받게 하라"는 시나리오의 정답이 네트워크 격리다.

⚠️ 함정: 네트워크 격리를 켜면 학습 스크립트 안의 pip install, 사전학습 가중치 다운로드, 외부 지표 서버 전송이 전부 실패한다. "왜 로컬에선 되는데 SageMaker에서만 안 되지"의 상당수가 이 경우다. 대응은 ① 의존성을 커스텀 이미지에 굽거나 ② 소스 디렉터리에 requirements.txt를 함께 올려 SageMaker가 시작 전에 처리하게 하는 것이다.

VPC 엔드포인트(PrivateLink) — 인터넷 없이 AWS 서비스 호출

VPC 모드로 인터넷 게이트웨이를 없애면 컨테이너가 S3나 SageMaker API에 어떻게 접근할까? 답은 VPC 엔드포인트다. 트래픽이 인터넷을 거치지 않고 AWS 백본 내부로만 흐른다. 두 종류가 있고, 어느 쪽인지 구분하는 것이 시험 범위에 든다.

항목게이트웨이 엔드포인트인터페이스 엔드포인트 (PrivateLink)
지원 서비스S3, DynamoDB 두 개뿐SageMaker API·Runtime, ECR, CloudWatch Logs, STS 등 대부분
동작 방식라우팅 테이블에 경로를 추가서브넷에 ENI를 만들고 프라이빗 IP 부여
보안 그룹 부착불가(엔드포인트 정책으로 통제)가능(ENI에 SG를 붙임)
이름 해석라우팅으로 처리프라이빗 DNS가 서비스 도메인을 프라이빗 IP로 해석
비용없음시간당 + 데이터 처리량 과금
온프레미스에서 사용불가(해당 VPC 내부에서만)가능(Direct Connect·VPN 경유)
액세스 제어 수단엔드포인트 정책엔드포인트 정책 + 보안 그룹

인터넷 없는 VPC 모드 학습을 돌리려면 다음 엔드포인트들이 필요하다.

필요한 VPC 엔드포인트 (인터넷 없는 VPC 모드 학습 시)
- com.amazonaws.<region>.s3                  (게이트웨이) → 데이터 · 아티팩트 · ECR 이미지 레이어
- com.amazonaws.<region>.sagemaker.api       (인터페이스) → 작업 제어
- com.amazonaws.<region>.sagemaker.runtime   (인터페이스) → 추론 호출
- com.amazonaws.<region>.ecr.api             (인터페이스) → 이미지 메타데이터 · 인증
- com.amazonaws.<region>.ecr.dkr             (인터페이스) → Docker pull
- com.amazonaws.<region>.logs                (인터페이스) → CloudWatch Logs
- com.amazonaws.<region>.sts                 (인터페이스) → 역할 assume

이 엔드포인트들이 빠지면 "VPC 모드로 했더니 작업이 멈춰서 안 끝난다"는 현상이 생긴다 — 컨테이너가 S3나 ECR에 닿지 못해서다. 특히 ECR 이미지 레이어는 S3에 저장되므로, ECR 엔드포인트만 만들고 S3 게이트웨이 엔드포인트를 빠뜨리면 이미지 pull이 실패한다.

무엇이 실제로 만들어져 있는지는 EC2 API로 바로 확인할 수 있다.

import boto3
 
ec2 = boto3.client('ec2')
resp = ec2.describe_vpc_endpoints(
    Filters=[{'Name': 'vpc-id', 'Values': ['vpc-0abc123456789def0']}]
)
 
for ep in resp['VpcEndpoints']:
    print(ep['ServiceName'], ep['VpcEndpointType'], ep['State'])
    # ServiceName에 s3 / sagemaker.api / ecr.dkr / logs / sts 가 다 있는지 대조

PrivateLink(인터페이스 엔드포인트)의 핵심 가치는 "AWS 서비스 트래픽이 퍼블릭 인터넷을 절대 타지 않는다"이다. 엔드포인트가 VPC 안에 프라이빗 IP를 가지므로, 컨테이너 입장에서 S3나 SageMaker가 마치 같은 VPC 안에 있는 것처럼 보인다. 데이터 유출 경로를 인터넷에서 AWS 백본으로 옮기는 것이 격리의 마지막 퍼즐이다.

트래픽은 실제로 어디로 흐르나

┌──────────────────────── 고객 VPC ────────────────────────┐
│                                                          │
│   프라이빗 서브넷 A               프라이빗 서브넷 B        │
│   ┌─────────────────┐           ┌─────────────────┐      │
│   │  학습 컨테이너   │◀─────────▶│  학습 컨테이너   │      │
│   │   ENI (sg-app)  │  노드 간   │   ENI (sg-app)  │      │
│   └────────┬────────┘  통신      └────────┬────────┘      │
│            │  443/HTTPS                   │               │
│            ▼                              ▼               │
│   ┌────────────────────────────────────────────┐          │
│   │  인터페이스 엔드포인트 ENI (sg-endpoint)     │          │
│   └────────────────────────────────────────────┘          │
│            │                                              │
│            ├──▶ SageMaker API / Runtime                   │
│            ├──▶ ECR (api · dkr)                           │
│            ├──▶ CloudWatch Logs                           │
│            └──▶ STS                                       │
│                                                          │
│   라우팅 테이블 ──▶ [S3 게이트웨이 엔드포인트] ──▶ S3       │
│                                                          │
│   ✗ 인터넷 게이트웨이 없음      ✗ NAT 게이트웨이 없음       │
└──────────────────────────────────────────────────────────┘

인터페이스 엔드포인트로 가는 트래픽은 프라이빗 DNS가 만든다. 컨테이너는 평소처럼 sagemaker.<region>.amazonaws.com을 호출하는데, VPC 내부 DNS가 그 이름을 엔드포인트 ENI의 프라이빗 IP로 해석해 준다. 프라이빗 DNS를 꺼두면 코드가 퍼블릭 IP로 나가려다 실패하므로 사실상 필수 설정이다.

보안 그룹 — ENI 레벨 방화벽

컨테이너 ENI와 VPC 엔드포인트 ENI에 붙는 보안 그룹으로 트래픽을 더 좁힌다. 분산 학습에서는 컨테이너들끼리 통신해야 하므로 자기 참조 규칙이 필요하다.

SageMaker 컨테이너 보안 그룹 (sg-app)
- 인바운드: sg-app 자기 자신으로부터 모든 TCP   (분산 학습 노드 간 통신)
- 아웃바운드: 443 → sg-endpoint                (HTTPS로 VPC 엔드포인트 호출)
 
VPC 엔드포인트 보안 그룹 (sg-endpoint)
- 인바운드: 443 ← sg-app                       (컨테이너로부터 HTTPS)
규칙없으면 생기는 일
sg-app 자기 참조 인바운드멀티 노드 분산 학습에서 노드 간 통신이 막혀 학습이 시작되지 않는다
sg-app 아웃바운드 443 → sg-endpoint컨테이너가 어떤 VPC 엔드포인트에도 닿지 못해 작업이 멈춘다
sg-endpoint 인바운드 443 ← sg-app엔드포인트를 만들었는데도 연결이 거부된다

아웃바운드를 443으로 엔드포인트 보안 그룹에만 허용하면 트래픽이 다른 곳으로 새지 않는다. 보안 그룹을 IP 대역이 아니라 다른 보안 그룹 ID로 참조하는 것이 요령이다. ENI가 매번 새 IP로 생기는 SageMaker 환경에서 IP 기반 규칙은 관리가 불가능하다.

VPC 모드 체크리스트

VPC 모드 학습이 멈추거나 실패할 때 점검 순서:

  1. 서브넷이 프라이빗인가, 라우팅이 VPC 엔드포인트로 가는가
  2. S3 게이트웨이 엔드포인트가 있고 해당 서브넷의 라우팅 테이블에 연결됐는가
  3. SageMaker API/Runtime, ECR(api·dkr), Logs, STS 인터페이스 엔드포인트가 있는가
  4. 인터페이스 엔드포인트의 프라이빗 DNS가 켜져 있는가
  5. 보안 그룹 아웃바운드 443이 엔드포인트 SG로 열려 있는가
  6. 분산 학습이면 자기 참조 인바운드가 있는가
  7. 서브넷에 ENI를 만들 가용 IP가 남아 있는가
  8. 외부 패키지 다운로드가 꼭 필요한 경우인지(그렇다면 NAT 게이트웨이 또는 이미지 사전 포함)

격리가 막힐 때: 증상 → 원인 → 조치

증상흔한 원인조치
VPC 모드 전환 후 작업이 시작은 되나 진행 없이 타임아웃S3 게이트웨이 엔드포인트 없음, 또는 라우팅 테이블에 미연결엔드포인트 생성 후 해당 서브넷의 라우팅 테이블에 연결
컨테이너 이미지 pull 단계에서 멈춤ecr.api·ecr.dkr 누락, 또는 이미지 레이어용 S3 엔드포인트 누락ECR 엔드포인트 2종 + S3 게이트웨이 엔드포인트를 함께 구성
로그가 CloudWatch에 안 남아 원인 파악조차 어려움logs 인터페이스 엔드포인트 누락logs 엔드포인트 생성. 격리 환경에서 이게 없으면 디버깅이 봉쇄된다
학습 스크립트의 pip install이 실패네트워크 격리 활성 또는 인터넷 경로 없음의존성을 이미지에 굽거나 requirements.txt를 소스 디렉터리로 전달
멀티 노드 분산 학습이 시작 단계에서 멈춤보안 그룹 자기 참조 인바운드 규칙 없음sg-app 인바운드에 출처=sg-app 규칙 추가
엔드포인트를 만들었는데도 접근이 안 됨프라이빗 DNS 비활성, 또는 엔드포인트 SG의 443 인바운드 미개방프라이빗 DNS 활성화 + sg-endpoint 인바운드 443 ← sg-app
다른 건 되는데 S3만 거부됨버킷 정책·엔드포인트 정책의 aws:SourceVpce 값이 실제 엔드포인트 ID와 불일치정책에 박힌 VPCE ID를 현재 엔드포인트 ID와 대조
작업 준비 시간이 눈에 띄게 길어짐VPC 모드는 서브넷에 ENI를 만드는 단계가 추가됨정상 동작. 타임아웃 여유를 두고 진행
ENI 생성 실패로 작업이 실패서브넷의 가용 IP 고갈CIDR이 더 큰 서브넷을 쓰거나 여러 AZ 서브넷을 함께 지정

내일은 데이터와 모델 자체를 보호하는 KMS 암호화와 Secrets 관리를 다룬다.

📖 용어

  • VPC 모드 : 학습·추론 컨테이너를 고객 VPC 서브넷에 ENI로 붙여 실행하는 설정. Subnets와 SecurityGroupIds로 지정한다.
  • ENI (탄력적 네트워크 인터페이스) : VPC 안에서 프라이빗 IP를 갖는 가상 랜카드. SageMaker가 컨테이너를 VPC에 붙일 때 만든다.
  • EnableNetworkIsolation : 컨테이너의 모든 아웃바운드 네트워크 호출을 차단하는 옵션. 가장 강한 격리 수단.
  • VPC 엔드포인트 : 인터넷을 거치지 않고 AWS 서비스에 닿게 해주는 통로. 게이트웨이형과 인터페이스형이 있다.
  • 게이트웨이 엔드포인트 : S3·DynamoDB 전용. 라우팅 테이블에 경로를 추가하는 방식이며 추가 비용이 없다.
  • 인터페이스 엔드포인트 (PrivateLink) : 서브넷에 ENI와 프라이빗 IP를 만들어 서비스에 연결. 대부분의 서비스가 이 방식이며 시간·데이터당 과금된다.
  • 프라이빗 DNS : 서비스의 공개 도메인 이름을 엔드포인트의 프라이빗 IP로 해석해 주는 기능. 꺼두면 코드가 퍼블릭 경로로 나가려다 실패한다.
  • 프라이빗 서브넷 : 인터넷 게이트웨이로 가는 라우트가 없는 서브넷. VPC 모드 SageMaker의 기본 배치 장소.
  • 자기 참조 보안 그룹 규칙 : 같은 보안 그룹을 출처로 지정한 인바운드 규칙. 분산 학습 노드 간 통신에 필수다.
  • aws:SourceVpce : 요청이 특정 VPC 엔드포인트를 통해 들어왔는지 검사하는 조건 키. 버킷을 그 경로로만 열 때 쓴다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

규제 요건상 SageMaker 학습 컨테이너가 어떤 외부 네트워크 호출도 하지 못하도록, 외부에서 모델 가중치나 패키지를 받지 못하게 해야 한다. 가장 적절한 설정은?

문제 2

VPC 모드(프라이빗 서브넷, 인터넷 게이트웨이 없음)로 학습 작업을 실행했더니 작업이 시작은 되는데 진행되지 않고 결국 타임아웃된다. 가장 가능성 높은 원인은?

문제 3

S3에 대한 VPC 접근을 인터넷을 거치지 않고 비용 없이 구성하려 한다. 적절한 것은?

문제 4

멀티 노드 분산 학습을 VPC 모드로 실행했더니 노드 간 통신이 안 되어 학습이 시작되지 않는다. 보안 그룹에 추가해야 할 규칙은?

문제 5

VPC 모드와 EnableNetworkIsolation의 차이를 가장 정확히 설명한 것은?

이전SageMaker IAM 보안: 실행 역할과 최소 권한Week 9 · Day 1다음 데이터·모델 보호: KMS 암호화와 SecretsWeek 9 · Day 3

참고 공식 자료

  • MLA-C01 공식 시험 안내(새 탭에서 열림)
  • Amazon VPC 공식 문서(새 탭에서 열림)
  • Amazon S3 공식 문서(새 탭에서 열림)
  • Amazon SageMaker AI 공식 문서(새 탭에서 열림)
  • Amazon DynamoDB 공식 문서(새 탭에서 열림)

이 페이지

  • 격리의 3단계 — 무엇을 어디까지 막을 것인가
  • VPC 모드 구성
  • 인터넷 차단 — EnableNetworkIsolation
  • VPC 엔드포인트(PrivateLink) — 인터넷 없이 AWS 서비스 호출
  • 트래픽은 실제로 어디로 흐르나
  • 보안 그룹 — ENI 레벨 방화벽
  • VPC 모드 체크리스트
  • 격리가 막힐 때: 증상 → 원인 → 조치
  • 용어
  • 연습 문제