Power BI SSO로 Snowflake 접속

Power BI SSO로 Snowflake 접속

이 주제는 Microsoft Power BI를 사용해 Snowflake 세션을 인스턴스화하고 단일 로그온(SSO)으로 Snowflake에 접근하는 방법을 설명해요.

출처: Power BI SSO to Snowflake

본문

개요

Snowflake는 Microsoft Power BI 사용자가 IdP(Identity Provider) 자격 증명과 OAuth 2.0 구현을 사용해 Snowflake에 연결하고 Snowflake 데이터에 접근하는 SSO 환경을 제공할 수 있게 해요.

이 기능은 Power BI 서비스가 Snowflake에 연결할 때 임베디드 Snowflake 드라이버를 사용하므로 온프레미스 Power BI 게이트웨이 구현이 필요하지 않아요.

일반적인 워크플로

다음 다이어그램은 Power BI에서 Snowflake 세션을 인스턴스화하는 인가 흐름을 요약해요:

  1. 사용자는 Microsoft Entra ID로 Power BI 서비스에 로그인해요.
  2. 선택적으로 Microsoft Entra ID는 SAML을 통해 IdP로 사용자를 검증할 수 있어요. 현재 Microsoft는 Power BI SSO의 IdP로 Microsoft Entra ID만 지원해요.
  3. 사용자가 Snowflake에 연결하면 Power BI 서비스는 Microsoft Entra ID에 Snowflake용 토큰을 달라고 요청해요.
  4. Power BI 서비스는 임베디드 Snowflake 드라이버를 사용해 Microsoft Entra ID 토큰을 연결 문자열의 일부로 Snowflake에 보내요.
  5. Snowflake는 토큰을 검증하고 토큰에서 사용자 이름을 추출해 Snowflake 사용자에 매핑한 후 사용자의 기본 역할을 사용해 Power BI 서비스용 Snowflake 세션을 만들어요.

사전 요구 사항

Power BI SSO 기능을 사용하기 전에 Snowflake 계정에서 다음을 확인하세요:

Snowflake on Azure 계정이 있는 리전에 특정한 Power BI용 네트워크 정책을 만들려면 Microsoft의 JSON 다운로드에서 해당 리전을 검색하세요. 예를 들어 Snowflake on Azure 계정이 Canada Central 리전에 있다면 JSON 다운로드에서 PowerBI.CanadaCentral을 검색하세요. addressPrefixes 목록에서 IP 주소 범위를 선택하세요. 이 IP 주소 범위를 사용해 Snowflake에서 네트워크 정책을 만들거나 업데이트하세요. addressPrefixes 목록이 비어 있다면 Microsoft에 업데이트를 요청하세요. 여러 Microsoft Azure 서비스(예: Power BI, SCIM)를 사용한다면 Azure 관리자에게 올바른 IP 주소 범위를 확인해 Snowflake 네트워크 정책이 사용자가 Snowflake에 접근할 수 있도록 올바른 IP 주소 범위를 포함하도록 하세요.

  • Snowflake 사용자의 login_name, name, 또는 email 속성 중 하나가 Microsoft Entra ID upn 속성에 매핑돼야 해요. login_name 속성이 정의되지 않았다면 기본적으로 name 속성을 사용해요.

고려 사항

Power BI 게이트웨이 사용 시:

Snowflake 서비스에 대한 프라이빗 연결이 지원돼요. 이 두 서비스 중 하나를 사용해 Snowflake에 연결해야 한다면 온프레미스 게이트웨이를 사용해 연결하세요.

Power BI 게이트웨이 없이:

Snowflake 서비스에 대한 프라이빗 연결은 지원되지 않아요. Power BI 서비스와 Power BI Desktop의 경우 Microsoft Entra ID 공개 IP 주소 범위를 허용하는 네트워크 정책을 만들어요. 네트워크 정책은 허용 IP 주소에 대해 100,000자 제한이 있어요.

토큰과 키:

Snowflake는 external_oauth_jws_keys_url 속성(아래 표시)의 URL 값이나, 네트워크 정책이 있다면 정책의 허용 IP 주소를 통해 Microsoft Entra ID를 검증하려고 해요. Microsoft는 매 24시간마다 토큰과 키를 업데이트해요. Microsoft 업데이트에 대한 자세한 내용은 Microsoft Entra ID B2C의 토큰 개요를 참조하세요.

