연합 인증 관리/사용
연합 인증 관리/사용
SAML용으로 구성되었거나 OIDC용으로 구성된 연합 인증을 관리하고 사용하는 방법을 설명해요.
출처: Snowflake 문서
본문
참고(Note): 이 주제는 SAML 2.0 연합 인증에 초점을 맞춰요. OpenID Connect(OIDC) 구성, 사용자 매핑, 문제 해결은 OpenID Connect(OIDC) 연합 인증 구성을 참고해요. 이 주제에서 다루는 구성 후 사용자 관리 패턴(예: SSO와 함께 Snowflake 비밀번호 유지)은 달리 명시되지 않는 한 SAML과 OIDC 둘 다에 적용돼요.
연합 인증이 활성화된 사용자 관리
Snowflake 사용자 비밀번호 관리
계정에 연합 인증이 활성화된 경우에도 Snowflake는 Snowflake 사용자 자격 증명(로그인 이름과 비밀번호)을 유지·사용하는 것을 계속 허용해요. 즉:
- 계정·보안 관리자는 여전히 Snowflake에 유지되는 비밀번호로 사용자를 만들 수 있어요.
- 사용자는 여전히 Snowflake 자격 증명으로 Snowflake에 로그인할 수 있어요.
하지만 계정에 연합 인증이 활성화된 경우 Snowflake는 사용자 비밀번호를 Snowflake에 유지하는 것을 권장하지 않아요. 대신 사용자 비밀번호는 IdP에서만 유지해야 해요.
비밀번호가 없는 사용자를 만들거나(또는 기존 사용자를 변경해 비밀번호를 제거하면) 그 사용자에 대한 Snowflake 인증이 사실상 비활성화돼요. Snowflake에 비밀번호가 없으면 사용자는 Snowflake 인증으로 로그인할 수 없고 연합 인증을 사용해야 해요. Snowflake 웹 인터페이스로는 비밀번호가 없는 사용자를 만들거나 기존 사용자에서 비밀번호를 제거할 수 없으며, CREATE USER 또는 ALTER USER를 사용해야 해요.
구체적으로, 모든 비관리자 사용자에 대해 Snowflake 인증을 비활성화할 것을 권장해요.
중요(Important): MUST_CHANGE_PASSWORD 사용자 속성은 연합 인증에는 적용되지 않으며 사용하지 말아야 해요. 특히 사용자에 대해 Snowflake에서 비밀번호를 유지하지 않기로 했다면 이 속성이 해당 사용자에게 FALSE로 설정되어 있는지 확인해요.
또한 Snowflake 비밀번호를 가진 계정 관리자를 하나 이상 유지해야 해요. 이렇게 하면 계정 관리자가 연합 인증을 관리하고 발생하는 문제를 해결하기 위해 항상 Snowflake에 접근할 수 있어요.
사용자 비활성화와 삭제
Snowflake의 계정 또는 보안 관리자로서 사용자를 삭제하거나, 더 일반적으로 비활성화해야 할 수 있어요. Snowflake에서 삭제되거나 비활성화된 사용자는 자신의 Okta 계정에는 계속 로그인할 수 있지만, Snowflake에 연결하려고 시도하면 오류 메시지를 받게 돼요. 로그인할 수 있으려면 사용자를 다시 만들거나 활성화해야 해요.
Snowflake 웹 인터페이스 또는 동등한 SQL 명령을 사용해 사용자를 삭제/생성하고 비활성화/활성화할 수 있어요.
Snowflake에 연결하는 클라이언트 애플리케이션과 SSO 사용
계정용 IdP가 구성되면 Snowflake는 다음 Snowflake 제공 클라이언트와 연결·인증에 SSO 사용을 지원해요.
Snowflake CLI: v3.0.0 이상 SnowSQL: v1.1.43 이상 Python Connector: v1.4.8 이상 JDBC Driver: v3.2.7 이상 ODBC Driver: v2.13.11 이상 .NET Driver: v1.0.13 이상 Node.js Driver: v1.6.0 이상(브라우저 기반 SSO); v1.6.1 이상(Okta를 통한 네이티브 SSO 인증) Go Driver: v1.1.5 이상
Snowflake는 두 가지 인증 방법을 지원해요.
- 브라우저 기반 SSO(Browser-based SSO)
- 프로그래매틱 SSO(Okta 전용)
중요(Important): Snowflake에 연결하는 클라이언트 애플리케이션과 SSO를 사용할 때 사용자는 메시지가 표시되면 로그인 자격 증명을 입력해야 해요. 하지만 보안상의 이유로 이 자격 증명은 클라이언트를 통해 처리되지 않아요. 대신 자격 증명은 인증을 위해 IdP로 전송되고, IdP는 클라이언트가 Snowflake 세션을 시작할 수 있게 하는 유효한 SAML 응답을 다시 보내요.
브라우저 기반 SSO
사용자가 Snowflake 제공 클라이언트의 필요한 버전(또는 그 이상)을 설치했다면 브라우저 기반 SSO를 사용해 Snowflake에 로그인할 수 있어요.
브라우저 기반 SSO 작동 방식
클라이언트 애플리케이션이 브라우저 기반 SSO를 사용하도록 구성되면 애플리케이션은 사용자 인증을 위해 다음 워크플로를 사용해요.
- 애플리케이션이 사용자 운영 체제의 기본 웹 브라우저를 시작하거나 새 브라우저 탭/창을 열어 IdP의 인증 페이지를 표시해요.
- 사용자가 IdP 자격 증명(사용자 이름과 비밀번호)을 입력해요.
- 사용자가 Snowflake에서 MFA(다중 인증)에 등록되어 있으면 MFA 패스코드(다른 기기에서 전송됨)를 입력하거나 인증을 확인(다른 기기에서)하라는 메시지가 표시돼요.
- IdP가 사용자 자격 증명을 인증한 후 브라우저가 성공 메시지를 표시해요. 그런 다음 사용자는 브라우저 탭/창을 닫고(인증 후에는 열어둘 필요가 없음), 애플리케이션으로 돌아가 시작된 Snowflake 세션을 사용할 수 있어요.
브라우저 기반 SSO 사용 요구사항
브라우저 기반 SSO에서는 Snowflake 제공 클라이언트(예: Snowflake JDBC 드라이버)가 사용자의 웹 브라우저를 열 수 있어야 해요. 이 때문에 Snowflake 제공 클라이언트와 그것을 사용하는 클라이언트 애플리케이션을 사용자 머신에 설치해야 해요. 서버에서 실행되는 코드가 Snowflake 제공 클라이언트를 사용하면 브라우저 기반 SSO가 작동하지 않아요.
브라우저 기반 SSO 설정
브라우저 기반 SSO 인증을 설정하려면 클라이언트의 authenticator 로그인 파라미터/옵션을 externalbrowser로 설정해요.
| 클라이언트 | 지침 |
|---|---|
| Snowflake CLI | config.toml 파일에서 연결의 authenticator 파라미터를 설정하거나, 클라이언트 시작 시 명령줄 플래그 --authenticator externalbrowser를 지정해요. |
| SnowSQL | 클라이언트 시작 시 명령줄 플래그 --authenticator externalbrowser를 지정해요. |
| Python | snowflake.connector.connect() 함수에 authenticator='externalbrowser'를 전달해요. |
| JDBC | 드라이버의 연결 문자열에 authenticator=externalbrowser를 설정해요. |
| ODBC(Linux/macOS) | odbc.ini 파일에 authenticator=externalbrowser를 설정해요. |
| ODBC(Windows) | ODBC Data Source Administrator 도구에서 Snowflake의 DSN을 편집하고 Authenticator를 externalbrowser로 설정해요. |
| .NET | 드라이버의 연결 문자열에 authenticator=externalbrowser를 설정해요. |
| Node.js | snowflake.createConnection 함수를 호출할 때 authenticator=EXTERNALBROWSER 옵션을 설정해요. |
| Go | 드라이버의 연결 문자열에 authenticator=externalbrowser를 설정해요. |
연결 캐싱을 사용해 인증 프롬프트 수 최소화 — 선택 사항
클라이언트 애플리케이션이 Snowflake에 새 연결을 설정할 때마다 사용자에게 인증 프롬프트가 표시돼요. 클라이언트 애플리케이션이 연결을 여러 번 설정하면 여러 번의 인증 프롬프트가 발생할 수 있어요.
사용자에게 표시되는 인증 프롬프트 수를 최소화하려면 계정 관리자가 연결 캐싱(connection caching)을 활성화할 수 있어요.
연결 캐싱이 활성화되면 클라이언트 애플리케이션은 이후 연결에 사용할 연결 토큰을 저장해요. 보안을 위해 연결 토큰은 운영 체제의 키스토어에 저장돼요. 연결 캐싱을 활성화하기 전에 보안 팀과 상의해 이것이 보안 정책을 준수하는지 판단해요.
팁(Tip): 연결 캐싱은 MFA 토큰 캐싱과 결합할 수 있어요. 두 기능을 결합하는 방법은 MFA 토큰 캐싱을 사용해 인증 중 프롬프트 수 최소화 — 선택 사항을 참고해요.
Snowflake는 다음 드라이버·커넥터에서 연결 캐싱을 지원해요.
- .NET 드라이버 4.4.0(이후)
- Go 드라이버 1.6.15(이후)
- JDBC 드라이버 3.12.8(이후)
- Node.js 드라이버 1.12.0(이후)
- ODBC 드라이버 2.21.2(이후)
- Python용 Snowflake 커넥터 2.2.8(이후)
연결 캐싱을 활성화하려면:
- 계정 수준 파라미터 ALLOW_ID_TOKEN을
true로 설정해요.
alter account set allow_id_token = true;
참고(Note): 연결 캐싱을 활성화하려면 계정 관리자(즉 ACCOUNTADMIN 역할을 가진 사용자)여야 해요.
- 드라이버나 커넥터에 필요한 패키지 또는 라이브러리를 추가해요.
- Python용 Snowflake 커넥터를 사용한다면 다음을 실행해 선택적 keyring 패키지를 설치해요.
pip install "snowflake-connector-python[secure-local-storage]"
명령에 표시된 대로 대괄호([와 ])를 입력해야 해요. 대괄호는 설치해야 하는 패키지의 extras 부분을 지정해요. 패키지 이름 주위에 표시된 대로 따옴표를 사용해 대괄호가 와일드카드로 해석되지 않게 해요. 다른 extras(예: Python Connector API를 Pandas에 사용하기 위한 pandas)를 설치해야 한다면 extras 사이에 쉼표를 사용해요.
pip install "snowflake-connector-python[secure-local-storage,pandas]"
- Snowflake JDBC 드라이버의 경우 클래스패스에 JNA 클래스 추가를 참고해요.
네이티브 SSO — Okta 전용
Okta가 IdP라면 Snowflake는 Okta를 통한 네이티브 인증도 지원해요. 이 인증 방법은 웹 브라우저에 접근할 수 없는 클라이언트와 SSO를 사용할 때(예: Python 커넥터 또는 JDBC·ODBC 드라이버를 통해 프로그래매틱하게 연결할 때) 유용해요.
참고(Note): 클라이언트 드라이버와 함께 네이티브 SSO 인증을 사용하는 사용자에 대해서는 Okta MFA를 비활성화해 주세요. 자세한 내용은 Okta 관리자에게 문의해 주세요.
Okta를 통한 네이티브 SSO를 활성화하려면 클라이언트의 authenticator 로그인 파라미터/옵션을 Okta 계정의 Okta URL 엔드포인트(Okta가 제공)로 설정해요. 일반적으로 https://<okta_account_name>.okta.com 형식이에요.
| 클라이언트 | 지침 |
|---|---|
| Snowflake CLI | config.toml 파일에서 연결의 authenticator 파라미터를 설정하거나, 클라이언트 시작 시 명령줄 플래그 --authenticator https://<okta_account_name>.okta.com을 지정해요. |
| SnowSQL | 클라이언트 시작 시 명령줄 플래그 --authenticator https://<okta_account_name>.okta.com을 지정해요. |
| Python | snowflake.connector.connect() 함수에 authenticator='https://<okta_account_name>.okta.com'을 전달해요. |
| JDBC | 드라이버의 연결 문자열에 authenticator=https://<okta_account_name>.okta.com을 설정해요. |
| ODBC(Linux/macOS) | odbc.ini 파일에 authenticator=https://<okta_account_name>.okta.com을 설정해요. |
| ODBC(Windows) | ODBC Data Source Administrator 도구에서 Snowflake의 DSN을 편집하고 Authenticator를 https://<okta_account_name>.okta.com으로 설정해요. |
| .NET | 드라이버의 연결 문자열에 authenticator=https://<okta_account_name>.okta.com을 설정해요. |
| Node.js | snowflake.createConnection을 호출할 때 authenticator 옵션을 https://<okta_account_name>.okta.com으로 설정해요. |
Okta Identity Engine으로 업그레이드
네이티브 SSO용으로 Okta Classic에서 Okta Identity Engine으로 업그레이드한다면 업그레이드 전에 Snowflake 클라이언트 드라이버를 업데이트해야 해요.
업그레이드 후 HTTP 429 오류가 발생하면 최신 클라이언트 드라이버가 사용하는 인증 엔드포인트가 적용하는 속도 제한에 도달했을 가능성이 높아요. 자세한 내용은 HTTP 429 오류(이 주제에서)를 참고해요.
HTTP 429 오류
Okta Identity Engine은 인증 엔드포인트(/api/v1/authn)를 통한 통신이 필요하며, 현재 사용자당 5초당 20개 요청의 속도 제한이 있어요. Okta Identity Engine을 지원하기 위해 최신 Snowflake 클라이언트 드라이버는 이 Authentication 엔드포인트를 사용하므로 속도 제한이 적용돼요. 이 제한이 제한적이라면 Okta Support에 연락해 인증 엔드포인트의 속도 제한을 늘려 달라고 요청해요.
Snowflake 클라이언트 드라이버는 다음 버전에서 인증 엔드포인트로 전환했어요.
- Go: 1.6.20
- JDBC: 3.13.22
- .NET: 2.0.20
- Node.js: 1.6.21
- ODBC: 2.25.5
- Python: 2.7.12
- Snowflake CLI: 3.0.0
- SnowSQL: 1.2.24
- SQLAlchemy: 1.4.6
MFA와 함께 SSO 사용
Snowflake는 추가 보안 수준을 제공하기 위해 SSO와 함께 MFA 사용을 지원해요.
- Snowflake의 개별 사용자는 MFA에 등록할 수 있어요. Snowflake 사용자가 MFA에 등록되어 있고 SSO로 연결한다면 MFA 로그인 워크플로가 SSO 워크플로 내에서 시작되며 인증을 성공적으로 완료하는 데 필요해요. Snowflake의 MFA에 대한 자세한 내용은 다중 인증(MFA)을 참고해요.
참고(Note): MFA로 Okta SSO를 통해 연결하려면 Snowflake는 브라우저 기반 SSO를 사용해야 해요. Okta에 네이티브 SSO를 사용한다면 MFA가 지원되지 않아요.
- 추가로 IdP도 MFA를 지원할 수 있지만, 이것은 Snowflake의 MFA와는 별개이며 IdP를 통해 별도로 구성해야 해요. IdP에 MFA가 활성화되어 있으면 IdP가 워크플로를 결정해요. IdP가 MFA를 지원하는지, 어떻게 구현되는지 확인하려면 IdP의 문서를 참고해요.
- 특정 Snowflake 제공 클라이언트에서는 MFA 토큰을 최대 4시간 동안 캐시할 수 있어요. 자세한 내용은 MFA 토큰 캐싱을 사용해 인증 중 프롬프트 수 최소화 — 선택 사항을 참고해요.
여러 audience 값과 함께 SSO 사용
Snowflake는 ID 공급자에서 Snowflake로의 SAML 2.0 assertion에서 여러 audience 값(Audience 또는 Audience Restriction Fields)을 지원해요.
이 기능은 Snowflake에 접근하는 URL을 audience 값으로 지원해요. 각 계정이 Snowflake에 접근하는 고유한 계정 식별자를 가진 URL이 있으므로 여러 Snowflake 계정의 URL이 지원돼요. 추가로 Snowflake는 계정 도메인 이름과 Snowflake 서비스에 대한 개인 연결을 사용해 Snowflake에 접근하는 URL을 audience 값으로 수용해요.
SSO와 공용 인터넷 회피에 대한 자세한 내용은 개인 연결을 사용한 SSO를 참고해요.
현재 Snowflake는 최대 4개의 서로 다른 audience 값을 지원·수용해요. Snowflake에서는 구성이 필요하지 않아요. 4개 이상의 audience 값을 포함해야 한다면 Snowflake Support에 연락해 주세요.
SAML 2.0 audience 값 구성에 대한 도움은 조직의 ID 공급자 관리자에게 문의해 주세요.
개인 연결을 사용한 SSO
Snowflake는 Amazon Web Services(AWS), Microsoft Azure, Google Cloud Platform(GCP)의 Snowflake 계정에 대한 Snowflake 서비스 개인 연결을 사용한 SSO를 지원해요.
자세한 내용은 개인 연결을 사용한 SSO를 참고해요.
더 알아보기 (Learn more)
- 연합 인증과 SSO 개요 — 연합 인증 개념
- 다중 인증(MFA) — MFA 등록과 사용
- SAML 2.0 연합 인증 구성 — SAML 설정