연합 인증과 SSO 개요
연합 인증과 SSO 개요
이 주제는 사용자 인증을 위한 연합 환경(federated environment)을 구성하는 구성 요소와 Snowflake가 지원하는 SSO(단일 로그인) 워크플로를 설명해요.
출처: Snowflake 문서
본문
연합 환경이란 무엇인가?
연합 환경에서는 사용자 자격 증명의 독립적 인증을 제공하는 하나 이상의 외부 주체를 사용해 사용자 인증이 사용자 접근과 분리돼요. 그 인증은 하나 이상의 서비스에 전달되어, 사용자가 SSO를 통해 서비스에 접근할 수 있게 돼요. 연합 환경은 다음 구성 요소로 이루어져요.
- 서비스 제공자(SP): Snowflake 연합 환경에서 Snowflake가 SP 역할을 해요.
- ID 공급자(IdP): SP에 다음 서비스를 제공하는 외부의 독립적인 주체예요.
- 사용자 자격 증명과 기타 프로필 정보 생성·유지
- SP에 대한 SSO 접근을 위한 사용자 인증
Snowflake는 SAML 2.0 및 OpenID Connect(OIDC) 보안 통합을 통한 연합 인증을 지원해요. SAML의 경우 Snowflake는 대부분의 SAML 2.0 호환 공급업체를 IdP로 지원해요. 다만 일부 공급업체는 Snowflake에 대한 네이티브 지원을 포함해요(자세한 내용은 아래 참고).
지원되는 ID 공급자
SAML 2.0 ID 공급자
다음 공급업체는 연합 인증과 SSO에 대한 네이티브 Snowflake 지원을 제공해요.
- Okta
- Microsoft Entra ID
Okta와 Entra ID가 제공하는 네이티브 Snowflake 지원에 더해, Snowflake는 다음을 포함한 대부분의 SAML 2.0 호환 공급업체를 IdP로 사용하는 것을 지원해요.
참고(Note): Okta나 Entra ID가 아닌 IdP를 사용하려면 IdP에서 Snowflake용 커스텀 애플리케이션을 정의해야 해요.
Okta, Entra ID, 또는 다른 SAML 2.0 호환 공급업체를 Snowflake의 IdP로 구성하는 방법은 Snowflake용 ID 공급자(IdP) 구성을 참고해요.
OIDC ID 공급자
Snowflake는 관리형 제공자(Google, Microsoft Entra ID) 또는 커스텀 OpenID Connect 호환 ID 공급자(예: Okta, PingFederate, Auth0, Keycloak)와 함께 OIDC 연합 인증을 지원해요. 관리형 제공자의 경우 Snowflake가 OAuth 클라이언트 구성을 관리해요. 커스텀 제공자의 경우 IdP에 애플리케이션을 등록하고 Snowflake에 클라이언트 자격 증명을 제공해요.
OIDC 연합 인증 구성에 대한 자세한 내용은 OpenID Connect(OIDC) 연합 인증 구성을 참고해요.
OIDC vs SAML 비교
연합 인증에 OIDC를 사용할지 SAML을 사용할지 평가한다면 다음 표가 주요 차이점을 요약해요.
| 측면 | OIDC | SAML 2.0 |
|---|---|---|
| 프로토콜 | OAuth 2.0 + OpenID Connect 1.0 | SAML 2.0 |
| 토큰 형식 | JWT(JSON Web Token) | XML assertion |
| 인증 흐름 | PKCE를 사용한 Authorization Code Flow | POST 또는 Redirect 바인딩 |
| 사용자 신원 매핑 | JSON 클레임(email, sub 등) | XML 속성 |
| 통합 유형 | TYPE = OIDC | TYPE = SAML2 |
| 엔드포인트 검색 | .well-known/openid-configuration으로 자동 | 수동 또는 SAML 메타데이터 문서로 |
| 관리형 제공자 | Google, Microsoft | 없음 |
| 자격 증명 유형 | Client ID + Client Secret | X.509 인증서 |
| 기본 구성 | 클라이언트 자격 증명, issuer URL 또는 명시적 OAuth/OIDC 엔드포인트, JWT 클레임 매핑 | X.509 인증서, SAML 메타데이터 또는 수동 ACS/엔티티 ID 교환, XML 속성 매핑 |
| 인증 정책 지원 | AUTHENTICATION_METHODS = ('OIDC') | AUTHENTICATION_METHODS = ('SAML') |
| SSO 후 MFA 강제 | MFA_POLICY=(ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION='ALL') | MFA_POLICY=(ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION='ALL') |
| 웹 인터페이스(브라우저) SSO | 지원 | 지원 |
| authenticator=externalbrowser를 사용한 드라이버 SSO | 미지원(드라이버 OIDC SSO에는 authenticator=OAUTH_AUTHORIZATION_CODE 사용) | 지원 |
| 복제 및 장애 조치 | 장애 조치 그룹으로 지원(SAML2와 동일) | 장애 조치 그룹으로 지원 |
| 클라이언트 리디렉션(커스텀 제공자) | 미지원. 각 계정의 OIDC_REDIRECT_URIS를 IdP에 등록하거나 관리형 제공자 사용 | SAML2_SNOWFLAKE_OTHER_ACS_URLS로 지원 |
여러 ID 공급자 사용
서로 다른 사용자가 서로 다른 ID 공급자를 사용해 인증하도록 Snowflake를 구성할 수 있어요.
SAML IdP의 경우 각 ID 공급자를 구성한 다음 연합 인증에 여러 ID 공급자 사용의 지침을 따라요. OIDC IdP의 경우 OpenID Connect(OIDC) 연합 인증 구성에 설명된 대로 각 IdP 애플리케이션을 등록하고 OIDC 보안 통합을 만든 다음 같은 다중 IdP 지침을 따라요.
참고(Note): 현재 일부 Snowflake 드라이버만 여러 ID 공급자 사용을 지원해요. 이러한 드라이버에는 JDBC, ODBC, Python이 포함돼요.
지원되는 SSO 워크플로
연합 인증은 다음 SSO 워크플로를 지원해요.
- Snowflake 로그인
- Snowflake 로그아웃
- 비활동으로 인한 시스템 타임아웃
각 워크플로의 동작은 해당 작업이 Snowflake 내에서 시작됐는지 IdP에서 시작됐는지에 따라 결정돼요.
로그인 워크플로
사용자가 로그인할 때 시스템 동작은 로그인이 Snowflake를 통해 시작됐는지 IdP를 통해 시작됐는지에 따라 결정돼요.
- Snowflake 시작 로그인(Snowflake-initiated login):
- Snowflake를 통해 로그인하려면:
- 사용자가 Snowflake 웹 인터페이스로 이동해요.
- Snowflake를 통해 로그인하려면:
참고(Note): Snowflake에 URL로 접근하는 사용자가 Snowflake 로그인 페이지를 보지 않고 IdP로 리디렉션되어 인증하도록 구성할 수 있어요. 자세한 내용은 사용자를 ID 공급자로 자동 리디렉션을 참고해요.
- 사용자가 계정에 구성된 IdP(Okta, Entra ID, 또는 커스텀 IdP)로 로그인하도록 선택해요.
- 사용자가 IdP 자격 증명(예: 이메일 주소와 비밀번호)으로 IdP와 인증해요.
- 인증이 성공하면 IdP가 Snowflake에 SAML 응답을 보내 세션을 시작하고 Snowflake 웹 인터페이스를 표시해요.
- IdP 시작 로그인(IdP-initiated login):
- 계정의 IdP를 통해 로그인하려면:
- 사용자가 IdP 사이트/애플리케이션으로 가서 IdP 자격 증명(예: 이메일 주소와 비밀번호)으로 인증해요.
- IdP에서 사용자가 Snowflake 애플리케이션(Okta 또는 Entra ID 사용 시) 또는 IdP에 정의된 커스텀 애플리케이션(다른 IdP 사용 시)을 선택해요.
- IdP가 Snowflake에 SAML 응답을 보내 세션을 시작한 다음 Snowflake 웹 인터페이스를 표시해요.
- 계정의 IdP를 통해 로그인하려면:
로그아웃 워크플로
사용자가 로그아웃할 때 사용 가능한 옵션은 IdP가 전역(global) 로그아웃을 지원하는지 표준(standard) 로그아웃만 지원하는지에 따라 결정돼요.
표준(Standard): 완전히 연결을 끊으려면 사용자가 IdP와 Snowflake 둘 다에서 명시적으로 로그아웃해야 해요. 모든 IdP가 표준 로그아웃을 지원해요.
전역(Global): 사용자가 IdP와 이후 모든 Snowflake 세션을 로그아웃할 수 있게 해요. 전역 로그아웃 지원은 IdP에 따라 달라져요.
추가로 시스템 동작은 로그아웃이 Snowflake를 통해 시작됐는지 IdP를 통해 시작됐는지에 따라 결정돼요.
-
Snowflake 시작 로그아웃: IdP가 지원하는지 여부와 관계없이 Snowflake 내에서는 전역 로그아웃이 지원되지 않아요. 사용자가 Snowflake 세션에서 로그아웃하면 그 세션에서만 로그아웃돼요. 그들의 다른 모든 활성 Snowflake 세션은 계속 열려 있고 IdP 세션도 열려 있어요. 결과적으로 다른 세션에서 계속 작업하거나 IdP를 통해 재인증하지 않고 추가 세션을 시작할 수 있어요.
- 완전히 연결을 끊으려면 사용자가 Snowflake와 IdP 둘 다에서 명시적으로 로그아웃해야 해요.
-
IdP 시작 로그아웃:
- 사용자가 IdP를 통해 로그아웃하면 동작은 IdP가 표준 로그아웃만 지원하는지 전역 로그아웃도 지원하는지에 따라 달라져요.
- Entra ID는 표준과 전역 로그아웃을 둘 다 지원해요. 전역 로그아웃이 활성화되면 Entra ID IdP 로그인 페이지에서 사용자가 접근한 모든 사이트에서 로그아웃하는 옵션을 제공해요. 이 옵션을 선택하면 사용자가 Entra ID와 모든 Snowflake 세션에서 로그아웃돼요. 다시 Snowflake에 접근하려면 Entra ID로 재인증해야 해요.
- Okta는 표준 로그아웃만 지원해요. 사용자가 Okta에서 로그아웃해도 활성 Snowflake 세션은 자동으로 로그아웃되지 않으며 계속 작업할 수 있어요. 하지만 새 Snowflake 세션을 시작하려면 Okta를 통해 다시 인증해야 해요.
- 모든 커스텀 제공자는 표준 로그아웃을 지원하며, 전역 로그아웃 지원은 제공자마다 다르다.
- 사용자가 IdP를 통해 로그아웃하면 동작은 IdP가 표준 로그아웃만 지원하는지 전역 로그아웃도 지원하는지에 따라 달라져요.
참고(Note): 웹 기반 IdP(예: Okta)의 경우 브라우저 탭/창을 닫아도 IdP 세션이 반드시 끝나는 것은 아니에요. 사용자의 IdP 세션이 여전히 활성 상태이면 IdP 세션이 타임아웃될 때까지 Snowflake에 계속 접근할 수 있어요.
타임아웃 워크플로
사용자의 세션이 타임아웃되면 동작은 타임아웃된 것이 Snowflake 세션인지 IdP 세션인지에 따라 결정돼요.
-
Snowflake 타임아웃: 사용자가 SSO로 Snowflake에 로그인하고 비활동으로 인해 Snowflake 세션이 만료되면 Snowflake 웹 인터페이스가 비활성화되고 IdP 인증 프롬프트가 표시돼요.
- 만료된 Snowflake 세션을 계속 사용하려면 사용자가 IdP를 통해 다시 인증해야 해요.
- 사용자는 Cancel 버튼을 선택해 세션을 종료할 수 있어요.
- 사용자는 IdP 사이트/애플리케이션으로 직접 이동해 Snowflake를 다시 실행할 수도 있지만, 이는 새 Snowflake 세션을 시작해요.
-
IdP 타임아웃: 지정된 기간(IdP가 정의) 후 사용자의 IdP 세션이 자동으로 타임아웃되지만, 이는 Snowflake 세션에는 영향을 주지 않아요. 그 시점에 활성 상태인 Snowflake 세션은 계속 열려 있고 재인증이 필요하지 않아요. 하지만 새 Snowflake 세션을 시작하려면 사용자가 IdP에 다시 로그인해야 해요.
개인 연결(Private Connectivity)을 사용한 SSO
Snowflake는 Amazon Web Services(AWS), Microsoft Azure, Google Cloud Platform(GCP)의 Snowflake 계정에 대한 Snowflake 서비스 개인 연결을 사용한 SSO를 지원해요.
현재 어떤 Snowflake 계정에서든 SSO는 한 번에 하나의 계정 URL에서만 작동해요. 공개 계정 URL이거나 AWS, Microsoft Azure, Google Cloud Platform의 개인 연결 서비스와 연결된 URL 중 하나예요.
Snowflake는 조직(organizations)과 함께 SSO 사용을 지원하며, SAML2 보안 통합에서 해당 URL을 사용할 수 있어요. 자세한 내용은 SAML 2.0 연합 인증 구성을 참고해요.
Snowflake 개인 연결을 사용한 SSO를 사용하려면 SSO를 구성하기 전에 개인 연결을 구성해요.
- Snowflake 계정이 AWS 또는 Azure에 있으면 AWS PrivateLink와 Snowflake 및 Azure Private Link와 Snowflake에 나열된 셀프 서비스 지침을 따라요.
- Snowflake 계정이 GCP에 있으면 Snowflake Support에 연락해 Google Cloud Private Service Connect와 Snowflake와 함께 사용할 Snowflake 계정 URL을 제공해야 해요.
올바른 URL을 확인하려면 GCP의 Snowflake 계정에서 SYSTEM$GET_PRIVATELINK_CONFIG 함수를 호출해요.
SSO 구성 복제
Snowflake는 SAML2 보안 통합과 OIDC 보안 통합을 소스 계정에서 대상 계정으로 복제하고 장애 조치/장애 복구를 지원해요.
자세한 내용은 여러 계정 간 보안 통합 및 네트워크 정책 복제를 참고해요.
더 알아보기 (Learn more)
- SAML 2.0 연합 인증 구성 — SAML2 보안 통합
- OIDC 연합 인증 구성 — OIDC 보안 통합
- ID 공급자(IdP) 구성 — IdP 설정