허용 역할 설정:

기본적으로 ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN, SECURITYADMIN 시스템 역할은 Microsoft Power BI를 사용한 Snowflake 세션 인스턴스화가 차단돼요. 이러한 고권한 역할을 사용해야 한다면 EXTERNAL_OAUTH_ALLOWED_ROLES 보안 통합 매개변수를 업데이트해 이 역할들을 지정하세요. EXTERNAL_OAUTH_ALLOWED_ROLES 보안 통합 매개변수에 ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN, SECURITYADMIN 시스템 역할을 지정할 때는 주의하세요. 자세한 내용은 CREATE SECURITY INTEGRATION과 ALTER SECURITY INTEGRATION을 참조하세요.

시작하기

이 섹션은 Snowflake에서 Power BI 보안 통합을 만들고 Power BI를 통해 Snowflake에 접근하는 방법을 설명해요.

Power BI 보안 통합 만들기

Power BI 서비스가 Snowflake에 연결하기 위해 Power BI 게이트웨이를 사용하거나 인증에 Snowflake 사용자 이름과 비밀번호를 사용한다면 이 단계는 필요하지 않아요.

SSO를 통해 Power BI로 Snowflake 데이터에 접근하려면 아래와 같이 CREATE SECURITY INTEGRATION을 사용해 Power BI용 보안 통합을 만들어야 해요.

보안 통합은 external_oauth_issuer 매개변수에 올바른 값이 있어야 해요. 이 값의 일부는 Microsoft Entra 테넌트에 매핑돼요. 이 값은 Power BI 테넌트의 정보 섹션에서 찾을 수 있어요.

조직이 Power BI 서비스의 고급 배포를 사용한다면 Microsoft Entra ID 관리자에게 Issuer URL을 구성할 때 사용할 Microsoft Entra 테넌트의 올바른 값을 확인하세요.

예를 들어 Microsoft Entra 테넌트 ID가 a828b821-f44f-4698-85b2-3c6749302698이라면 AZURE_AD_ISSUER 값을 https://sts.windows.net/a828b821-f44f-4698-85b2-3c6749302698/와 유사하게 구성하세요. 값 끝에 슬래시(즉, /)를 포함하는 것이 중요해요.

AZURE_AD_ISSUER 값을 구성한 후 CREATE SECURITY INTEGRATION 명령을 실행하세요.

Snowflake 계정이나 Microsoft Power BI 서비스가 Microsoft Azure Government 클라우드 리전에 있다면 external_oauth_audience_list 속성 값을 https://analysis.usgovcloudapi.net/powerbi/connector/Snowflake로 설정하세요.

Microsoft Power BI용 보안 통합

