개요
OAuth U2M(User-to-Machine)은 사용자가 브라우저로 로그인하면, 도구(CLI/SDK/IDE)가 사용자를 대신하여 Databricks API를 호출 하는 인증 방식입니다. “대화형(Interactive) 인증”이라고도 부릅니다.왜 OAuth U2M이 필요한가
기존에 개발자들은 PAT(Personal Access Token)를 발급받아 환경변수나 설정 파일에 저장하고 사용했습니다. 이 방식에는 근본적인 문제가 있습니다.
이 테이블이 보여주듯, OAuth U2M은 PAT의 모든 보안 약점을 구조적으로 해결합니다.
동작 원리: PKCE 흐름
OAuth U2M은 Authorization Code Flow with PKCE 를 사용합니다. PKCE(Proof Key for Code Exchange, 발음: “pixie”)는 OAuth 2.0의 보안 확장으로, 원래 모바일 앱처럼 client_secret을 안전하게 저장할 수 없는 환경 을 위해 설계되었습니다.PKCE가 필요한 이유
표준 Authorization Code Flow에서는 인증 서버가 브라우저에authorization_code를 전달하고, 클라이언트가 이 코드를 access_token으로 교환합니다. 문제는 이 과정에서 Authorization Code Interception Attack 이 가능하다는 것입니다.
- 악성 앱이 같은 디바이스에서 redirect URI를 가로챌 수 있음
- 가로챈 authorization_code로 토큰을 탈취할 수 있음
전체 흐름
1
1. CLI/SDK가 PKCE 준비
code_verifier생성 (43~128자 랜덤 문자열)code_challenge= SHA256(code_verifier) → Base64URL 인코딩
2
2. 브라우저 오픈
CLI/SDK가 브라우저를 열어 Databricks 인증서버에 인증 요청을 전송합니다 (
code_challenge + client_id 포함).3
3. 사용자 로그인 + 동의
사용자가 로그인 페이지에서 ID/PW 입력 후 권한에 동의합니다.
4
4. authorization_code 발급
인증서버가 브라우저를 통해
authorization_code를 CLI/SDK에 전달합니다.5
5. 토큰 교환 요청
CLI/SDK가
authorization_code + code_verifier를 인증서버에 전송합니다.6
6. 서버 검증
인증서버가
SHA256(code_verifier) == code_challenge?를 검증합니다.7
7. 토큰 발급
검증 성공 시
access_token + refresh_token이 CLI/SDK에 반환됩니다.8
8. 결과 반환
CLI/SDK가 발급받은 토큰으로 사용자를 대신하여 API를 호출하고 결과를 반환합니다.
핵심 보안 메커니즘
위 흐름에서 보안의 핵심은 step 1-2와 step 7-8 입니다.- CLI가
code_verifier(랜덤 문자열)를 생성하고, 그 SHA256 해시값 (code_challenge)만 인증 서버에 전송 - authorization_code를 토큰으로 교환할 때, CLI가 원본
code_verifier를 전송 - 인증 서버가
SHA256(code_verifier) == code_challenge인지 검증
주의 왜 안전한가: 공격자가 authorization_code를 가로채더라도,code_verifier를 모르면 토큰 교환이 불가능합니다.code_challenge에서code_verifier를 역산하는 것은 SHA256의 단방향성 때문에 사실상 불가능합니다.
On-Behalf-Of 메커니즘
OAuth U2M으로 발급된 토큰은 사용자의 ID와 권한 을 담고 있습니다. CLI/SDK가 이 토큰으로 API를 호출하면:- Databricks는 요청을 사용자 본인의 요청 으로 처리
- Unity Catalog 권한, 워크스페이스 ACL 등 사용자에게 부여된 권한 만 적용
- 감사 로그에 사용자 이름 으로 기록
지원 도구
다음 도구들이 OAuth U2M을 기본 지원합니다.설정 방법
1. Databricks CLI로 프로파일 생성
가장 일반적인 설정 방법은 Databricks CLI의auth login 명령입니다.
- 브라우저를 열어 Databricks 로그인 페이지로 이동
- 사용자가 로그인하면 OAuth 토큰을 안전하게 저장
~/.databrickscfg파일에 프로파일 정보 기록
참고 토큰은 어디에 저장되는가: OAuth 토큰은~/.databrickscfg에 저장되지 않습니다. 토큰은 OS의 보안 자격 증명 저장소(macOS Keychain, Windows Credential Manager, Linux keyring)에 암호화되어 저장됩니다..databrickscfg에는 호스트 URL과 프로파일 이름만 기록됩니다.
2. 환경변수 방식
프로파일 파일 대신 환경변수로도 설정할 수 있습니다.databricks auth login을 실행하면, 해당 호스트에 대한 OAuth 인증이 시작됩니다.
3. Python SDK 코드 예시
토큰 갱신 메커니즘
OAuth U2M의 가장 큰 장점 중 하나는 토큰 자동 갱신 입니다.동작 방식
- 최초 인증 시
access_token(1시간)과refresh_token을 함께 발급 access_token이 만료되면, SDK/CLI가 자동으로refresh_token을 사용하여 새 토큰 발급- 이 과정은 사용자에게 투명하게 진행됨 (재로그인 불필요)
scope에 offline_access 포함
자동 갱신이 가능하려면 OAuth 인증 요청 시scope에 offline_access가 포함되어야 합니다. Databricks CLI와 SDK는 이를 기본으로 포함하므로, 사용자가 별도로 설정할 필요가 없습니다.
토큰 상태 확인
주의
refresh_token도 만료됩니다: refresh_token의 수명은 Databricks Account 관리자가 설정합니다. 기본값은 비교적 길지만 무한하지 않으므로, 오랜 기간 사용하지 않은 프로파일은 재로그인이 필요할 수 있습니다. databricks auth login --profile <name>으로 갱신하세요.
Unified Client Authentication
Databricks SDK는 Unified Client Authentication 이라는 통합 인증 체계를 제공합니다. 이 체계 덕분에 동일한 설정으로 CLI, Python SDK, Java SDK, Terraform 등 모든 도구에서 인증할 수 있습니다. 인증 우선순위(위에서 아래로):- 직접 구성 — 코드에서
Config(host=..., token=...)등으로 명시 - 환경변수 —
DATABRICKS_HOST,DATABRICKS_TOKEN등 - 프로파일 —
~/.databrickscfg의[DEFAULT]또는 지정 프로파일 - 자동 탐색 — Azure MSI, GCP WIF 등 클라우드 네이티브 인증
.databrickscfg를 설정하면, CLI에서도 Python에서도 Terraform에서도 같은 프로파일로 인증됩니다.
트러블슈팅
한계와 주의사항
- 헤드리스 환경 불가: 브라우저가 없는 서버, Docker 컨테이너, CI/CD 파이프라인에서는 사용할 수 없습니다. 이 경우 OAuth M2M을 사용하세요.
- 자동화에 부적합: 사람의 개입(브라우저 로그인)이 필요하므로, 무인 실행이 필요한 Job이나 파이프라인에는 적합하지 않습니다.
- SSO 의존: 조직이 SAML/OIDC SSO를 사용하는 경우, IdP 장애 시 로그인이 불가능할 수 있습니다.
- 멀티 워크스페이스: 여러 워크스페이스를 사용하는 경우, 각 워크스페이스마다 별도 프로파일을 만들어야 합니다.