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 서비스 응용 프로그램 만들기

  1. Okta 관리 콘솔에 로그인합니다.

  2. 다음으로 이동: **Applications(응용 프로그램) > Applications(응용 프로그램).

  3. 다음을 선택: **Create App Integration(앱 통합 만들기).

  4. 다음을 선택: **API Services(API 서비스)** > **Next(다음).

  5. 응용 프로그램 이름을 입력합니다(예: snowflake-tableau-service).

  6. 저장을 선택합니다.

  7. Client ID(클라이언트 ID)Client Secret(클라이언트 암호)를 복사합니다. 이러한 값은 나중에 필요합니다.

2단계: DPoP 사용 안 함(사용하도록 설정된 경우)

클라이언트 자격 증명 흐름에 대해서는 DPoP(소유권 증명)를 사용하지 않도록 설정해야 합니다.

  1. 응용 프로그램 설정에서 General(일반) > Client Credentials(클라이언트 자격 증명)로 이동합니다.

  2. Require Demonstrating Proof of Possession (DPoP) header in token requests(토큰 요청에 DPoP(소유권 증명) 머리글 필요) 확인란을 선택 해제합니다.

  3. 저장을 선택합니다.

3단계: 사용자 지정 범위 추가

Snowflake에서는 인증된 세션에 역할을 할당하기 위해 사용자 지정 범위가 필요합니다.

  1. Security(보안) > API > Authorization Servers(권한 부여 서버)로 이동합니다.

  2. 기본 권한 부여 서버(또는 사용자 지정 서버)를 선택합니다.

  3. Scopes(범위) 탭을 선택한 다음 Add Scope(범위 추가)를 선택합니다.

  4. 다음과 같이 범위를 추가합니다.

    범위 이름설명
    snowflakeSnowflake의 일반 액세스 범위
    session:role:SYSADMINSYSADMIN 역할 할당(사용자 역할에 맞게 조정)

    참고: 서비스 계정에 필요한 다른 모든 역할에 대해 추가 범위를 만드십시오.

4단계: 액세스 정책 구성

  1. Access Policies(액세스 정책) 탭을 선택합니다.

  2. 기존 정책을 선택하거나 새 정책을 만듭니다.

  3. 다음 설정의 규칙을 추가합니다.

    • Grant type(허가 유형): 클라이언트 자격 증명

    • Scopes(범위): 모든 범위(또는 특정 범위 선택)

  4. 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_TYPEID 공급자: 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_MODEENABLE로 설정하여 범위를 통한 역할 할당 허용

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에서 연결

  1. Tableau Desktop에서 연결 > Snowflake를 선택합니다.

  2. 연결 세부 정보를 입력합니다.

    필드
    서버Snowflake 계정 URL(예: account.snowflakecomputing.com)
    역할사용할 역할(예: SYSADMIN)
    웨어하우스Snowflake 웨어하우스
    인증OAuth 클라이언트 자격 증명
  3. OAuth 구성을 입력합니다.

    필드
    OAuth 토큰 요청 URLhttps://<your-okta-domain>.okta.com/oauth2/default/ v1/token
    사용자 이름OAuth 클라이언트 ID
    비밀번호OAuth 클라이언트 암호
    OAuth 범위snowflake session:role:SYSADMIN

    참고: OAuth 범위에는 역할 할당을 위해 구성한 모든 사용자 지정 범위가 포함되어야 합니다.

  4. 로그인을 선택합니다.

Tableau Cloud 또는 Tableau Server에 게시

OAuth 클라이언트 자격 증명을 사용하는 통합 문서 또는 데이터 원본을 게시할 때 다음을 고려하십시오.

  1. 게시 대화 상자에서 데이터 원본 옆에 있는 편집을 선택합니다.

  2. 인증 방법으로는 내장된 비밀번호를 선택합니다.

  3. 클라이언트 자격 증명이 게시된 콘텐츠에 내장됩니다.

중요: 표준 OAuth와 달리 클라이언트 자격 증명은 내장된 비밀번호로 처리됩니다. 게시된 콘텐츠에 액세스하는 사용자는 자신의 ID가 아니라 서비스 계정 자격 증명을 사용해야 합니다.

자격 증명 순환

OAuth 클라이언트 암호가 순환되면 Tableau Cloud에서 내장된 자격 증명을 업데이트해야 합니다.

  1. Tableau Cloud에 로그인합니다.

  2. 게시된 데이터 원본으로 이동합니다.

  3. 연결을 선택합니다.

  4. 새 클라이언트 암호로 연결을 업데이트합니다.

순환이 자동화된 경우 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_NAMEsub 클레임(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 _URLEXTERNAL_OAUTH_ISSUER가 권한 부여 서버와 일치하는지 확인

참고 항목

피드백을 제공해 주셔서 감사합니다!귀하의 피드백이 제출되었습니다. 감사합니다!