Microsoft Power BI SSO로 Snowflake에 연결

문주은·2025년 3월 21일

1. Create 사용자 계정

create user {username} password={password} 
DEFAULT_ROLE=AAD_PROVISIONER 
TYPE = LEGACY_SERVICE;
  • Snowflake에서 CREATE USER 명령을 실행하면, 기본적으로 현재 세션의 역할이 해당 사용자의 OWNER로 설정
    ex) 현재 ENGINEER role을 사용하고 있을 때 해당 명령어를 실행하면 해당 user의 owner가 ENGINEER로 된다.
  • 모든 계정 관리는 ACCOUNTADMIN에서 진행하기 때문에 owner 변경
    GRANT OWNERSHIP ON USER {username} TO ROLE ACCOUNTADMIN;

2. Power BI SSO Authentication

Snowflake와 EntraID(구 Azure AD)간 SSO/MFA Provisioning 진행중.
Power BI account 역시 Snowflake와 연동하기 위한 작업 추가 진행 필요.
TODO
1) EntraID에 PBI account 등록
2) network policy에 PBI 서버 등록

2-1. create user

Entra ID에 저장되어져 있는 Power BI system user를 snowflake 내에 등록
(위 1번과 동일)

2-2. Prerequisites

  • 현재 Snowflake 내 사내에서만 접근할 수 있는 Network 정책 설정되어 있음.
  • Power BI가 사용하는 Azure의 특정 리전 IP 범위를 허용
    ex) North Central US 리전 사용한다면, 해당 IP 주소 허용 필요.
  • https://www.microsoft.com/en-us/download/details.aspx?id=56519
    ↑ 여기서 PowerBI.NorthCentralUS 다운로드

2-3. Considerations

  • 현재 POWER BI 게이트웨이 사용중.
  • ACCOUNTADMIN, ORGADMIN, SECURITYADMIN 시스템 역할보다 낮은 권한의 역할 사용.

2-4. Security Integration

Power BI에서 SSO를 사용할 수 있도록 Snowflake에서 다음 SQL 명령을 실행하여 보안 통합(Security Integration) 을 생성 필요
보안 통합 생성 (일반적인 Azure 환경)

CREATE SECURITY INTEGRATION powerbi
    TYPE = external_oauth
    ENABLED = true
    EXTERNAL_OAUTH_TYPE = 'https://sts.windows.net/{tenant-id}/'
    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 = 'email_address';
  • EXTERNAL_OAUTH_TYPE = azure: OAuth 공급자로 Microsoft Entra ID(Azure AD)를 사용함
  • EXTERNAL_OAUTH_ISSUER: Azure AD 테넌트의 발급자 URL (Power BI 테넌트 정보에서 확인 가능)
  • EXTERNAL_OAUTH_JWS_KEYS_URL: Microsoft에서 JWT 서명 키를 가져오는 URL
  • EXTERNAL_OAUTH_AUDIENCE_LIST: Power BI 서비스에서 Snowflake 인증 요청을 보낼 때 사용하는 URL 목록 (대/소문자 구분)
  • EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM: Azure AD에서 사용자의 UPN (User Principal Name) 값을 Snowflake의 로그인 사용자로 매핑
  • EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE: Snowflake에서 사용자를 매핑할 속성 (login_name 기본값, 필요 시 email_address 변경 가능)

2-5. PowerBI <-> Snowflake 간 인증 확인

Power BI와 Snowflake 간의 인증을 올바르게 설정하려면 Azure AD 테넌트 ID 를 확인
Azure AD 테넌트 ID 확인 방법

  • Power BI 포털에 로그인
  • Power BI 설정(⚙) → "정보(About)" 메뉴 클릭
  • 테넌트 ID(Tenant ID) 확인
  • 위 테넌트 ID를 EXTERNAL_OAUTH_ISSUER 값에 적용
    예: https://sts.windows.net/<TENANT_ID>/
    예시
    Azure AD 테넌트 ID가 a828b821-f44f-4698-85b2-3c6749302698 인 경우:
    주의: 슬래시(/)로 끝나야 함!!
    EXTERNAL_OAUTH_ISSUER = 'https://sts.windows.net/a828b821-f44f-4698-85b2-3c6749302698/' 

Grant appropriate role to pbi user

GRANT ROLE ENGINEER TO USER "PBI@{ACCOUNT_NM}ONMICROSOFT.COM";
ALTER USER "PBI@{ACCOUNT_NM}ONMICROSOFT.COM" SET DEFAULT_ROLE=ENGINEER;

2-6. Snowflake network 정책 설정

Power BI가 Snowflake에 연결할 수 있도록 네트워크 정책을 설정해야 함.

  • Azure에서 Power BI 공용 IP 주소 범위 확인
    2-2에서 다운로드 받은 파일에서 addressPrefixes 목록 → IP 주소 범위 확인

  • Snowflake 네트워크 정책에 Power BI IP 주소 추가
    (Azure에서 Power BI, SCIM 등을 사용할 경우 관련된 IP 주소 모두 허용 필요)

    USE ROLE ACCOUNTADMIN;
    #Snowflake 계정에 네트워크 정책을 적용하는 명령
    ALTER ACCOUNT SET ENFORCE_NETWORK_RULES_FOR_INTERNAL_STAGES = true;
    #network policy 적용
    CREATE NETWORK POLICY allow_pb_public_access
    ALLOWED_IP_LIST = ('{public_ip_address}');
    #Snowflake 계정에 금방 만든 network policy 적용
    ALTER ACCOUNT SET NETWORK_POLICY = allow_pb_public_access;
    #만약 allowed_ip_list에 추가하고 싶다면
    ALTER NETWORK POLICY allow_pb_public_access
      SET ALLOWED_IP_LIST = (
        -- azure power bi
        '20.51.0.204/30',
        '20.51.1.32/28',
        '20.51.5.4/30',
        '20.51.5.192/26',
        '40.80.184.70/31',
        '40.80.188.48/28',
        '40.80.188.64/27',
        '40.80.188.128/25',
        '40.80.189.0/24',
        '135.232.168.0/27',
        '172.183.7.208/28'
    );
    ALTER ACCOUNT SET NETWORK_POLICY = allow_pb_public_access;
  • 각 ip_address 는 CIDR(Classless Inter-Domain Routing) 표기법을 사용하여 다양한 주소를 포함

  • public_ip_address 만 포함하도록 변경.

  • Power BI는 일주일에 한번씩 public IP가 변경되기 때문에 Snowflake network policy에 allow_ip_list를 변경하는 작업 필요



Snowflake reference) https://docs.snowflake.com/ko/user-guide/oauth-powerbi
PowerBI reference) https://learn.microsoft.com/en-us/power-bi/connect-data/service-connect-snowflake

profile
Data Engineer

0개의 댓글