OAuth 소개

Snowflake는 인증 및 권한 부여를 위해 OAuth 2.0 프로토콜을 지원합니다. OAuth는 지원되는 클라이언트가 사용자 로그인 자격 증명을 공유 또는 저장하지 않고 Snowflake에 액세스하는 것을 허용하는 개방형 표준 프로토콜입니다. 클라이언트가 사용자를 대신하여 데이터를 검색할 수 있도록 사용자가 권한을 부여하므로 이를 위임된 권한 부여 라고 합니다. Snowflake는 Snowflake OAuth 및 외부 OAuth의 두 가지 OAuth 방법을 제공합니다.

Snowflake OAuth 에서는 Snowflake에서 기본으로 제공되는 OAuth 서비스를 사용하고 다음 애플리케이션을 지원합니다.

외부 OAuth 는 고객의 OAuth 2.0 서버와 통합되며 인증 서버 옵션 3개, 사용자 지정 클라이언트 및 파트너 애플리케이션 2개를 지원합니다.

다음 테이블에서는 Snowflake OAuth와 외부 OAuth에 대한 비교를 제공합니다.

카테고리

Snowflake OAuth

외부 OAuth

클라이언트 애플리케이션 수정

필수

필수

클라이언트 애플리케이션 브라우저 액세스

필수

필요하지 않음

프로그래밍 방식 클라이언트

브라우저 필요

가장 적합

드라이버 속성

authenticator = oauth

authenticator = oauth

보안 통합 구문

create security integration type = oauth ...

create security integration type = external_oauth

OAuth 흐름

OAuth2.0 코드 권한 부여 흐름

클라이언트가 외부 OAuth 서버를 통해 시작할 수 있는 모든 OAuth 흐름

Snowflake는 통합 을 통해 클라이언트에 대한 OAuth를 활성화합니다. 통합은 Snowflake와 서드 파티 서비스 간의 인터페이스를 제공하는 Snowflake 오브젝트입니다. 관리자는 OAuth를 지원하는 클라이언트가 사용자를 인증 페이지로 리디렉션하고 Snowflake에 액세스하기 위한 액세스 토큰(및 선택적으로 새로 고침 토큰)을 생성할 수 있는 통합 유형인 보안 통합을 사용하여 OAuth를 구성합니다.

이 항목의 내용:

OAuth 개념

인증 서버

이 서버는 클라이언트가 데이터에 액세스하는 것을 허용 또는 거부하는 인터페이스를 사용자에게 표시합니다. 서버는 사용자를 인증하고 인증 요청을 확인한 후 클라이언트에 액세스 토큰을 발급합니다.

액세스 토큰

지정된 역할을 사용하여 데이터에 액세스할 수 있도록 사용자가 클라이언트에 부여한 권한을 나타내는 문자열입니다. 이러한 토큰은 짧은 기간 후에 만료되며, 새로 고침 방식을 사용하여 새 액세스 토큰을 획득할 수 있습니다.

새로 고침 토큰

액세스 토큰이 만료된 경우 새 액세스 토큰을 획득하기 위해 사용되는 문자열입니다. 새로 고침 토큰은 인증 서버가 액세스 토큰과 함께 클라이언트에 선택적으로 발급합니다. 클라이언트는 새로 고침 토큰을 사용하여 다른 액세스 토큰을 요청할 수 있어, 새로 고침 토큰이 만료될 때까지 사용자가 다시 참가하는 것이 방지됩니다. 해당 시점에는 OAuth 워크플로가 다시 호출됩니다.

리소스 서버

이 서버는 리소스(즉, Snowflake)를 보호하고 액세스 토큰을 사용하여 리소스에 액세스하는 요청을 처리합니다.

비밀 클라이언트

기밀 클라이언트는 시크릿을 저장할 수 있습니다. 이 클라이언트는 최종 사용자가 액세스할 수 없는 보호 영역에서 실행됩니다. 예를 들어, 클라우드에 배포된 보안 서비스는 비밀 클라이언트일 수 있습니다. 반면에, 데스크톱에서 실행 중이거나 앱 스토어를 통해 배포되는 클라이언트는 공용 클라이언트일 수 있습니다.

