Apache Superset

[Superset/k8s] 대시보드 iframe 임베드

비번변경 2024. 1. 9. 18:58

개요

Superset으로 구성한 대시보드를 다른 웹 페이지에 iframe으로 임베드하려고 한다. 관련하여 설정 방법을 적어둔다.

 

 

+ 참고 사항

1. 직접 설정한 게 아니라 이미 구성되어 있는 설정과 구글링의 힘을 빌려 정리한다.

2. superset의 버전에 따라 방법이 다를 수 있다. 이 글의 superset 버전은 3.0.1이며, AWS EKS에서 동작한다.

3. superset에서 제공하는 Superset Embeded SDK 기능은 사용하지 않았다.

 

 

1. superset_config.py 구성

로그아웃한 사용자가 대시보드에 접근할 수 있도록 superset 구성 파일을 정의한다.

# 로그아웃한 사용자의 superset 접근 허용
PUBLIC_ROLE_LIKE = "Public" # public 권한 부여

# OAuth 사용자에게 public 역할 할당
AUTH_ROLE_PUBLIC = "Public"

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = False

# 기능 설정
DEFAULT_FEATURE_FLAGS = {
  # 대시보드에 역할 접근 허용
  "DASHBOARD_RBAC": True,  # it's obligatory
}

Helm Chart로 배포하였으므로 실제로는 values.yaml 파일의 configOverrides을 통해 전달했다.

https://github.com/apache/superset/blob/master/helm/superset/values.yaml#L135

설정을 변경했으므로 서비스를 재시작한다.

 

 

2. 접근 Role에 필요 권한 부여

불특정 다수가 대시보드에 접근할 수 있어야 한다. superser_config.py에서 로그아웃한 사용자의 Role을 Public으로 지정했으므로 Public Role에 필요한 권한을 적절하게 부여해야 한다.

 

1. Settings > List Roles 접근

 

2. Public 역할 편집

 

3. 권한 편집

필요한 권한을 부여한다.

필요 권한은 아래와 같다. 전부 필요한 권한은 아닐 수도 있다.

can read on Chart, can read on Dataset, can read on Dashboard, can read on DashboardPermalinkRestApi, can get embedded on Dashboard, can explore on Superset, can slice on Superset, can csv on Superset, can dashboard permalink on Superset, can dashboard on Superset, can explore json on Superset, menu access on Dashboards, all datasource access on all_datasource_access

 

 

대시보드 설정

1. 대시보드 공개

다른 사이트에 임베드할 대시보드는 published 상태여야 한다

만약 대시보드 상태가 Draft라면 대시보드에 접근해 상태를 변경한다.

 

2. 대시보드 URL 확인

기본적으로 대시보드는 id 값으로 접근할 수 있다.

https://<example.superset.com>/superset/dashboard/<dashboard-id>/

만약 접근 URL을 설정하고 싶다면 대시보드 설정을 편집하여 URL_SLUG를 지정한다.

URL_SLUG를 설정한 대시보드는 아래와 같이 접근할 수 있다.

https://<example.superset.com>/superset/dashboard/<URL_SLUG>/

대시보드에 임베드할 때는 standalone 옵션을 true로 설정하여 사용한다.

https://<example.superset.com>/superset/dashboard/<URL_SLUG>/?standalone=true

 

 

iframe 코드 작성

웹에 표시할 HTML을 작성한다.

<iframe id="ix_iframe" src="https://<example.superset.com>/superset/dashboard/<URL_SLUG>/?standalone=true" border="0" frameborder="0" width="100%" height="1400px"/>

 

 

X-Frame-Option

만약 임베드한 페이지에서 접근을 허용하지 않는다면 ingress에 아래와 같이 설정한다. 

ingress:
  enabled: true
  ingressClassName: nginx
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "ALLOW-FROM https://subdomain.example.com/"; # This just disable x-frame-options

 

 

참고 문서

https://www.restack.io/docs/superset-knowledge-apache-superset-embed-iframe

https://tedparkdev.tistory.com/12

 

728x90