ML 보안 심화: 네트워크 격리·KMS 암호화·최소 권한·감사 로깅과 HIPAA 시나리오

MLA-C01에서 약 40문항을 차지하는 보안 문제를 네트워크·암호화·권한·감사의 네 층으로 정리했습니다. S3 게이트웨이 엔드포인트와 네트워크 격리, KMS 키 정책, IAM 조건 키, CloudTrail 데이터 이벤트, Macie와 Secrets Manager, HIPAA 시나리오 조립 순서까지 담았습니다.

MLA-C01 문제은행에서 보안과 규정 준수를 다루는 문제는 약 40문항으로, 서비스 묶음 중 가장 큰 편입니다. 시험 안내서는 과제 4.3에서 IAM 역할·정책·버킷 정책, SageMaker의 보안·규정 준수 기능, ML 리소스의 네트워크 접근 통제, CI/CD 파이프라인 보안을 요구하고, 과제 1.3에서 데이터 암호화, 분류·익명화·마스킹, PII·PHI·데이터 레지던시 같은 규정 준수 요구를 함께 묻습니다. 문제는 대개 "HIPAA를 지켜야 한다", "인터넷을 거치면 안 된다" 같은 조건을 주고 설정 몇 가지를 조합하게 합니다.

이 글은 ML 보안을 네트워크, 암호화, 권한, 감사의 네 층으로 나누어 각 층의 SageMaker 설정을 정리하고, 민감 데이터 처리, CI/CD와 비밀 관리, HIPAA 시나리오 조립 순서로 이어 갑니다. 보안의 큰 그림은 모델 모니터링, 비용 최적화, 보안에서 먼저 다뤘습니다.

---

 

보안을 네 층으로 나눠 보기

은행 금고를 지키려면 건물 출입을 막고(네트워크), 금고를 잠그고(암호화), 열쇠를 가진 사람을 정하고(권한), CCTV로 기록합니다(감사). 하나만 빠져도 전체가 약해집니다. 보안 문제의 보기도 대개 이 네 층에서 하나씩 나옵니다.

| 층 | 답하는 질문 | 대표 설정 | |------|------|------| | 네트워크 | 데이터가 어떤 길로 다니나? | VPC, VPC 엔드포인트, 네트워크 격리, 보안 그룹 | | 암호화 | 데이터를 훔쳐도 읽을 수 없나? | KMS(저장 데이터), TLS · 컨테이너 간 암호화(전송 중) | | 권한 | 누가 무엇을 할 수 있나? | IAM 실행 역할, 최소 권한, 조건 키, 버킷 정책 | | 감사 | 누가 언제 무엇을 했나? | CloudTrail, CloudWatch Logs, AWS Config |

!ML 보안의 네 층인 네트워크, 암호화, 권한, 감사와 각 층의 대표 AWS 설정

---

 

1층 네트워크: VPC, VPC 엔드포인트, 네트워크 격리

SageMaker 작업을 VPC 안에서 실행하기

학습 작업, 처리 작업, 모델(엔드포인트)을 만들 때 VpcConfig에 프라이빗 서브넷과 보안 그룹을 지정하면 컨테이너가 VPC 안에서 동작합니다. 인터넷으로 나가는 길(NAT 게이트웨이)이 없으면 S3에도 닿지 못하므로, S3 게이트웨이 VPC 엔드포인트를 만들어야 학습 데이터와 모델 아티팩트를 읽고 쓸 수 있습니다.

| 요구 사항 | 설정 | |------|------| | 학습 컨테이너가 인터넷 없이 S3에 접근 | S3 게이트웨이 VPC 엔드포인트 | | VPC 안의 앱이 인터넷 없이 엔드포인트를 호출 | SageMaker Runtime 인터페이스 엔드포인트(PrivateLink) | | VPC 안에서 SageMaker API(작업 생성 등) 호출 | SageMaker API 인터페이스 엔드포인트(PrivateLink) | | 온프레미스에서 인터넷을 거치지 않고 접근 | Direct Connect(또는 VPN) + 인터페이스 엔드포인트 | | 버킷은 우리 VPC 엔드포인트에서 온 요청만 허용 | 버킷 정책에 aws:SourceVpce 조건 |

네트워크 격리: 컨테이너의 외부 통신을 아예 끊는다

EnableNetworkIsolation을 켜면 학습·추론 컨테이너는 S3를 포함한 어떤 곳으로도 외부 호출을 할 수 없고, 컨테이너 안에는 AWS 자격 증명도 제공되지 않습니다. 그래도 학습은 정상적으로 됩니다. S3에서 데이터를 받고 결과를 올리는 일은 SageMaker가 컨테이너 밖에서 실행 역할로 대신 처리하기 때문입니다. 출처를 다 확인할 수 없는 코드나 AWS Marketplace 알고리즘으로부터 데이터 유출을 막을 때 씁니다(Marketplace 리소스는 격리가 필수).

