Skip to main content

SAML Assertion 구조 상세

SAML SSO가 동작할 때, IdP는 SAML Assertion 이라는 XML 문서를 생성하여 Databricks(SP, Service Provider)에 전달합니다. 이 Assertion에는 인증 결과와 사용자 속성이 포함됩니다.

SAML Assertion 주요 구성 요소

구성 요소역할설명
IssuerIdP 식별자이 Assertion을 발행한 IdP의 고유 URI
Subject/NameID사용자 식별인증된 사용자의 이메일 주소 (Databricks는 이메일로 사용자 매칭)
Conditions유효 조건Assertion의 유효 시간(NotBefore, NotOnOrAfter), 대상 SP(AudienceRestriction)
AuthnStatement인증 정보인증 시각, 인증 방법(Password, MFA 등), 세션 인덱스
AttributeStatement사용자 속성이름, 이메일, 부서 등 추가 속성 정보
Signature디지털 서명IdP의 X.509 인증서로 서명. Assertion의 무결성과 출처를 검증

SAML Assertion XML 구조 예시

<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                ID="_abc123" IssueInstant="2025-03-31T09:00:00Z">

  <!-- 발행자 (IdP) -->
  <saml:Issuer>https://idp.company.com/saml/metadata</saml:Issuer>

  <!-- 디지털 서명 -->
  <ds:Signature>
    <ds:SignedInfo>...</ds:SignedInfo>
    <ds:SignatureValue>...</ds:SignatureValue>
    <ds:KeyInfo>
      <ds:X509Data>
        <ds:X509Certificate>MIIDpDCCAoy...</ds:X509Certificate>
      </ds:X509Data>
    </ds:KeyInfo>
  </ds:Signature>

  <!-- 인증 대상 사용자 -->
  <saml:Subject>
    <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
      kim.minjun@company.com
    </saml:NameID>
  </saml:Subject>

  <!-- 유효 조건 -->
  <saml:Conditions NotBefore="2025-03-31T08:59:00Z"
                   NotOnOrAfter="2025-03-31T09:10:00Z">
    <saml:AudienceRestriction>
      <saml:Audience>https://accounts.cloud.databricks.com</saml:Audience>
    </saml:AudienceRestriction>
  </saml:Conditions>

  <!-- 사용자 속성 -->
  <saml:AttributeStatement>
    <saml:Attribute Name="email">
      <saml:AttributeValue>kim.minjun@company.com</saml:AttributeValue>
    </saml:Attribute>
    <saml:Attribute Name="firstName">
      <saml:AttributeValue>민준</saml:AttributeValue>
    </saml:Attribute>
    <saml:Attribute Name="lastName">
      <saml:AttributeValue></saml:AttributeValue>
    </saml:Attribute>
  </saml:AttributeStatement>
</saml:Assertion>

SAML 디버깅 시 확인 포인트

확인 항목문제 시 증상해결
NameID 형식”User not found” 오류NameID가 이메일 형식이고, Databricks에 등록된 이메일과 일치하는지 확인
Audience 값”Invalid audience” 오류https://accounts.cloud.databricks.com과 정확히 일치해야 합니다
Conditions 시간”Assertion expired” 또는 “Not yet valid”IdP와 Databricks 서버 간 시간 차이(Clock Skew)를 확인합니다. NTP 동기화 필수
Signature 검증”Signature validation failed”IdP 인증서가 Databricks에 등록된 것과 일치하는지 확인
ACS URL로그인 후 빈 페이지 또는 404Reply URL이 https://accounts.cloud.databricks.com/login/saml인지 확인

OIDC Token Flow 상세

OIDC는 OAuth 2.0 위에 인증 레이어를 추가한 프로토콜로, SAML보다 현대적이고 가벼운 방식입니다.

OIDC Authorization Code Flow (Databricks 사용 방식)

