Azure 보안은 AZ-204 시험의 핵심 도메인 중 하나입니다. Microsoft Identity Platform을 통한 앱 등록, MSAL로 토큰 획득, Microsoft Graph API 활용, Managed Identity로 자격 증명 없는 접근, Key Vault로 비밀 관리, App Configuration으로 중앙 설정 관리까지 다루는 범위가 넓습니다.
Microsoft Identity Platform과 앱 등록
앱 등록은 Azure AD(Entra ID)에 애플리케이션을 등록하는 과정입니다. 호텔 체크인을 예로 들겠습니다. 호텔(Azure AD)에 투숙하려면 예약 시스템에 등록해야 합니다. 등록하면 투숙객 ID(클라이언트 ID)가 발급되고, 이 ID로 서비스를 이용할 수 있습니다.
앱 등록 시 핵심 구성 요소를 반드시 이해해야 합니다.
| 구성 요소 | 설명 | 예시 | |---------|------|------| | 클라이언트 ID (Application ID) | 앱을 식별하는 고유 UUID | 550e8400-e29b-41d4-a716-... | | 테넌트 ID (Directory ID) | Azure AD 조직을 식별하는 UUID | 조직마다 다른 UUID | | 리디렉트 URI | 인증 후 사용자를 돌려보낼 URL | https://myapp.com/auth/callback | | 클라이언트 시크릿 | 앱이 사용하는 비밀번호 (만료 기간 있음) | 직접 발급, 안전하게 보관 필요 | | 인증서 | 시크릿 대신 사용하는 더 안전한 방법 | PEM/CER 파일 업로드 |
중요한 구분: 클라이언트 시크릿과 인증서는 둘 다 앱 인증에 사용되지만, 인증서가 더 안전합니다. 시험에서는 "더 안전한 방법"으로 인증서를 선택해야 합니다.
MSAL: 토큰을 쉽게 관리하는 라이브러리
MSAL(Microsoft Authentication Library)은 개발자가 직접 OAuth 2.0/OpenID Connect 프로토콜을 구현하지 않아도 되도록 Microsoft가 제공하는 인증 라이브러리입니다. 택시 앱을 예로 들겠습니다. 목적지까지 직접 길을 찾을 수도 있지만, 택시 앱이 모든 경로와 요금을 알아서 처리해 주는 것과 같습니다. MSAL이 토큰 획득, 갱신, 캐싱을 모두 처리해 줍니다.
주요 기능
토큰 획득: 사용자 로그인(위임 권한) 또는 앱 자체(애플리케이션 권한)로 액세스 토큰 획득 토큰 캐시: 이미 발급된 토큰을 저장해두고 만료 전까지 재사용 (불필요한 로그인 방지) 토큰 갱신: 만료 시 자동으로 리프레시 토큰을 사용해 새 액세스 토큰 발급 다양한 인증 흐름: 웹 앱, 데스크톱 앱, 모바일 앱, 백그라운드 서비스에 맞는 흐름 제공
권한 유형 구분
| 권한 유형 | 설명 | 사용 상황 | |---------|------|---------| | 위임 권한 (Delegated) | 로그인한 사용자를 대신하여 작업 | 사용자가 있는 앱 (웹 앱, 모바일) | | 애플리케이션 권한 (Application) | 사용자 없이 앱 자체가 작업 | 백그라운드 서비스, 데몬 |
시험에서는 "사용자 없이 실행되는 서비스"는 애플리케이션 권한, "사용자를 대신하는 작업"은 위임 권한으로 구분해야 합니다.
Microsoft Graph: Microsoft 365 데이터 통합 API
Microsoft Graph는 Microsoft 365의 모든 데이터(메일, 캘린더, 파일, 사용자 정보 등)에 접근할 수 있는 단일 API 엔드포인트입니다. 예전에는 Exchange, SharePoint, Teams 각각 다른 API를 사용해야 했지만, Microsoft Graph 하나로 모든 데이터에 접근할 수 있게 되었습니다. 쇼핑몰에서 여러 매장을 돌아다니지 않고 통합 안내 데스크 하나에서 모든 정보를 얻는 것과 같습니다.
엔드포인트: https://graph.microsoft.com 버전: v1.0 (안정), beta (미리보기) 인증: MSAL로 획득한 토큰으로 API 호출 주요 리소스: /users, /groups, /me, /messages, /calendar/events, /drive
Microsoft Graph도 위임 권한과 애플리케이션 권한을 모두 지원하며, 호출 전 필요한 권한을 앱 등록에서 사전 등록해야 합니다.
Managed Identity: 자격 증명 없이 Azure 서비스에 접근
코드 안에 접속 비밀번호(연결 문자열, 토큰 등)를 하드코딩하면 보안 사고로 이어질 수 있습니다. Managed Identity는 Azure 리소스(VM, App Service, Azure Functions 등)가 자격 증명 없이 다른 Azure 서비스에 접근할 수 있게 해줍니다. 사원증을 예로 들겠습니다. 직원이 회사 건물에 들어갈 때 별도의 비밀번호를 입력하지 않고 사원증 하나로 모든 문을 통과합니다. 회사(Azure)가 직원의 신원을 보증합니다.
두 가지 유형
| 유형 | 특징 | 라이프사이클 | |------|------|------------| | 시스템 할당 (System-assigned) | 리소스 생성 시 자동 생성, 리소스에 종속 | 리소스 삭제 시 함께 삭제 | | 사용자 할당 (User-assigned) | 별도 생성 후 여러 리소스에 할당 가능 | 리소스와 독립적으로 관리 |
시스템 할당은 단일 리소스 전용, 사용자 할당은 여러 리소스가 같은 ID를 공유할 때 적합합니다.
Managed Identity를 사용하면 코드에서 자격 증명을 완전히 제거할 수 있습니다. DefaultAzureCredential을 사용하면 개발 환경에서는 개발자 계정으로, 배포 환경에서는 Managed Identity로 자동 전환됩니다.
!System-assigned vs User-assigned Managed Identity
Key Vault: 비밀, 키, 인증서를 안전하게 보관
Azure Key Vault는 연결 문자열, API 키, 비밀번호, 암호화 키, 인증서를 중앙에서 안전하게 관리하는 서비스입니다. 은행 금고를 예로 들겠습니다. 귀중품을 집에 두지 않고 은행 금고에 맡기면, 권한이 있는 사람만 접근할 수 있고 모든 접근이 기록됩니다.
Key Vault가 관리하는 세 가지 객체
Secrets (비밀): 문자열로 된 민감한 정보 (연결 문자열, API 키, 비밀번호) Keys (키): 암호화/복호화에 사용하는 키 (RSA, EC 키) Certificates (인증서): TLS/SSL 인증서 (자동 갱신 지원)
SDK 클라이언트
| 객체 | SDK 클라이언트 | |------|--------------| | Secrets | SecretClient | | Keys | KeyClient | | Certificates | CertificateClient |
각 객체 유형마다 별도의 클라이언트 클래스를 사용하는 것을 시험에서 자주 묻습니다.
Key Vault 참조 (App Service/Azure Functions)
코드를 변경하지 않고 앱 설정(Application Settings)에서 직접 Key Vault의 비밀을 참조할 수 있습니다.
형식: @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mySecret/) Managed Identity로 Key Vault에 접근 권한을 부여해야 작동 비밀 값이 변경되면 앱이 자동으로 새 값을 가져옴
App Configuration: 중앙 설정 관리
Azure App Configuration은 여러 애플리케이션의 설정값을 한 곳에서 관리하는 서비스입니다. 여러 지점을 가진 프랜차이즈를 생각해 보세요. 본사에서 메뉴 가격을 바꾸면 모든 지점에 자동으로 반영됩니다. 각 지점(앱)이 가격표(설정)를 직접 들고 있지 않아도 됩니다.
주요 기능
중앙화: 여러 앱, 여러 환경(개발/스테이징/운영)의 설정을 한 곳에서 관리 동적 설정: 앱을 재시작하지 않고 실시간으로 설정값 변경 가능 기능 플래그 (Feature Flags): 특정 기능을 코드 배포 없이 켜고 끌 수 있음
기능 플래그 (Feature Flags)
기능 플래그는 코드 안에 기능을 구현해 두고, 설정으로 해당 기능을 활성화/비활성화하는 기법입니다. 새 기능을 전체 사용자에게 한 번에 공개하는 대신, 10%의 사용자에게만 먼저 테스트하거나, 특정 지역 사용자에게만 적용하는 A/B 테스트가 가능합니다.
앱 재배포 없이 기능 온/오프 가능 사용자 그룹별 점진적 롤아웃 지원 Key Vault와 통합하여 민감한 설정값도 관리 가능
시험 핵심 정리
"앱을 Azure AD에 등록하면 발급되는 것" -- 클라이언트 ID (Application ID)
"앱 인증에 시크릿보다 더 안전한 방법" -- 인증서 (Certificate)
"OAuth 토큰 획득/갱신/캐싱 라이브러리" -- MSAL
"사용자 없이 백그라운드 서비스가 실행" -- 애플리케이션 권한
"사용자를 대신하여 작업" -- 위임 권한
"Microsoft 365 데이터 통합 엔드포인트" -- Microsoft Graph (https://graph.microsoft.com)
"코드에 자격 증명 없이 Azure 서비스 접근" -- Managed Identity
"여러 리소스가 같은 ID 공유" -- 사용자 할당 Managed Identity
"비밀/키/인증서 저장소, SecretClient 사용" -- Azure Key Vault
"앱 재배포 없이 기능 켜고 끄기" -- 기능 플래그 (App Configuration)