
마이크로소프트? / 김대우 이사
SaaS 보안의 중요성
소프트웨어 산업이 클라우드 기반으로 급속히 전환되면서 SaaS(Software as a Service) 모델은 현대 비즈니스의 핵심 요소로 자리 잡았습니다. 그러나 SaaS 비즈니스의 확장은 동시에 다양한 보안 위협도 증가시키고 있습니다. 이러한 변화로 인해 새로운 보안 전략이 필요하며, SaaS 개발사는 이제 고객 데이터 보호와 서비스 안정성 확보를 위한 포괄적인 보안 전략을 수립해야 합니다. 특히 최근 증가하는 사이버 위협과 데이터 유출 사고는 SaaS 보안의 중요성을 더욱 부각시키고 있습니다.
SaaS의 특성상 다수의 고객 데이터가 동일한 클라우드 인프라에 저장되고 처리되는데, 이는 데이터 유출이나 무단 접근 시 대규모 피해로 이어질 수 있습니다.
또한, 클라우드 환경 특성상 전통적인 온프레미스 솔루션과 다른 보안 접근 방식이 요구됩니다. 이 기고문에서는 SaaS 개발사가 알아야 할 핵심 보안 요소들을 살펴보고, 실제 사례와 코드 예제를 통해 효과적인 보안 구현 방법을 제시합니다.
1. SaaS 보안의 기본 원칙
1.1 공동 책임 모델 이해
SaaS 환경에서 보안은 서비스 제공자와 고객 간의 공동 책임입니다. SaaS 제공업체는 인프라 및 환경 보안을 책임지는 반면, 고객은 조직 내에서의 액세스 관리, 데이터 사용, 개인 정보 보호 및 직원 교육을 담당해야 합니다. 이러한 책임 경계를 명확히 이해하고 문서화하는 것이 SaaS 보안의 첫 단계입니다.
1.2 최소 권한 원칙 적용
SaaS 애플리케이션 개발 시 최소 권한 원칙(PoLP - Principle of Least Privilege)을 철저히 적용해야 합니다. 최소 권한 원칙은 개발 시 시스템 구성 요소가 필요한 최소한의 권한만 가지도록 하는 것을 의미합니다. SaaS 앱 개발 시 고려할 내용을 마이크로소프트에서도 가이드하고 있습니다.
추가로, 미국내 최대 건축/원예 자재 대형 쇼핑몰인 홈디포에서 발생한 최소 권한 원칙 관련 보안 사고 케이스도 있습니다. - Home Depot Breach Expands, Privilege Escalation Flaw to Blame
1.3 심층 방어 전략 구현
여러 보안 계층을 구축하는 심층 방어(Defense in Depth) 전략을 구현해야 합니다. 이는 인증, 권한 부여, 암호화, 네트워크 보안, 모니터링 등 다양한 보안 메커니즘을 조합하여 보안 위협에 대응하는 방식입니다. 아래 이미지와 같이, 만약 하나의 보안 계층에 문제가 발생해도
다른 계층이 보호 기능을 제공해 피해를 최소화할 수 있습니다.
이미지: 위키피디아
2. 인증 및 권한 관리
2.1 강력한 인증 메커니즘 구현
SaaS 애플리케이션에서 가장 중요한 보안 요소 중 하나는, 강력한 인증 메커니즘입니다. 다중 인증(MFA-Multi-Factor Authentication)을 기본으로 제공하고, 비밀번호 정책을 강화하여 무단 액세스를 방지해야 합니다. 또한 OAuth, SAML과 같은 표준 인증 프로토콜을 사용하여 안전한 인증 환경을 구축해야 합니다.
예를 들어, 아래 코드는 Python을 이용해 OAuth 2.0 토큰을 가져오는 클라이언트 코드입니다:
| # 참고: https://stackoverflow.com/questions/36719540/how-can-i-get-an-oauth2-access-token-using-python import requestsdef get_access_token(url, client_id, client_secret): response = requests.post( url, data={"grant_type": "client_credentials"}, auth=(client_id, client_secret), ) return response.json()["access_token"] |
get_access_token("https://api.example.com/access_token", "abcde", "12345")
2.2 ID 및 액세스 관리(IAM)
ID 및 액세스 관리(IAM-Identity and access management)는 SaaS 보안의 핵심입니다. IAM은 SaaS 애플리케이션 내에서 누가 무엇에 액세스 할 수 있는지 결정하는 기술 프레임워크입니다. 적합한 사용자에게 지정된 리소스에 대한 특정 액세스 권한을 제공하는 동시에 다른 모든 사용자의 액세스를 거부/제한하는 시스템입니다. IAM 구현 시 다음 사항을 고려해야 합니다.
- 중앙 집중식 IAM 시스템을 구축해 모든 SaaS 애플리케이션에 대한 액세스를 한 곳에서 관리합니다.
- 역할 기반 액세스 제어(RBAC-Role Based Access Control)를 적용해 역할에 따라 접근 권한을 할당합니다.
- ID 페데레이션(ID Federation, 아이디 연동)을 지원해 사용자가 동일한 ID로 여러 SaaS 애플리케이션에 로그인할 수 있도록 구성 가능합니다.
- 지속적으로 모니터링과 감사를 진행해, 사용자 활동을 추적하고 이상 징후를 탐지합니다.
IAM(ID 및 액세스 관리)이란? - Microsoft
2.3 JWT 토큰 보안
JWT(JSON Web Token)는 SaaS 애플리케이션에서 널리 사용되는 인증 메커니즘이지만, 안전하게 구현하지 않으면 보안 위험을 초래할 수도 있습니다. 아래는 JWT를 이용해 다른 Restful API에 인증을 요청하는 Python 클라이언트 코드 예제입니다.
| import requests # Your JWT token (usually retrieved from login/auth flow) jwt_token = "YOUR_JWT_HERE" # Target API endpoint url = "https://api.example.com/protected/resource" # Set the Authorization header with the Bearer token headers = { "Authorization": f"Bearer {jwt_token}", "Content-Type": "application/json" } # Make the GET request response = requests.get(url, headers=headers) # Handle the response if response.status_code == 200: data = response.json() print("Success! Data returned:") print(data) else: print(f"Request failed with status code {response.status_code}") print(response.text) |
참고링크: How to handle JWT in Python
이러한 토큰 바인딩 기법은 토큰이 탈취되더라도 공격자가 다른 환경에서 사용하는 것을 방지할 수 있는 장점이 있습니다.
3. 데이터 보안 및 암호화
3.1 데이터 암호화 구현
SaaS 애플리케이션을 개발할 때 중요 저장 데이터(Data at Rest)와 전송 중인 데이터(Data in Transit)에 대한 암호화가 필요합니다. 저장 데이터는 AES-256과 같은 강력한 암호화 알고리즘을 사용하여 보호해야 하며, 전송 중인 데이터는 SSL/TLS을 통해 암호화해야 합니다.
다음은 Python PyCryptodome AES 암호화 예제 코드입니다.
| from Crypto.Cipher import AES from Crypto.Hash import HMAC, SHA256 from Crypto.Random import get_random_bytesdata = 'secret data to transmit'.encode() |
aes_key = get_random_bytes(16)
hmac_key = get_random_bytes(16)
cipher = AES.new(aes_key, AES.MODE_CTR)
ciphertext = cipher.encrypt(data)
hmac = HMAC.new(hmac_key, digestmod=SHA256)
tag = hmac.update(cipher.nonce + ciphertext).digest()
with open("encrypted.bin", "wb") as f:
f.write(tag)
f.write(cipher.nonce)
f.write(ciphertext)
# Share securely aes_key and hmac_key with the receiver
# encrypted.bin can be sent over an unsecure channel
3.2 안전한 키 관리
암호화 키가 노출되면 암호화된 데이터 전체가 위험할 수 있습니다, 키 관리 모범 사례를 참고해 관리해야 합니다.
- 키 분리 및 이중 제어로 중요 기능에 사용되는 키를 2인 이상이 분할해 관리합니다.
- 중요한 비밀 키는 암호화해 저장합니다.
- 잠재적 침해를 방지하기 위해 암호화 키를 주기적으로 갱신합니다.
참고링크: Best practices for protecting secrets - Microsoft
3.3 안전한 비밀번호 저장
사용자 비밀번호는 절대 평문으로 저장해서는 안 되며, 단방향 해시 함수를 사용해 복호화 불가능한 형태로 데이터베이스 등에 저장해야 합니다. SHA-256과 같은 암호화 해시 알고리즘을 사용하고, 솔트(salt)를 추가하여 레인보우 테이블 공격을 방지해야 합니다. 다음은 Python에서 SHA256 hash를 적용하는 예제입니다.
| import hashlib hashlib.sha256(b"Nobody inspects the spammish repetition").hexdigest()결과-------------------------- '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406' |
참고링크: https://docs.python.org/3/library/hashlib.html
4. API 보안
4.1 API 인증 및 권한 부여
SaaS 애플리케이션의 API는 주요 공격 대상이 될 수 있으므로 강력한 인증 및 권한 부여 메커니즘을 구현해야 합니다. OAuth 2.0, API 키, JWT 등을 사용하여 API 호출을 인증하고, 역할 기반 액세스 제어(RBAC)를 적용해 권한을 관리해야 합니다.