단계방향설명
1사용자 → Databricks (SP)로그인 요청
2Databricks → IdPAuthorization Request
3IdP → 사용자로그인 페이지 표시 (ID/PW + MFA)
4사용자 → IdP인증 정보 입력
5IdP → DatabricksAuthorization Code 전달
6Databricks → IdPCode를 Token으로 교환 (백채널)
7IdP → DatabricksAccess Token + ID Token 발급
8Databricks → 사용자로그인 완료, Workspace 표시

ID Token (JWT) 구조

OIDC에서 반환되는 ID Token은 JWT(JSON Web Token) 형식입니다.
// JWT Header
{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "abc123"
}

// JWT Payload (Claims)
{
  "iss": "https://login.microsoftonline.com/<tenant-id>/v2.0",
  "sub": "AAAAABBBBBcccccc...",
  "aud": "<databricks-client-id>",
  "exp": 1743412800,
  "iat": 1743409200,
  "email": "kim.minjun@company.com",
  "name": "김민준",
  "preferred_username": "kim.minjun@company.com"
}

// JWT Signature (RS256으로 서명)
SAML vs OIDC 토큰 비교SAML AssertionOIDC ID Token (JWT)
포맷XML (수 KB)JSON (수백 바이트)
서명 알고리즘RSA-SHA256 (XML 서명)RS256 (JWT 서명)
전송 크기크다작다
파싱 복잡도XML 파서 필요JSON 파서 (더 간단)
유효 기간 관리Conditions 요소exp/iat 클레임

Conditional Access Policy (조건부 접근)

IdP 측에서 조건부 접근 정책 을 설정하면, 특정 조건에서만 Databricks 접근을 허용할 수 있습니다. 이는 SSO를 넘어선 추가 보안 계층입니다.

주요 조건부 접근 시나리오

조건정책 예시적용 방법
위치 기반사내 네트워크(VPN) 밖에서는 접근 차단Entra ID: Named Locations + Conditional Access Policy
디바이스 상태관리 디바이스(MDM 등록)에서만 접근 허용Intune + Conditional Access. 개인 기기 차단
MFA 강제모든 Databricks 접근에 MFA 필수IdP에서 Databricks 앱에 MFA 정책 적용
위험 수준비정상 로그인 패턴 감지 시 차단Entra ID Identity Protection: Risk-based Conditional Access
시간 기반업무 시간(9AM~6PM)에만 접근 허용IdP의 시간 조건 정책
역할 기반Admin 역할은 MFA + 관리 디바이스 필수, 일반 사용자는 MFA만역할별 차등 정책

Entra ID Conditional Access 설정 예시

정책 이름: "Databricks - MFA + 관리 디바이스 필수"

대상 앱: Databricks SSO (Enterprise Application)
대상 사용자: 모든 사용자
조건:
  - 디바이스 플랫폼: Windows, macOS
  - 위치: 모든 위치 (신뢰할 수 있는 위치 제외 시 더 엄격)
접근 제어:
  - MFA 필수
  - Intune 준수 디바이스 필수
  - 세션: 로그인 빈도 12시간 (12시간마다 재인증)
💡 실무 팁: Conditional Access Policy를 처음 적용할 때는 반드시 “Report-only” 모드 로 시작하세요. 실제 차단 없이 정책의 영향 범위를 확인한 후 Enforcement로 전환합니다. 갑작스러운 정책 적용은 전체 사용자의 Databricks 접근을 차단할 수 있습니다.

SSO 장애 시 Emergency Access 방법

Emergency Access 설계