컨테이너 간 트래픽 암호화

여러 인스턴스로 분산 학습을 하면 인스턴스끼리 가중치 같은 정보를 주고받습니다. 이 구간까지 암호화하라는 요구가 있으면 컨테이너 간 트래픽 암호화를 켭니다. 의료 분야에서는 권장 모범 사례지만, 딥러닝 분산 학습에서는 학습 시간과 비용이 늘 수 있습니다.

시험 팁: "학습 데이터가 인터넷을 거치면 안 된다"는 프라이빗 서브넷 + S3 게이트웨이 엔드포인트, "검증되지 않은 학습 코드가 데이터를 밖으로 보내지 못하게"는 네트워크 격리, "분산 학습 노드 사이의 통신도 암호화"는 컨테이너 간 트래픽 암호화입니다.

---

 

2층 암호화: KMS와 전송 중 암호화

저장 데이터: 어디에 키를 지정하나

| 대상 | 설정 위치 | |------|------| | S3의 학습 데이터 · 모델 아티팩트 | 버킷 기본 암호화(SSE-KMS)와 작업의 출력 KMS 키 | | 학습 · 처리 인스턴스의 저장 볼륨 | 작업의 볼륨 KMS 키 | | 엔드포인트 인스턴스의 저장 볼륨 | 엔드포인트 구성의 KMS 키 | | Feature Store | 온라인 스토어와 오프라인 스토어(S3)의 KMS 키 |

SSE-S3는 AWS가 키를 모두 관리하는 가장 간단한 방식이고, SSE-KMS는 KMS 키로 암호화하면서 키 사용 기록이 CloudTrail에 남습니다. 그중 고객 관리형 키(CMK)는 키 정책으로 누가 키를 쓸 수 있는지 직접 정하고, 자동 순환을 켜고, 키를 비활성화해 데이터 접근을 즉시 막을 수 있습니다.

KMS 권한은 두 곳을 모두 본다

고객 관리형 키로 암호화된 데이터를 읽으려면 IAM 정책뿐 아니라 키 정책에서도 허용되어야 합니다. 학습 작업이 "AccessDenied"로 실패하는데 S3 권한은 충분하다면, 실행 역할에 kms:Decrypt(읽기)나 kms:GenerateDataKey(쓰기) 권한이 빠졌는지, 키 정책이 그 역할을 허용하는지 확인합니다.

전송 중 암호화

AWS API와 엔드포인트 호출은 TLS(HTTPS)로 암호화됩니다. 버킷 정책에 aws:SecureTransport가 false인 요청을 거부하는 문을 넣으면 암호화되지 않은 접근을 막을 수 있습니다.

시험 팁: "키 사용 내역을 감사하고, 키 순환과 접근을 직접 통제"는 고객 관리형 KMS 키입니다. "S3 권한은 있는데 암호화된 객체를 못 읽는다"는 KMS 키 정책이나 kms:Decrypt 권한 누락입니다.

---

 

3층 권한: 실행 역할과 최소 권한

사람의 역할과 SageMaker의 역할을 나눈다

SageMaker 실행 역할은 학습 작업이나 엔드포인트가 S3, ECR, CloudWatch에 접근할 때 쓰는 역할입니다. 사람(데이터 과학자, MLOps 엔지니어)의 역할과는 따로 만들고, 작업을 만드는 사람에게는 그 실행 역할을 넘겨줄 수 있는 iam:PassRole 권한만 줍니다.

| 기법 | 하는 일 | 예 | |------|------|------| | 역할 분리 | 사람마다, 서비스마다 필요한 권한만 | 데이터 과학자는 학습만, MLOps는 배포까지 | | 리소스 수준 권한 | 특정 버킷 · 접두사 · 모델에만 허용 | 팀 A는 s3://data/team-a/ 만 | | 조건 키 강제 | 보안 설정 없이는 작업 생성 자체를 거부 | sagemaker:VpcSubnets, sagemaker:VolumeKmsKey, sagemaker:NetworkIsolation | | 버킷 정책 | 버킷 쪽에서 접근 주체와 경로를 제한 | 다른 계정의 특정 역할만, VPC 엔드포인트 경유만 |

조건 키를 쓰면 "VPC 서브넷과 KMS 키를 지정하지 않은 학습 작업은 아예 만들 수 없게" 하는 식으로 보안 설정을 강제할 수 있습니다. 여러 계정에 같은 규칙을 걸려면 AWS Organizations의 서비스 제어 정책(SCP)을 씁니다.