이미지: What is Azure role-based access control (Azure RBAC)?
4.2 API 키 관리
대표적인 PAM(Privileged Access Management) SaaS 보안 기업 비욘드 트러스트에서 발생한 최악의 API 키 탈취 사태에서처럼, API 관리의 중요성은 이루 말할 필요가 없을 정도입니다.
SaaS 기업 - 비욘드트러스트, 원격 지원 SaaS 보안 침해 당해… API 키 관리 주의 - 데일리시큐
API 키는 안전하게 관리되어야 하며 다음 방안을 적용 가능합니다.
API 키 주기적 교체(키 순환)
주기적으로 새로운 API 키를 CSP에서 생성하고, 새로운 API 키를 사용하도록 SaaS를 업데이트하며, 이전 API 키를 삭제합니다.
API 요청 제한 설정
API 키를 요청할 수 있는 서비스를 제한합니다. 예를 들어, 특정 IP 주소, 특정 OS의 특정 앱으로 제한하는 설정을 추가합니다. 이 제한 설정으로 부적절한 키 발급이나 요청을 최소화 가능합니다.
키 사용 모니터링 및 감사
CSP에서 제공하는 API 사용량과 사용 내역을 모니터링하면서 액세스를 제어하고 감사, 추적을 사용해 API키 사용처를 모니터링합니다. 또한, 운영환경(Production)에서 사용하는 API 키를 개발 과정에서 사용하지 않고, 분리해 사용하며, API 키를 개별로 팀이나 개인에게 제공하면 감사를 원활하게 수행 가능합니다.
참고링크: API 키 관리 권장사항 - GCP
4.3 입력 검증 및 출력 인코딩
모든 API를 통한 입력은 검증되어야 하며, 사용자에게 전달되는 출력도 검증되어야 합니다. 사용자의 입력으로 발생하는 SQL 인젝션(Injection), XSS(Cross-Site Scripting), CSRF(Cross-Site Request Forgery) 등의 공격을 방지하기 위해 입력 검증 및 출력 인코딩은 필수적입니다.
SQL 인젝션 공격 입력은 이런 패턴입니다.
| ... string SQL string param ... SQL = "SELECT * FROM TABLE WHERE Col1 = '" + param + "'" DBobject.Run(SQL) ... |
이런 애플리케이션에서 이렇게 파라미터가 입력되면,
| ... string SQL string param? # "dummy'; SELECT * FROM member_table -- " ... SQL = "SELECT * FROM TABLE WHERE Col1 = '" + param + "'" DBobject.Run(SQL) ... |
아래처럼 SQL 구문이 변조되어, 데이터가 유출될 수 있습니다.
| SELECT * FROM TABLE WHERE Col1 = 'dummy'; SELECT * FROM member_table -- |
방어하는 방법 등은 제가 예전에 작성한 내용이 있으니 아래 링크 참고하세요.
참고링크: 저장 프로시저 - 동적 SQL(Dynamic SQL)과 SQL 주입(Injection) 공격 - SQLer.com
5. 보안 모니터링 및 이상 탐지
5.1 로깅 및 모니터링
SaaS 애플리케이션에서 로깅 및 모니터링 시스템을 구축하고, 보안 이벤트를 실시간으로 추적해야 합니다. 중요한 애플리케이션, 보안 및 비즈니스 이벤트를 로깅하고, 이를 저장소에 안전하게 보관해야 합니다. 추가적으로, 비밀번호나 개인정보 같은 민감한 정보는 로그에 기록하지 않도록 주의해야 합니다.