SSO가 실패하면 전체 사용자가 Databricks에 접근할 수 없게 됩니다. 이를 대비한 Emergency Access 체계가 반드시 필요합니다.
대비 항목설정 방법주의사항
Break-glass 계정Account Admin 2개 이상 계정에 비밀번호 로그인 유지MFA도 IdP 독립적인 방식(TOTP) 사용. 비밀번호는 금고에 보관
비밀번호 로그인 허용Account Console > SSO > “Allow password login”특정 계정만 예외. 전체 허용은 보안 위험
Emergency Access 절차서SSO 장애 시 수행할 단계를 문서화연락 체계, 에스컬레이션 경로 포함
정기 테스트분기 1회 Emergency Access 로그인 테스트계정이 유효한지, 비밀번호가 만료되지 않았는지 확인

Emergency Access 절차

[SSO 장애 감지]
1. 사용자 로그인 실패 보고 확인
2. IdP 상태 페이지(예: status.okta.com) 확인
3. Emergency 여부 판단

[Emergency Access 실행]
1. Break-glass 계정으로 https://accounts.cloud.databricks.com 직접 접속
2. 이메일 + 비밀번호로 로그인 (SSO 우회)
3. Account Console > Settings > SSO에서 상태 확인
4. 필요 시 "Allow password login"을 일시적으로 Enabled 설정
5. 전체 사용자에게 비밀번호 재설정 링크 안내

[복구 후]
1. IdP 정상화 확인
2. SSO 테스트 수행
3. "Allow password login"을 다시 Disabled로 변경
4. 인시던트 보고서 작성

멀티 IdP 구성 패턴

대기업이나 M&A 이후 여러 IdP를 사용해야 하는 경우가 있습니다.

Databricks의 멀티 IdP 제한

수준지원설명
Account SSOIdP 1개만Account Console에서 하나의 IdP만 설정 가능
Workspace SSOWorkspace별 다른 IdP 가능각 Workspace에 별도 SSO를 설정할 수 있습니다 (레거시 방식)

멀티 IdP 대응 전략

전략설명장점단점
IdP 통합하나의 마스터 IdP로 통합가장 깔끔한 구조M&A 후 통합에 시간이 오래 걸림
IdP 페더레이션IdP 간 Trust를 설정하여 하나의 IdP를 프록시로 사용Account SSO 1개로 통합 가능IdP 설정이 복잡
Entra ID B2BAzure AD B2B 초대로 외부 사용자를 자사 테넌트에 추가Entra ID 하나로 관리외부 사용자 경험이 다소 복잡
Workspace별 SSO각 Workspace에 다른 IdP SSO 설정 (레거시)즉시 적용 가능Account 수준 관리 불가, Unity Catalog 그룹 관리 어려움

IdP 페더레이션 예시 (Okta → Azure AD Trust)

회사IdP연동 방식
회사 AOktaSAML 2.0 + SCIM
회사 BEntra IDOIDC + SCIM
💡 M&A 시나리오 권장: 인수된 회사의 IdP를 마스터 IdP에 페더레이션으로 연결하고, Databricks Account SSO는 마스터 IdP 하나만 설정합니다. 시간이 지나 IdP 통합이 완료되면 페더레이션을 해제합니다.

정리

핵심 개념설명
SAML 2.0XML 기반 SSO 프로토콜. 대부분의 IdP에서 지원합니다
OIDCOAuth 2.0 기반 최신 SSO 프로토콜입니다
Account ConsoleSSO 설정은 Account Console에서 수행합니다
SSO 강제테스트 완료 후 비밀번호 로그인을 비활성화합니다
긴급 복구IdP 장애 대비 비밀번호 로그인 가능한 관리자 계정을 유지합니다
SAML AssertionXML 기반의 인증 토큰으로, 사용자 정보와 디지털 서명을 포함합니다
OIDC JWTJSON 기반의 경량 인증 토큰으로, SAML보다 파싱이 간편합니다
Conditional AccessIdP 측에서 위치, 디바이스, MFA 등 조건부 접근을 제어합니다
Emergency AccessBreak-glass 계정으로 SSO 장애 시에도 관리 접근이 가능합니다
멀티 IdPAccount SSO는 1개만 지원하므로 IdP 페더레이션으로 통합합니다

참고 링크