페르소나별 역할을 만들어 주던 SageMaker Role Manager는 현재 신규 고객을 받지 않습니다. AWS는 IAM 기본 도구, IAM Identity Center, CloudFormation · CDK 같은 코드형 인프라 조합을 대안으로 안내합니다.

시험 팁: "데이터 과학자가 보안 설정 없이 학습 작업을 만드는 것을 막아야 한다"는 IAM 정책의 SageMaker 조건 키입니다.

---

 

4층 감사: CloudTrail, CloudWatch, AWS Config

| 도구 | 답하는 질문 | ML 보안에서의 쓰임 | |------|------|------| | CloudTrail | 누가 언제 어떤 API를 호출했나? | 엔드포인트 설정 변경, 모델 삭제, 키 사용 추적 | | CloudWatch Logs | 컨테이너 안에서 무슨 일이 있었나? | 학습 · 추론 로그, 오류 원인 | | AWS Config | 지금 설정이 규칙을 지키고 있나? | 엔드포인트 구성 KMS 키 지정 여부, 노트북 직접 인터넷 접근 여부 같은 관리형 규칙 |

CloudTrail은 관리 이벤트를 기본으로 90일 동안 이벤트 기록에 보관합니다. 더 오래 보관하려면 추적(trail)을 만들어 S3로 보내고, 변조를 막아야 하면 S3 객체 잠금과 로그 파일 무결성 검증을 더합니다. 여기서 시험 함정이 하나 있습니다. InvokeEndpoint 같은 추론 호출은 데이터 이벤트라 기본으로 기록되지 않습니다. 추론 호출까지 감사해야 하면 데이터 이벤트 기록을 따로 켜야 하고 추가 요금이 붙으며, 요청 본문(입력 데이터)은 기록되지 않습니다.

시험 팁: "누가 엔드포인트 구성을 바꿨는지"는 CloudTrail, "규칙을 어긴 SageMaker 리소스를 자동으로 찾기"는 AWS Config, "감사 로그를 수정·삭제할 수 없게"는 S3 객체 잠금입니다.

---

 

민감 데이터 다루기: 찾고, 가리고, 지역을 지킨다

| 도구 | 하는 일 | 대상 | |------|------|------| | Amazon Macie | S3 버킷의 개인정보 같은 민감 데이터를 자동으로 발견 · 분류 | S3 객체 | | Comprehend PII | 텍스트 속 개인정보 탐지와 마스킹 사본 생성 | 영어 · 스페인어 텍스트 | | AWS Glue 민감 데이터 탐지 | ETL 중 개인정보 열을 찾아 마스킹하거나 해시 | 데이터 파이프라인 | | Redshift 동적 데이터 마스킹 | 조회하는 사용자 역할에 따라 결과를 가림 | 데이터 웨어하우스 | | Lake Formation | 열 · 행 단위로 접근 권한 제어 | 데이터 레이크 테이블 |

익명화는 이름과 주민번호 같은 직접 식별자를 지우거나, 해시·토큰으로 바꾸거나, 나이를 연령대로 묶는(범주화) 방식으로 합니다. 데이터 레지던시 요구(특정 국가 밖으로 데이터가 나가면 안 됨)는 S3 버킷과 SageMaker 리소스를 해당 리전에만 두고, 리전 간 복제를 쓰지 않는 것으로 지킵니다.

시험 팁: "수천 개 버킷 중 개인정보가 든 객체가 어디 있는지 모른다"는 Macie입니다. "분석가 역할에는 카드 번호를 가린 결과만 보여 준다"는 Redshift 동적 데이터 마스킹입니다.

---

 

CI/CD와 비밀 관리

ML 파이프라인도 소프트웨어 파이프라인과 같은 보안 원칙을 따릅니다.

비밀번호와 API 키: 코드나 환경 변수에 하드코딩하지 않고 AWS Secrets Manager에 저장, 자동 교체(rotation) 사용 컨테이너 이미지: Amazon ECR 이미지 스캔으로 취약점 확인, 태그 변경 불가(immutable) 설정, 수명 주기 정책으로 오래된 이미지 정리 패키지: AWS CodeArtifact로 승인된 패키지만 쓰도록 중앙 관리 빌드 환경: CodeBuild 프로젝트를 VPC 안에서 실행하고, 파이프라인 단계마다 필요한 권한만 가진 역할 사용

시험 팁: "데이터베이스 비밀번호를 정기적으로 자동 교체"는 Secrets Manager입니다. "외부 공개 저장소의 검증되지 않은 패키지 사용을 막는다"는 CodeArtifact입니다.

---

 

HIPAA 시나리오 조립하기

블로그 목록으로 돌아가기