공용 클라이언트의 경우, 사용자는 반드시 매번 Snowflake 사용자 이름 및 비밀번호를 입력한 후 지정된 역할을 사용하여 Snowflake에 대한 클라이언트 액세스를 인증해야 합니다. 비밀 클라이언트의 경우, 사용자는 지정된 역할에 대한 자격 증명을 한 번만 입력하면 됩니다.

Snowflake는 비밀 클라이언트와 공용 클라이언트 모두에서 OAuth를 지원합니다.

Snowflake OAuth 인증 흐름

OAuth 인증 흐름은 다음과 같습니다.

Snowflake OAuth workflow
  1. 클라이언트에서 사용자가 OAuth를 사용하여 Snowflake에 연결하기 위해 시도합니다.

    애플리케이션은 Snowflake 인증 서버로 인증 요청을 전송하고 사용자에게 액세스 인증을 요청하는 인증 화면을 표시합니다.

  2. 사용자가 Snowflake 로그인 이름과 비밀번호를 제출하면 사용자 세션에서 특정 역할(예: SYSADMIN 또는 CUSTOM_ROLE1)을 사용하여 Snowflake로의 클라이언트 액세스를 허용하는 동의 화면이 표시됩니다.

    사용자는 동의를 제출하여 세션에서 특정 역할을 사용합니다.

    Snowflake 인증 서버가 클라이언트로 다시 인증 코드를 전송합니다.

  3. 클라이언트는 인증 코드를 Snowflake 인증 서버로 다시 전송하여 액세스 토큰을 요청하고, 선택적으로 클라이언트가 새 액세스 토큰을 획득할 수 있는 새로 고침 토큰을 요청합니다.

    Snowflake 인증 서버는 인증 코드를 수락하고 Snowflake 리소스 서버의 사용자 리소스에 고유한 액세스 토큰을 클라이언트에 제공합니다. 인증 요청의 설정에 따라, 인증 서버는 새로 고침 토큰을 발급하여 특정 리소스에 연결된 새 액세스 토큰을 획득합니다.

  4. 클라이언트는 Snowflake 리소스 서버로 액세스 토큰을 전송합니다.

    리소스 서버는 유효한 액세스 토큰을 인식하고 권한이 인증된 역할을 사용하여 사용자 세션을 생성합니다. 클라이언트는 이제 액세스 토큰에 의해 지정된 역할로 제한되는 Snowflake 리소스에 액세스할 수 있습니다.

액세스 토큰의 수명은 짧습니다(일반적으로 10분). 액세스 토큰이 만료되면 클라이언트는 새로 고침 토큰을 전송하여 새 액세스 토큰을 획득할 수 있습니다. 현재 액세스 토큰이 만료될 때마다 새로 고침 토큰이 Snowflake 인증 서버로 전송되어 새 액세스 토큰을 요청합니다(3~6단계). 새로 고침 토큰을 전송하지 않도록 통합이 구성된 경우, 사용자는 반드시 위의 단계를 반복하여 클라이언트를 다시 인증해야 합니다.

OAuth 지원 구성하기

SnowflakeOAuth 파트너 애플리케이션

지원을 구성하려면 파트너 애플리케이션용 Snowflake OAuth 구성 을 참조하십시오.

공용 인터넷을 통과하지 않고 OAuth를 사용하는 방법에 대해 알아보려면 OAuth 및 비공개 연결 을 참조하십시오.

Snowflake OAuth 사용자 지정 클라이언트

Snowflake는 조직에서 구성한 사용자 지정 클라이언트를 지원합니다. 지원을 구성하려면 사용자 지정 클라이언트용 Snowflake OAuth 구성 을 참조하십시오.

외부 OAuth 파트너 애플리케이션

외부 OAuth 파트너 애플리케이션을 구성하려면 외부 OAuth 파트너 애플리케이션 섹션을 참조하십시오.

외부 OAuth 사용자 지정 클라이언트

