데이터 API 작성기는 REST 및 GraphQL 엔드포인트를 통해 데이터를 노출합니다. API를 보호하려면 인증 (누가 호출하는가?), 권한 부여 (수행할 수 있는 작업) 및 전송 보안 (연결이 보호되나요?)의 세 가지 핵심 영역에 주의해야 합니다.
보안의 세 가지 핵심 요소
| 기둥 | 답변하는 질문 | 주요 개념 |
|---|---|---|
| 인증 | 호출자는 누구인가요? | ID 공급자에서 토큰 유효성 검사 |
| 승인 | 그들은 무엇을 할 수 있는가? | 엔터티에 대한 역할 기반 권한 |
| 수송 | 연결이 안전한가요? | 모든 트래픽에 대한 TLS 암호화 |
인증 공급자 선택
Data API Builder는 여러 인증 공급자를 지원합니다. 배포 시나리오와 일치하는 항목을 선택합니다.
| Provider | 사용 사례 | Guide |
|---|---|---|
Microsoft Entra ID (EntraID/AzureAD) |
Microsoft ID를 사용하는 프로덕션 앱 | Entra 인증 구성 |
| 사용자 지정 JWT | 타사 IDP(Okta, Auth0, Keycloak) | 사용자 지정 JWT 인증 구성 |
| App Service | Azure App Service EasyAuth(플랫폼 헤더) 뒤에서 실행되는 앱 | App Service 인증 구성 |
| 시뮬레이터 | 로컬 개발 및 테스트 | 시뮬레이터 인증 구성 |
| Static Web Apps | SWA 인증 헤더가 앞에 있는 앱 | App Service 인증 구성 |
팁 (조언)
개발 중에 시뮬레이터 공급자로 시작하여 ID 공급자를 구성하지 않고 권한을 테스트합니다. 배포하기 전에 프로덕션 공급자로 전환합니다.
인증
인증은 호출자의 ID를 확인합니다. 데이터 API 작성기는 JWT 전달자 토큰(, )의 유효성을 검사하거나 플랫폼에서 제공하는 ID 헤더(EntraID/AzureADCustom, AppService)를 신뢰하여 요청을 인증합니다. StaticWebApps
Simulator 는 개발을 위한 외부 유효성 검사를 건너뜁니다.
작동 방식
- JWT 공급자의 경우 클라이언트는 ID 공급자로부터 토큰을 획득합니다.
- 클라이언트가 헤더(JWT 공급자)에
Authorization: Bearer <token>토큰을 보내거나 플랫폼이 ID 헤더를 삽입합니다(EasyAuth/SWA). - 데이터 API 작성기가 토큰 또는 플랫폼 헤더(JWT 공급자의 발급자, 대상 그룹, 서명)의 유효성을 검사합니다.
- DAB는 토큰 또는 ID 헤더에서 사용자의 역할을 추출합니다.
빠른 참조
| Setting | Description |
|---|---|
runtime.host.authentication.provider |
인증 공급자(EntraID/AzureAD,, CustomAppService, ) StaticWebAppsSimulator |
runtime.host.authentication.jwt.audience |
JWT 공급자에 대한 예상 대상 클레임(AppService/StaticWebApps/시뮬레이터에서 사용되지 않음) |
runtime.host.authentication.jwt.issuer |
JWT 공급자에 대한 예상 발급자/권한(AppService/StaticWebApps/시뮬레이터에서 사용되지 않음) |
자세한 구성은 Microsoft Entra ID 인증 구성을 참조하세요.
승인
권한 부여는 인증된(또는 익명) 사용자가 수행할 수 있는 작업을 결정합니다. 데이터 API 작성기에서는 RBAC(역할 기반 액세스 제어)를 사용하여 엔터티 및 작업에 대한 액세스를 제한합니다.
작동 방식
- DAB는 토큰 및 헤더를 기반으로 요청에 역할을 할당합니다.
- DAB는 해당 역할에 대한 엔터티의 권한을 조회합니다.
- 역할에 요청된 작업에 대한 권한이 있는 경우 DAB는 쿼리를 실행합니다.
- 그렇지 않은 경우 DAB는 응답을 반환합니다
403 Forbidden.
시스템 역할 및 사용자 역할
| 역할 유형 | Description |
|---|---|
Anonymous |
인증된 ID가 없을 때 할당됨 |
Authenticated |
요청이 인증되고(JWT가 수락되거나 신뢰할 수 있는 플랫폼 헤더) 특정 사용자 역할이 선택되지 않을 때 할당됨 |
| 사용자 역할 |
roles 클레임(또는 플랫폼 역할)에서 사용자 지정 역할을 헤더 X-MS-API-ROLE를 통해 선택함. |
기본적으로 보안 적용
엔터티에는 기본적으로 권한이 없습니다. 액세스 권한을 명시적으로 부여해야 합니다.
{
"entities": {
"Book": {
"permissions": [
{ "role": "authenticated", "actions": ["read"] }
]
}
}
}
자세한 구성은 권한 부여 및 역할을 참조하세요.
행 수준 및 필드 수준 보안
세분화된 액세스 제어를 사용하여 엔터티 수준 권한 이상으로 이동합니다.
| 특징 | Description | Guide |
|---|---|---|
| 데이터베이스 정책(행 수준 보안) | 정책 식을 클레임 또는 세션 컨텍스트에 따라 행을 필터링하는 쿼리 조건자로 변환 | 행 수준 보안 구현 |
| 필드 수준 보안 | 역할당 특정 열 포함 또는 제외 | 필드 접근 |
전송 및 구성 보안
전송 보안
- 모든 연결에 TLS 사용: 클라이언트와 DAB 간의 트래픽 암호화
- 레거시 TLS 버전 사용 안 함: TLS 1.2 이상만 사용
- HTTPS 엔드포인트 사용: 프로덕션 환경에서 암호화되지 않은 HTTP를 통해 DAB를 노출하지 않음
자세한 내용은 보안 모범 사례를 참조하세요.
구성 보안
-
환경 변수에 비밀 저장: 구성에서 사용
@env('SECRET_NAME') -
Azure Key Vault 사용:
@azure('key-vault-uri')를 사용하여 비밀 참조하다 -
비밀 커밋 안 함:
dab-config.json암호 및 연결 문자열 사용 안 함
{
"data-source": {
"connection-string": "@env('SQL_CONNECTION_STRING')"
}
}
모니터링 및 업데이트
- 액세스 모니터링: Application Insights를 사용하여 요청 추적 및 변칙 검색
- 로그 검토: 실패한 인증 시도 및 권한 거부 확인
- DAB 업데이트 유지: 최신 버전으로 업그레이드하여 보안 패치 적용
빠른 시작 가이드
| 과업 | Guide |
|---|---|
| Microsoft Entra ID 인증 설정 | Entra 인증 구성 |
| Okta 또는 Auth0 사용 | 사용자 지정 JWT 인증 구성 |
| Azure App Service 뒤에서 실행 | App Service 인증 구성 |
| 로컬로 권한 테스트 | 시뮬레이터 인증 구성 |
| 사용자별 행 제한 | 행 수준 보안 구현 |
| 역할 할당 이해 | 권한 부여 및 역할 |