create security integration powerbi
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = '<AZURE_AD_ISSUER>'
    external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
    external_oauth_audience_list = ('https://analysis.windows.net/powerbi/connector/Snowflake', 'https://analysis.windows.net/powerbi/connector/snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'

Microsoft Power BI용 Microsoft Azure Government 보안 통합

create security integration powerbi_mag
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = '<AZURE_AD_ISSUER>'
    external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
    external_oauth_audience_list = ('https://analysis.usgovcloudapi.net/powerbi/connector/Snowflake', 'https://analysis.usgovcloudapi.net/powerbi/connector/snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'

계정 관리자(즉, ACCOUNTADMIN 역할 보유자) 또는 전역 CREATE INTEGRATION 권한이 있는 역할만 이 SQL 명령을 실행할 수 있어요.

보안 통합 매개변수 값은 대소문자를 구분하며, 통합에 넣는 값은 환경의 값과 일치해야 해요. 대소문자가 일치하지 않으면 액세스 토큰이 검증되지 않아 인증 시도가 실패할 수 있어요.

EXTERNAL_OAUTH_AUDIENCE_LIST 속성에 지정하는 목록 값은 대문자와 소문자 Snowflake 이름이 있는 URL이에요. Microsoft가 연결을 형성할 때 기대할 수 있는 값에 따라 클라이언트가 Snowflake에 연결할 수 있도록 이 목록에 두 URL을 모두 포함하세요.

모든 매개변수 값이 정확히 일치하는지 확인하세요. 예를 들어 <AZURE_AD_ISSUER> URL 값이 백슬래시로 끝나지 않는데 URL 끝에 백슬래시 문자가 있는 채로 보안 통합이 만들어지면 오류 메시지가 발생해요. 그럴 경우 보안 통합 객체를 삭제(DROP INTEGRATION 사용)한 후 올바른 URL 값으로 객체를 다시 만들어야 해요(CREATE SECURITY INTEGRATION 사용).

환경에서 사용자의 UPN 속성 값이 Snowflake의 login_name 대신 사용자의 이메일 필드와 일치한다면 login_name을 email_address로 바꾸세요. 예를 들어:

create security integration powerbi
    type = external_oauth
    ...
    external_oauth_snowflake_user_mapping_attribute = 'email_address';

B2B 게스트 사용자와 Power BI SSO 사용하기

Microsoft Entra ID B2B(business to business) 게스트 사용자가 Microsoft Power BI에서 SSO를 사용해 Snowflake에 접근할 수 있게 하려면 EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 속성 값을 'unique_name'으로 설정하세요. 예를 들어:

create security integration powerbi
  type = external_oauth
  enabled = true
  external_oauth_type = azure
  external_oauth_issuer = '<AZURE_AD_ISSUER>'
  external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
  external_oauth_audience_list = ('https://analysis.windows.net/powerbi/connector/Snowflake', 'https://analysis.windows.net/powerbi/connector/snowflake')
  external_oauth_token_user_mapping_claim = 'unique_name'
  external_oauth_snowflake_user_mapping_attribute = 'login_name';

자세한 내용은 B2B 사용자 이해를 참조하세요.

External OAuth 보안 통합 수정하기

보안 통합에 ALTER 명령문을 실행해 External OAuth 보안 통합을 업데이트할 수 있어요.

자세한 내용은 ALTER SECURITY INTEGRATION (External OAuth)을 참조하세요.

Snowflake로 Power BI SSO에서 2차 역할 사용하기

주 역할에 대한 원하는 스코프는 외부 토큰에 전달돼요. 이 역할은 사용자에게 부여된 특정 역할(session:role:<role_name>)이에요.

기본적으로 세션에서 사용자의 기본 2차 역할(즉, DEFAULT_SECONDARY_ROLES 사용자 속성)이 활성화되지 않아요.

세션에서 사용자의 기본 2차 역할을 활성화하고 External OAuth를 사용하는 동안 USE SECONDARY ROLES 명령을 실행할 수 있게 하려면 이 단계를 완료하세요:

  1. 연결에 대한 보안 통합을 구성해요. 보안 통합을 만들 때([CREATE SECURITY INTEGRATION] 사용) 또는 나중에([ALTER SECURITY INTEGRATION] 사용) EXTERNAL_OAUTH_ANY_ROLE_MODE 매개변수 값을 ENABLE 또는 ENABLE_FOR_PRIVILEGE로 설정하세요.

Snowflake로 Power BI SSO에서 Client Redirect 사용하기

Snowflake는 Snowflake로 Power BI SSO에서 Client Redirect 사용을 지원해요.

자세한 내용은 클라이언트 연결 리디렉션을 참조하세요.

Power BI SSO에서 복제 사용하기

Snowflake는 소스 계정에서 대상 계정으로의 External OAuth 보안 통합 복제 및 장애 조치/장애 복구를 지원해요.

자세한 내용은 여러 계정에 걸친 보안 통합 및 네트워크 정책 복제를 참조하세요.

Power BI에서 Snowflake로 연결하기

Power BI에서 Snowflake로 연결하는 방법에 대한 자세한 내용은 Power BI 문서를 참조하세요.

External OAuth에서 네트워크 정책 사용하기

현재 네트워크 정책은 External OAuth 보안 통합에 추가할 수 없으므로 Power BI 통합에만 적용되는 네트워크 정책을 정의할 수 없어요. 하지만 전체 Snowflake 계정에 광범위하게 적용되는 네트워크 정책은 여전히 구현할 수 있어요. 네트워크 정책에 포함해야 할 Microsoft IP 범위에 대한 정보는 (이 주제의) 사전 요구 사항 섹션을 참조하세요.

문제 해결

  • 웨어하우스 재개: 특정 사용자가 일시 중지된 웨어하우스를 사용하려 하면 Microsoft Power BI는 오류 메시지에 설명되지 않은 오류 메시지를 표시해요. 오류 메시지를 해결하려면 웨어하우스가 자동으로 재개되도록 확인하고 필요한 경우 구성하세요. 자세한 내용은 웨어하우스 시작 또는 재개를 참조하세요.
  • Power BI를 Snowflake에 연결하는 동안 오류가 발생할 수 있어요. 오류 메시지에 따라 Microsoft, Snowflake 또는 둘 모두에서 문제 해결이 필요할 수 있어요.

오류 메시지는 Power BI에 표시되는 Snowflake가 반환할 수 있는 일반적인 오류 메시지를 설명해요. 로그인 기록은 사용자가 마지막으로 Snowflake에 접근했는지, 언제 접근했는지 Snowflake로 확인하는 방법을 설명해요.

오류 메시지

다음 표는 사용자가 Power BI에서 인증하는 동안 Snowflake가 반환하는 오류 메시지를 설명해요:

동작 오류 메시지 문제 해결 조치
잘못된 액세스 토큰 또는 audience 값 Failed to update data source credentials: ODBC:ERROR [28000] Invalid OAuth access token. []. external_oauth_issuer 매개변수가 올바른 값을 포함하는지 확인하세요. Microsoft Entra ID에서 액세스 토큰이 최신인지 확인하세요.
AAD 사용자가 Snowflake 계정에 없음 Failed to update data source credentials: ODBC:ERROR [28000] Incorrect username or password was specified. 사용자가 Snowflake에 존재하는지 확인하세요(name 또는 login_name 속성 값이 Microsoft Entra ID의 사용자 UPN 값과 일치). 사용자를 추가하는 경우 UPN 값이 Microsoft Entra ID에 이미 존재하지 않는지 확인하세요.
Snowflake 사용자는 있지만 비활성화됨 Failed to update data source credentials: ODBC:ERROR [28000] User access disabled. Contact your local system administrator. Snowflake에서 desc user <username>을 실행해 disabled 속성이 true로 설정됐는지 확인하세요. 이 사용자를 허용하려면 alter user <username> set disabled = true;를 실행하세요. Power BI에서 Snowflake에 다시 접근해 보세요.
Snowflake가 Power BI에서 만료된 AAD 토큰을 받음 Failed to update data source credentials: ODBC:ERROR [28000] OAuth access token expired. []. Snowflake 지원에 문의하세요.
Snowflake 계정에서 보안 통합이 만들어지지 않았거나 비활성화됨 Failed to update data source credentials: ODBC:ERROR [28000] OAuth Authz Server Integration is not enabled. desc <security_integration_name>을 실행해 보안 통합을 확인하거나 다시 만드세요.
사용자에게 기본 역할이 설정되지 않음 Failed to update data source credentials: ODBC: ERROR [28000] No default role has been assigned to the user, contact a local system administrator to assign a default role and retry. 사용자의 기본 역할을 설정하세요.
사용자에게 기본 역할이 부여되지 않음 Test failed because of 250001 (08001): Failed to connect to DB: . User's configured default role '' is not granted to this user. Contact your local system administrator, or attempt to login using a CLI client with a connect string selecting another role, e.g. PUBLIC. 사용자의 기본 역할을 확인하고 부여하세요.

로그인 기록

사용자가 Power BI에는 접근할 수 있지만 Snowflake 세션을 인스턴스화할 수 없다면, 지원되는 커넥터 또는 Snowflake 웹 인터페이스를 사용해 다음 명령을 실행해 사용자가 마지막으로 Snowflake에 접근한 시점을 확인할 수 있어요. 성공한 인증만 기록된다는 점에 유의하세요.

use role accountadmin;
select *
from table(information_schema.login_history(dateadd('hours',-1,current_timestamp()),current_timestamp()))
order by event_timestamp;

각 결과에 대해 USER_NAME과 FIRST_AUTHENTICATION_FACTOR 열을 평가하세요.

  • USER_NAME 값은 사전 요구 사항 섹션에서 설명한 속성 매핑과 일치해야 해요.
  • FIRST_AUTHENTICATION_FACTOR는 OAUTH_ACCESS_TOKEN으로 설정돼야 해요.

더 알아보기