이미지: Microsoft Azure Monitor - Microsoft
5.2 이상 탐지 및 대응
머신러닝이나 AI 분석을 활용하여 비정상적인 사용자 활동이나 시스템 동작을 탐지하는 메커니즘을 구현해야 합니다. GenAI 비즈니스는 보안업계에서 빠르게 성장하고 있으며, 특히, LLM을 이용해 대규모 로그 데이터를 분석 가능합니다. 예를 들어, 자연어로 쿼리해 인사이트를 받을 수 있고, 보안 취약점에 대한 가이드나 해결 방안을 얻을 수도 있습니다.

참고링크: Unleashing the Power of Copilot: Security Investigations from Defender XDR to Standalone Copilot
우측에서 보는 것처럼, 보안 모니터링 도구와 통합된 LLM 서비스가 인사이트를 도출하고 가이드합니다.
6. 보안 인증 및 규정 준수
6.1 국제 보안 표준 준수
글로벌 SaaS 개발사는 ISO 27001과 같은 국제 보안 표준을 준수하여 정보 보안 관리 체계를 구축해야 합니다. 사실상 업계에서는 글로벌 시장진입을 위해서 개발 시 검토해야 할 사항으로 보고 있습니다. ISO 27001은 정보보호 관리체계에 대한 국제 표준 인증으로, 조직의 정보 보안 확립, 구현, 운용, 모니터링, 검토, 유지하기 위한 시스템 검토를 제공합니다. 개발사는 ISO 27001과 같은 표준을 통해 정보 보안에 대한 법적 요구사항 및 적합성을 높일 수 있습니다.
6.2 클라우드 서비스 보안 인증
국내에서는 클라우드 서비스 보안 인증제도(이하 CSAP)를 KISA(한국인터넷진흥원)가 주관하고 있으며 SaaS 서비스의 보안 수준을 검증받을 수 있습니다. CSAP는 국가·공공기관, 교육기관에게 안전성 및 신뢰성이 검증된 민간 클라우드 서비스를 공급하고 국내 이용자에게 신뢰할 수 있는 안전한 클라우드 서비스를 제공하기 위한 목적으로 시행되었습니다. 특히, SaaS 전환 지원센터에서 관련해 SaaS 개발사분들께 도움드리고 있으니, 많은 도움 되시길 바랍니다.
KISA - 클라우드서비스(SaaS) 보안인증기준 해설서
6.3 정기적인 보안 감사
SaaS 개발사는 정기적인 보안 감사를 통해 보안 통제의 효과성을 평가하고 개선해야 합니다. 보안 감사 항목으로는 로그 관리, 모든 운영 서비스에 대한 모니터링, 보안 관련 이벤트 및 시스템 이벤트와 개인정보처리시스템에 접속한 기록 등이 정기적인 보안 감사 항목입니다. 관련 내용은 KISA CSAP 보안 인증기준 해설서에서 참고하실 수 있습니다.
7. 보안 사고 대응 및 복구
7.1 보안 사고 대응 계획