Snowflake는 조직에서 구성한 외부 OAuth 사용자 지정 클라이언트를 지원합니다. 지원을 구성하려면 외부 OAuth용 사용자 지정 클라이언트 구성 을 참조하십시오.

OAuth 로그인 감사하기

Snowflake 사용자의 로그인 시도를 쿼리하기 위해 Snowflake는 로그인 내역을 제공합니다.

OAuth를 사용하여 인증서(성공 또는 실패)를 발급할 때 출력에서 FIRST_AUTHENTICATION_FACTOR 열의 값은 OAUTH_ACCESS_TOKEN입니다.

통합 DDL

통합 및 위임된 인증 생성 및/또는 관리를 지원하기 위해 Snowflake에서 제공하는 특수 DDL 명령 세트는 다음과 같습니다.

OAuth 및 페더레이션 인증

Snowflake는 Snowflake에서 지원하는 ID 공급자(IdP)를 사용한 Single Sign-On(페더레이션 인증 & SSO)와 함께 OAuth를 지원합니다.

페더레이션 인증을 구성한 경우의 인증 흐름은 다음과 같습니다.

  1. 클라이언트에서 사용자가 Snowflake에 연결하기 위해 시도합니다.

    애플리케이션은 Snowflake 인증 서버로 인증 요청을 전송하고 사용자에게 액세스 인증을 요청하는 인증 화면을 표시합니다.

  2. 사용자는 IdP를 사용한 로그인 옵션을 클릭하고 IdP 인증 페이지로 리디렉션됩니다.

  3. 사용자가 IdP 로그인 이름과 비밀번호를 제출하면 사용자 세션에서 특정 역할(예: SYSADMIN 또는 CUSTOM_ROLE1)을 사용하여 Snowflake로의 클라이언트 액세스를 허용하는 동의 화면이 표시됩니다.

    사용자는 동의를 제출하여 세션에서 특정 역할을 사용합니다.

    Snowflake 인증 서버가 클라이언트로 다시 인증 코드를 전송합니다.

  4. 클라이언트는 인증 코드를 Snowflake 인증 서버로 다시 전송하여 액세스 토큰을 요청하고, 선택적으로 클라이언트가 새 액세스 토큰을 획득할 수 있는 새로 고침 토큰을 요청합니다.

    Snowflake 인증 서버는 인증 코드를 수락하고 Snowflake 리소스 서버의 사용자 리소스에 고유한 액세스 토큰을 클라이언트에 제공합니다. 인증 요청의 설정에 따라, 인증 서버는 새로 고침 토큰을 발급하여 특정 리소스에 연결된 새 액세스 토큰을 획득합니다.

  5. 클라이언트는 Snowflake 리소스 서버로 액세스 토큰을 전송합니다.

    리소스 서버는 유효한 액세스 토큰을 인식하고 권한이 인증된 역할을 사용하여 사용자 세션을 생성합니다. 클라이언트는 이제 액세스 토큰에 의해 지정된 역할로 제한되는 Snowflake 리소스에 액세스할 수 있습니다.

OAuth 및 비공개 연결

Snowflake는 Snowflake 서비스에 비공개 연결 에서 외부 OAuth를 지원합니다.

Snowflake OAuth 및 Tableau는 다음과 같이 Snowflake에 대한 비공개 연결과 함께 사용할 수 있습니다.

Tableau Desktop

Tableau 2020.4부터, Tableau에는 OAuth 클라이언트가 포함되어 Snowflake 서비스에 비공개 연결 용 URL 계정으로 Snowflake에 연결할 수 있습니다.

Tableau 2020.4으로 업그레이드한 후에는 추가적인 구성이 필요하지 않으며, AWS 또는 Azure를 위한 해당 비공개 연결 URL을 사용하여 Snowflake에 연결할 수 있습니다.

Tableau Server

Tableau 2020.4부터, 사용자는 선택적으로 Tableau Server를 구성하여 포함된 OAuth 클라이언트를 사용해 Snowflake 서비스에 비공개 연결 용 계정 URL을 통해 Snowflake에 연결할 수 있습니다.

이 기능을 사용하려면 새 Custom Client 보안 통합을 생성하고 Tableau 지침 을 따르십시오.

