Snowflake를 위한 외부 OAuth 구성: 클라이언트 자격 증명 흐름
OAuth 클라이언트 자격 증명 인증을 통해 Snowflake와의 기기 간 연결이
사용자 상호 작용 없이도 가능합니다. 이 방법은 다음과 같은 경우에 적합합니다.
자동 데이터 새로 고침을 위한 서비스 계정
예약된 추출 작업
CI/CD 파이프라인
내장된 자격 증명이 필요한 게시된 데이터 원본
인증 코드 흐름을 사용하는 표준 OAuth와 달리 클라이언트 자격 증명 흐름은
사용자에게 로그인하라는 메시지를 표시하지 않습니다. 대신 Tableau는 클라이언트 ID와 암호를 사용하여 ID 공급자에서
직접 인증합니다.
참고: 클라이언트 자격 증명 흐름에는 지원되는 ID 공급자를 통한 Snowflake의 외부 OAuth 기능이 필요합니다. 이는 Snowflake의 기본 OAuth와는 다릅니다.
시작하기 전에
Snowflake에서 OAuth 클라이언트 자격 증명을 사용하려면 다음이 필요합니다.
| 요구 사항 | 설명 |
|---|---|
| ID 공급자 | 클라이언트 자격 증명 허가를 위해 구성된 Okta, Azure AD 또는 Ping Federate |
| Snowflake 계정 | ACCOUNTADMIN 액세스 권한이 있는 Enterprise 이상의 버전 |
| OAuth 응용 프로그램 | API 서비스(Okta), 앱 등록(Azure AD) 또는 이와 동등한 서비스 |
| 사용자 지정 범위 | Snowflake 역할 할당 범위(예: `session:role:SYSADMIN`) |
ID 공급자 구성
다음 단계에서는 Okta를 예시로 사용합니다. 다른 공급자의 경우 클라이언트 자격 증명 구성에 대한 자세한 내용은 해당 공급자의 설명서를 참조하십시오.
1단계: API 서비스 응용 프로그램 만들기
Okta 관리 콘솔에 로그인합니다.
다음으로 이동: **Applications(응용 프로그램) > Applications(응용 프로그램).
다음을 선택: **Create App Integration(앱 통합 만들기).
다음을 선택: **API Services(API 서비스)** > **Next(다음).
응용 프로그램 이름을 입력합니다(예:
snowflake-tableau-service).저장을 선택합니다.
Client ID(클라이언트 ID) 및 Client Secret(클라이언트 암호)를 복사합니다. 이러한 값은 나중에 필요합니다.
2단계: DPoP 사용 안 함(사용하도록 설정된 경우)
클라이언트 자격 증명 흐름에 대해서는 DPoP(소유권 증명)를 사용하지 않도록 설정해야 합니다.
응용 프로그램 설정에서 General(일반) > Client Credentials(클라이언트 자격 증명)로 이동합니다.
Require Demonstrating Proof of Possession (DPoP) header in token requests(토큰 요청에 DPoP(소유권 증명) 머리글 필요) 확인란을 선택 해제합니다.
저장을 선택합니다.
3단계: 사용자 지정 범위 추가
Snowflake에서는 인증된 세션에 역할을 할당하기 위해 사용자 지정 범위가 필요합니다.
Security(보안) > API > Authorization Servers(권한 부여 서버)로 이동합니다.
기본 권한 부여 서버(또는 사용자 지정 서버)를 선택합니다.
Scopes(범위) 탭을 선택한 다음 Add Scope(범위 추가)를 선택합니다.
다음과 같이 범위를 추가합니다.
범위 이름 설명 snowflake Snowflake의 일반 액세스 범위 session:role:SYSADMIN SYSADMIN 역할 할당(사용자 역할에 맞게 조정) 참고: 서비스 계정에 필요한 다른 모든 역할에 대해 추가 범위를 만드십시오.
4단계: 액세스 정책 구성
Access Policies(액세스 정책) 탭을 선택합니다.
기존 정책을 선택하거나 새 정책을 만듭니다.
다음 설정의 규칙을 추가합니다.
Grant type(허가 유형): 클라이언트 자격 증명
Scopes(범위): 모든 범위(또는 특정 범위 선택)
Create Rule(규칙 만들기) 또는 Save(저장)를 선택합니다.
Snowflake 구성
Snowflake에서 ACCOUNTADMIN 자격으로 다음 SQL 문을 실행합니다. 자리 표시자 값은 사용자의 구성으로 바꿔야 합니다.
1단계: 외부 OAuth 통합 만들기
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE SECURITY INTEGRATION okta_oauth_integration
TYPE = EXTERNAL_OAUTH
ENABLED = TRUE
EXTERNAL_OAUTH_TYPE = OKTA
EXTERNAL_OAUTH_ISSUER = 'https://<your-okta-domain>.okta.com/oauth2/default'
EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://<your-okta-domain>.okta.com/oauth2/
default/v1/keys'
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name'
EXTERNAL_OAUTH_AUDIENCE_LIST = ('api://default', 'snowflake')
EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';| 매개 변수 | 설명 |
|---|---|
EXTERNAL_OAUTH_TYPE | ID 공급자: OKTA, AZURE 또는 PING_FEDERATE |
EXTERNAL_OAUTH_ISSUER | 권한 부여 서버의 발급자 URL |
EXTERNAL_OAUTH_JWS_KEYS_URL | 토큰 유효성 검사를 위한 JWKS 끝점 |
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA
IM | 사용자를 식별하는 JWT 클레임. Okta에는 sub를 사용합니다. |
EXTERNAL_OAUTH_ANY_ROLE_MODE | ENABLE로 설정하여 범위를 통한 역할 할당 허용 |
2단계: 서비스 사용자 만들기
OAuth 클라이언트 ID와 일치하는 LOGIN_NAME을 사용하여 Snowflake 사용자를 만듭니다.
CREATE USER IF NOT EXISTS service_account_user
LOGIN_NAME = '<your-okta-client-id>'
DISPLAY_NAME = 'OAuth Service Account'
MUST_CHANGE_PASSWORD = FALSE
DISABLED = FALSE;
-- Grant role to the service user
GRANT ROLE SYSADMIN TO USER service_account_user;
-- Set the default role
ALTER USER service_account_user SET DEFAULT_ROLE = 'SYSADMIN';
-- Grant warehouse access
GRANT USAGE ON WAREHOUSE <your-warehouse> TO USER service_account_user;
-- Grant database and schema access
GRANT USAGE ON DATABASE <your-database> TO USER service_account_user;
GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
GRANT SELECT ON ALL TABLES IN SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
중요: LOGIN_NAME은 OAuth 토큰의 sub 클레임과 정확히 일치해야 합니다. Okta API 서비스 응용 프로그램의 경우 이것이 클라이언트 ID입니다.
Tableau Desktop에서 연결
Tableau Desktop에서 연결 > Snowflake를 선택합니다.
연결 세부 정보를 입력합니다.
필드 값 서버 Snowflake 계정 URL(예: account.snowflakecomputing.com)역할 사용할 역할(예: SYSADMIN)웨어하우스 Snowflake 웨어하우스 인증 OAuth 클라이언트 자격 증명 OAuth 구성을 입력합니다.
필드 값 OAuth 토큰 요청 URL https://<your-okta-domain>.okta.com/oauth2/default/ v1/token사용자 이름 OAuth 클라이언트 ID 비밀번호 OAuth 클라이언트 암호 OAuth 범위 snowflake session:role:SYSADMIN참고: OAuth 범위에는 역할 할당을 위해 구성한 모든 사용자 지정 범위가 포함되어야 합니다.
로그인을 선택합니다.
Tableau Cloud 또는 Tableau Server에 게시
OAuth 클라이언트 자격 증명을 사용하는 통합 문서 또는 데이터 원본을 게시할 때 다음을 고려하십시오.
게시 대화 상자에서 데이터 원본 옆에 있는 편집을 선택합니다.
인증 방법으로는 내장된 비밀번호를 선택합니다.
클라이언트 자격 증명이 게시된 콘텐츠에 내장됩니다.
중요: 표준 OAuth와 달리 클라이언트 자격 증명은 내장된 비밀번호로 처리됩니다. 게시된 콘텐츠에 액세스하는 사용자는 자신의 ID가 아니라 서비스 계정 자격 증명을 사용해야 합니다.
자격 증명 순환
OAuth 클라이언트 암호가 순환되면 Tableau Cloud에서 내장된 자격 증명을 업데이트해야 합니다.
Tableau Cloud에 로그인합니다.
게시된 데이터 원본으로 이동합니다.
연결을 선택합니다.
새 클라이언트 암호로 연결을 업데이트합니다.
순환이 자동화된 경우 Tableau REST API를 사용하여 프로그래밍 방식으로 연결 자격 증명을 업데이트하십시오.
자주 묻는 질문
표준 OAuth 대신 OAuth 클라이언트 자격 증명을 사용해야 하는 경우는 언제입니까?
컴퓨터 간 자동 인증이 필요한 경우 클라이언트 자격 증명을 사용하십시오. 표준
OAuth에는 최초 로그인 및 주기적인 재인증을 위해 사용자 상호 작용이 필요합니다. 클라이언트 자격 증명은
서비스 계정 ID를 사용하며, 사용자 상호 작용이 필요하지 않습니다.
Snowflake의 기본 OAuth에서 클라이언트 자격 증명을 사용할 수 있습니까?
아니요. Snowflake의 기본 OAuth는 인증 코드 흐름만 지원합니다. 클라이언트 자격 증명을 사용하려면 지원되는 ID 공급자(Okta, Azure AD 또는 Ping Federate)를 사용한 외부 OAuth가 필요합니다.
게시된 콘텐츠의 암호 순환은 어떻게 처리합니까?
OAuth 클라이언트 암호가 순환되면 반드시 Tableau Cloud에서 내장된 자격 증명을 업데이트해야 합니다. 이 작업은 Tableau Cloud UI를 통해 수동으로 수행하거나 Tableau REST API를 사용하여 프로그래밍 방식으로 수행할 수 있습니다. 암호 순환 워크플로우의 일부로 이 프로세스를 자동화하는 것이 좋습니다.
EXTERNAL_OAUTH_ANY_ROLE_MODE를 사용하도록 설정했는데도 역할 오류와 함께 연결이 실패하는 이유는 무엇입니까?
Snowflake를 사용하려면 OAuth 토큰의 역할 정보가 필요합니다. 사용자 지정 범위(예: session:role:SYSADMIN)를 권한 부여 서버에 추가하고 Tableau에서 연결할 때 OAuth 범위 필드에 해당 사용자 지정 범위를 포함해야 합니다.
문제 해결
| 오류 메시지 | 원인 | 해결 방법 |
|---|---|---|
| 'User does not exist or not authorized' | Snowflake 사용자 LOGIN_NAME이 OAuth 클라이언트 ID와 일치하지 않음 | 사용자의 LOGIN_NAME이 sub 클레임(Okta의 경우 클라이언트 ID)과 일치하도록 설정 |
| 'The role requested is not listed in the Access Token' | 토큰에 없는 역할 범위 | session:role:<ROLE> 범위를 권한 부여 서버에 추가하고 이를 OAuth 범위에 포함 |
| 'Invalid DPoP proof' | Okta에서 DPoP가 사용되도록 설정됨 | Okta 앱에서 'Require Demonstrating Proof of Possession (DPoP)(DPoP(소유권 증명) 필요)'를 사용하지 않도록 설정 |
| 'Invalid scope' | 사용자 지정 범위가 구성되지 않음 | 권한 부여 서버에 필요한 범위를 추가하고 openid는 포함하지 않음 |
| Token validation failure | 잘못된 JWKS URL 또는 발급자 | EXTERNAL_OAUTH_JWS_KEYS
_URL 및 EXTERNAL_OAUTH_ISSUER가 권한 부여 서버와 일치하는지 확인 |
참고 항목
Tableau Server에서 Snowflake 연결을 위한 OAuth 구성(링크가 새 창에서 열림) - Snowflake의 표준 OAuth 인증에 대해 알아보십시오.
외부 OAuth 보안 통합(영문)(링크가 새 창에서 열림) - 외부 OAuth 공급자 구성에 대한 Snowflake 설명서입니다.
Okta 클라이언트 자격 증명 흐름(영문)(링크가 새 창에서 열림) - 클라이언트 자격 증명 구현에 대한 Okta 설명서입니다.
데이터 원본 연결 업데이트(링크가 새 창에서 열림) - 자격 증명 업데이트를 위한 Tableau REST API 참조서입니다.