이미지: KISA CSAP 침해사고 대응 절차
SaaS 개발사는 보안 사고 발생 시 신속하고 효과적으로 대응할 수 있는 계획을 수립해야 합니다. 이 계획에는 다음과 같은 요소가 필요합니다.
- 사고 발생 시 효과적으로 대응하기 위해 각자의 역할과 책임을 명확하게 정해두어야 합니다.
- 쉽게 사고를 보고할 수 있도록 내부 및 외부 고객용 채널을 제공해 이를 통해 신속하게 사고를 접수하는 환경을 마련합니다.
- 발생한 사고는 위험도와 비즈니스에 미치는 영향에 따라 분류하고, 심각도에 따라 대응 방안을 세분화하여 적용합니다.
- 사고 유형에 맞춘 대응 절차를 미리 문서로 정리하고, 장애 발생 시 절차에 따라 신속히 대처해야 합니다.
- 사고 발생 사실과 진행 상황을 사용자와 이해관계자에게 차질 없이 전달할 수 있도록 사전에 커뮤니케이션 채널을 마련해 두어야 합니다.
7.2 비즈니스 연속성 및 재해 복구
SaaS 개발사는 서비스 중단을 최소화하고 빠르게 복구할 수 있는 비즈니스 연속성(Business Continuity Plan) 및 재해 복구 계획(Disaster Recovery Plan)을 수립해야 합니다. 이 계획은 다음과 같은 요소를 포함해야 합니다.
- 비즈니스 연속성을 위해서는 SaaS 서비스에 필수적인 시스템과 데이터를 식별하는 과정이 필요합니다.
- 각 SaaS 애플리케이션의 특성을 고려해 장애 발생 시 허용 가능한 복구 시간(RTO)과 복구 지점 목표(RPO)를 명확하게 계획에 정의해야 합니다.
- 데이터 보호를 위해 백업 정책과 복구 절차를 세부적으로 문서화합니다.
- 실제 장애 상황에 대비해 대체 시스템이나 사이트를 미리 준비하고 안내 자료를 정리해야 합니다.
- 끝으로, 정기적인 장애 복구 절차 훈련을 실시해 장애 상황에 대비해야 합니다.
참고링크: What are business continuity, high availability, and disaster recovery? - Microsoft
Business continuity and disaster recovery - Microsoft
8. 물리적 보안
8.1 데이터 센터 보안
SaaS 개발사를 위한 내용이라기보다는, CSP 보안에 대한 내용입니다. 이런 물리적 보안이 CSP에서 진행된다 정도만 보셔도 충분합니다. - SaaS 서비스를 호스팅 하는 데이터 센터는 아래 내용을 참고해 물리적 보안 통제가 적용되어야 합니다.
- 물리적인 접근을 제한하고, 적합한 업무 책임이 있는 사람에게만 접근 권한을 부여합니다.
- 주변 환경을 통제해 자연재해 - 화재, 홍수, 온도 변화 등으로부터 장비를 보호해야 합니다.
- 감시 시스템으로, CCTV 및 침입 탐지 시스템 설치합니다.
- 방문자 관리 시스템을 구축해, 방문자 등록 및 에스코트 정책을 수립해야 합니다.
참고링크: Azure facilities, premises, and physical security - Microsoft
8.2 장비 및 미디어 보안
SaaS 개발사가 직접 서버를 관리한다면, SaaS 서비스를 제공하는 물리적 장비 및 미디어는 통제하에 보호되어야 합니다.
- 장비는 물리적으로 보안이 갖춰진 환경에 배치되어야 합니다.
- 전원 공급 장치나 통신 케이블 등, 장비를 지원하는 모든 부가 장치도 안전하게 보호되어야 합니다.
- 장비의 정상적 운영을 위해 정기적으로 유지보수를 실시하고, 필요시 보안 업데이트도 진행합니다.
- 민감한 정보가 포함된 저장 매체는 사용 중에는 안전하게 관리하고, 사용이 끝난 후에는 적절한 절차를 거쳐 안전하게 폐기해야 합니다.
참고자료: ISO 27001 ? Physical Security Perimeters
9. 보안 위협 사례 대응 방안
SaaS 보안 위협에 효과적으로 대응하기 위한 전략은 다음과 같습니다:
- 직원과 사용자에게 보안 위협과 모범 사례에 대해 지속적인 교육을 실시하고, 보안 인식을 높여야 합니다.
- 개발 및 운영 시스템에서 정기적으로 보안 테스트를 진행하여 시스템의 취약점을 찾아내고, 발견된 취약점은 신속히 해결해야 합니다.
- 알려진 취약점으로 인한 위험을 줄이기 위해, 반드시 보안 패치를 빠르게 적용하는 체계를 갖춰야 합니다.
- 운영하면서 실시간으로 이상 징후를 모니터링하고 이를 감지할 수 있는 탐지 시스템을 구축해야 합니다.
- 보안 사고가 발생했을 때는 신속하고 효과적으로 대응할 수 있는 사고 대응 절차를 미리 마련하고 반복적으로 훈련해야 합니다.
SaaS 보안의 미래
SaaS 보안은 빠르게 발전하는 분야이며, SaaS 개발사는 새로운 위협에 대응해 보안 전략을 지속적으로 마련해야 합니다. AI를 활용한 대규모 로그 분석 및 위협 탐지, 제로 트러스트 보안 모델, 클라우드 네이티브 보안(Cloud Native Security) 등에 대한 확인이 필요한 시기입니다.
이제 SaaS 애플리케이션 보안은 규정 준수의 문제가 아닌 비즈니스 존속에 필요한 핵심 가치입니다. 강력하고 안전한 보안은 고객의 신뢰를 얻을 수 있으며, 데이터 침해로 인한 비용을 절감하며, 경쟁 우위를 얻을 수 있습니다. 즉, SaaS 제품 개발 초기 단계부터 핵심 요소로 고려되어야 합니다.
참 고 문 헌
- KISA - 클라우드서비스(SaaS) 보안인증기준 해설서
- 최소 권한의 원칙(Principle of Least Privilege) - Wikipedia
- 마이크로소프트 - 최소 권한 원칙 가이드
- Home Depot Breach Expands, Privilege Escalation Flaw to Blame
- 심층 방어(Defense in Depth) 전략
- IAM(ID 및 액세스 관리)이란? - Microsoft
- How to handle JWT in Python
- PyCryptodome AES 암호화 예제 코드
- Best practices for protecting secrets - Microsoft
- https://docs.python.org/3/library/hashlib.html
- What is Azure role-based access control (Azure RBAC)?
- SaaS 기업 - 비욘드트러스트, 원격 지원 SaaS 보안 침해 당해...API 키 관리 주의 - 데일리시큐
- API 키 관리 권장사항 - GCP
- XSS(Cross-Site Scripting)
- CSRF(Cross-Site Request Forgery)
- 저장 프로시저 - 동적 SQL(Dynamic SQL)과 SQL 주입(Injection) 공격 - SQLer.com
- Microsoft Azure Monitor - Microsoft
- What are business continuity, high availability, and disaster recovery? - Microsoft
- Business continuity and disaster recovery - Microsoft
- Azure facilities, premises, and physical security - Microsoft
저작권 정책
SaaS 전환지원센터의 저작물인 『SaaS 개발사를 위한 보안 체크리스트: 9가지 핵심 검토사항』은 SaaS 전환지원센터에서 마이크로소프트 김대우 이사에게 집필 자문을 받아 발행한 전문정보 브리프로, SaaS 전환지원센터의 저작권정책에 따라 이용할 수 있습니다.
다만 사진, 이미지, 인용자료 등 제3자에게 저작권이 있는 경우 원저작권자가 정한 바에 따릅니다.