Tableau Online

Tableau Online의 경우 공용 인터넷에 액세스해야 하므로 Tableau Online은 Snowflake 서비스에 비공개 연결 용 Snowflake 계정 URL을 지원하지 않습니다.

Tableau Online에서 Snowflake 서비스에 비공개 연결 용 비공개 연결 Snowflake 계정 URLs을 지원하는 시점에 대한 자세한 정보는 Tableau로 문의하십시오.

중요

Snowflake 서비스에 비공개 연결 에서 사용할 계정 URL을 확인하려면 SYSTEM$GET_PRIVATELINK_CONFIG 함수를 호출합니다.

Looker

현재, Snowflake OAuth와 Looker를 함께 사용하려면 공용 인터넷에 액세스해야 합니다. 그러므로 Snowflake 서비스에 비공개 연결 와 함께 Snowflake OAuth 및 Looker를 사용할 수 없습니다.

자세한 내용은 다음을 참조하십시오.

OAuth 및 네트워크 정책

You can integrate a dedicated network policy with Snowflake OAuth only. The 외부 OAuth security integration does not support setting a separate network policy, but you can still use a general network policy that applies to the entire Snowflake account.

Snowflake OAuth 보안 통합에는 network_policy 매개 변수가 있으므로, 일반 사용자 액세스를 위해 이러한 IP 주소를 추가하지 않고 Snowflake OAuth 통합이 사용자를 인증하고 권한을 부여할 수 있습니다.

Snowflake OAuth 통합 고유의 네트워크 정책을 설정하면 Snowflake OAuth 네트워크 정책을 Snowflake 계정에 적용될 수 있는 다른 네트워크 정책과 구분할 수 있습니다. Snowflake OAuth 네트워크 정책은 계정의 다른 네트워크 정책에 영향을 주지 않으며, 다른 계정 네트워크 정책은 Snowflake OAuth 네트워크 정책에 영향을 주지 않습니다. 그러므로 Snowflake OAuth 네트워크 정책을 사용하면 원하는 대로 사용자에 대한 인증 및 권한 부여를 수행할 수 있습니다.

중요

사용자 또는 계정별로 네트워크 정책이 설정되고 다른 위치에서 실행되는 서비스(예: Microsoft Power BI Service)를 사용하는 경우에는 Snowflake에 연결할 수 없습니다.

Snowflake OAuth 보안 통합을 생성한 후 다음 명령을 사용하여 OAuth 네트워크 정책을 설정합니다.

alter security integration <oauth_통합> set network_policy = <oauth_네트워크_정책>;

Snowflake OAuth 네트워크 정책의 설정을 해제하려면 다음 명령을 사용합니다.

alter security integration <oauth_통합> unset <oauth_네트워크_정책>;

여기서:

<oauth_integration>

Snowflake OAuth 보안 통합의 이름을 지정합니다.

<oauth_network_policy>

Snowflake에 Snowflake OAuth 네트워크 정책을 지정합니다.

자세한 내용은 네트워크 정책ALTER SECURITY INTEGRATION(Snowflake OAuth) 섹션을 참조하십시오.

OAuth 및 보조 역할

Snowflake는 External Oauth에서 보조 역할 사용을 지원합니다.

자세한 내용은 외부 OAuth가 포함된 보조 역할 사용하기 섹션을 참조하십시오.

Snowflake OAuth에서는 세션 내 역할을 보조 역할로 전환하는 기능이 지원되지 않습니다.

클라이언트, 드라이버 및 커넥터를 사용한 OAuth

지원되는 클라이언트, 드라이버 및 커넥터는 OAuth를 사용하여 사용자 로그인 자격 증명을 확인할 수 있습니다.

다음 사항을 참고하십시오.

  • authenticator 매개 변수를 oauth 로 설정하고 token 매개 변수를 oauth_access_token 으로 설정해야 합니다.

  • token 값을 URL 쿼리 매개 변수로 전달할 때는 oauth_access_token 값을 URL로 인코딩해야 합니다.

  • token 값을 속성 오브젝트(예: JDBC 드라이버)로 전달할 때는 수정할 필요가 없습니다.

자세한 내용은 각 클라이언트, 드라이버 또는 커넥터에 대한 연결 매개 변수를 참조하십시오.

OAuth 및 클라이언트 리디렉션

Snowflake는 지원되는 Snowflake 클라이언트에서 클라이언트 리디렉션과 OAuth 사용을 포함하여, Snowflake OAuth 및 External OAuth에서의 클라이언트 리디렉션 사용을 지원합니다.

자세한 내용은 클라이언트 연결 리디렉션하기 섹션을 참조하십시오.

OAuth and Replication

Snowflake supports replication and failover/failback with both the Snowflake OAuth and External OAuth security integrations from the source account to the target account.

For details, see 여러 계정에 보안 통합 및 네트워크 정책 복제.

OAuth 오류 코드

인증 흐름 또는 토큰 교환 중 또는 OAuth 흐름 완료 후 Snowflake 세션을 생성할 때 반환될 수 있는 OAuth와 관련된 오류 코드는 다음과 같습니다.

오류 코드

오류

설명

390302

OAUTH_CONSENT_INVALID

지정된 사용자에 대한 동의 생성 또는 유효성 검사 오류입니다.

390303

OAUTH_ACCESS_TOKEN_INVALID

Snowflake 세션을 생성할 때 사용되는 제공된 액세스 토큰이 만료되거나 유효하지 않습니다.

390304

OAUTH_AUTHORIZE_INVALID_RESPONSE_TYPE

유효하지 않은 response_type 은 인증 엔드포인트에 매개 변수로 제공됩니다(대부분 code 여야 함).

390305

OAUTH_AUTHORIZE_INVALID_STATE_LENGTH

인증 엔드포인트에 매개 변수로 제공된 상태 매개 변수의 길이가 2048자를 초과합니다.

390306

OAUTH_AUTHORIZE_INVALID_CLIENT_ID

제공된 클라이언트 ID와 연결된 통합이 없습니다.

390307

OAUTH_AUTHORIZE_INVALID_REDIRECT_URI

인증 엔드포인트에 매개 변수로 제공되된 redirect_uri 가 제공된 client_id 와 연결된 통합의 redirect_uri 와 일치하지 않거나 redirect_uri 의 형식이 올바르지 않습니다.

390308

OAUTH_AUTHORIZE_INVALID_SCOPE

요청된 범위가 유효한 범위가 아니거나 요청된 범위에 대한 모든 권한이 사용자에게 부여되지 않았습니다.

390309

OAUTH_USERNAMES_MISMATCH

인증을 시도한 사용자가 액세스 토큰과 연결된 사용자와 다릅니다.

390311

OAUTH_AUTHORIZE_INVALID_CODE_CHALLENGE_PARAMS

코드 챌린지 또는 코드 챌린지 메서드가 누락되거나 유효하지 않거나 지원되지 않습니다.

390318

OAUTH_ACCESS_TOKEN_EXPIRED

OAuth액세스 토큰이 만료되었습니다. {0}

390144

JWT_TOKEN_INVALID

JWT 토큰이 유효하지 않습니다.

또한, RFC에서 다음 오류를 가져와 실패한 토큰 요청 또는 교환 중에 생성된 JSON blob에 반환되었습니다.

오류

설명

유효하지 않은_클라이언트

알 수 없는 클라이언트, 클라이언트 시크릿 불일치와 같은 클라이언트 인증과 관련된 실패가 발생했습니다.

유효하지 않은_권한 부여

제공된 인증 권한 부여 또는 새로 고침 토큰이 유효하지 않거나 만료되었거나 취소되었거나 인증 요청에서 사용된 리디렉션 URI와 일치하지 않거나 다른 클라이언트로 발급되었습니다.

지원되지 않는_권한_타입

Snowflake에서 현재 지원되지 않는 권한 타입이 제공되었습니다(《새로 고침_토큰》 및 《인증_코드》의 2개 권한 타입만 현재 지원됨).

유효하지 않은_요청

요청의 형식이 잘못되었거나 요청을 처리할 수 없습니다.

맨 위로 이동