Tableau의 연결된 앱을 구성하여 내장된 콘텐츠에 대한 SSO 지원

Tableau Server 버전 2022.1부터 Tableau의 연결된 앱을 사용하면 Tableau Server 사이트와 Tableau 콘텐츠가 내장된 외부 응용 프로그램 간의 명시적 신뢰 관계를 수립하여 원활하고 안전한 인증 경험을 지원할 수 있습니다. Tableau Server 2022.3에서 Tableau의 연결된 앱 기능이 REST API 권한 부여를 지원하도록 확장되었습니다. 그리고 Tableau Server 2023.3부터는 메타데이터 API에서 연결된 앱을 통한 REST API 인증이 인식됩니다.

연결된 앱은 다음과 같은 이점을 제공합니다.

  • 내장할 수 있는 콘텐츠와 콘텐츠를 내장할 수 있는 위치에 대한 액세스 제한
  • IdP(ID 공급자) 통합 없이 SSO(Single Sign-On)를 사용하여 내장된 콘텐츠에 액세스할 수 있는 기능 제공
  • 외부 응용 프로그램에서 직접 인증할 수 있는 기능 제공
  • JWT(JSON 웹 토큰)를 사용하여 사용자 대신 Tableau REST API(및 메타데이터 API, Tableau Server 2023.3부터 해당)에 대한 액세스 권한을 프로그래밍 방식으로 부여

참고:

  • Tableau Server 버전 2021.4에서는 Tableau REST API에서 연결된 앱 메서드(링크가 새 창에서 열림)를 사용하여 Tableau Server에서 UI 없이 연결된 앱 기능을 사용할 수 있게 되었습니다.
  • 연결된 앱을 통한 내장을 사용하려면 HTTP 트래픽에 SSL을 사용하도록 Tableau Server를 구성해야 합니다.
  • 세션 토큰이 유효하려면 외부 응용 프로그램의 시계와 외부 응용 프로그램을 호스트하는 서버의 시계가 UTC(협정 세계시)로 설정되어야 합니다. 두 클록이 다른 표준 시간대를 사용하는 경우 연결된 앱을 신뢰할 수 없게 됩니다.
  • Tableau의 연결된 앱과 Salesforce의 연결된 앱은 서로 다르며 다른 기능을 제공합니다. 현재 Tableau의 연결된 앱은 Tableau 뷰 및 메트릭을 외부 응용 프로그램에 내장하는 데 최적화되어 있습니다. (2023년 10월에 Tableau는 Tableau CloudTableau Server 버전 2023.3에서 메트릭을 내장하는 기능을 사용 중지합니다.)

연결된 앱의 작동 방식

Tableau Server 사이트와 외부 응용 프로그램 간의 신뢰 관계는 Tableau의 연결된 앱에 의해 제공되고 외부 응용 프로그램에 의해 서명되는 공유 암호를 사용하는 JWT(JSON Web Token) 표준의 인증 토큰을 통해 설정되고 확인됩니다.

연결된 앱의 주요 구성 요소

연결된 앱의 다음 구성 요소는 외부 응용 프로그램의 JWT와 함께 작동하여 사용자를 인증하고 내장된 콘텐츠를 표시합니다.

  • 암호: 암호는 Tableau와 외부 응용 프로그램이 공유하는 키입니다. JWT를 형성하는 서명에 사용됩니다. 암호는 연결된 앱을 사용하여 인증을 내장하는 경우 필요합니다. 암호는 연결된 앱에서 만들 수 있고 만료되지 않으며 삭제되기 전까지 유효한 상태로 유지됩니다.
  • 도메인 허용 목록: 각 연결된 앱에서 허용되는 도메인 목록을 지정할 수 있습니다. 연결된 앱을 통해 내장된 Tableau 콘텐츠는 지정된 도메인에서만 허용됩니다. 따라서 비즈니스에서 보호하고 승인하는 도메인에서만 콘텐츠가 노출됩니다.
  • 액세스 수준: 연결된 앱을 단일 프로젝트 또는 전체 프로젝트에 연결하여 연결된 앱을 통해 내장할 수 있는 콘텐츠를 지정할 수 있습니다. 단일 프로젝트를 지정하는 경우 선택한 프로젝트의 콘텐츠만 연결된 앱을 통해 내장될 수 있습니다.

연결된 앱 워크플로우

아래의 다이어그램은 외부 응용 프로그램(웹 서버 및 웹 페이지)와 연결된 앱 간의 인증이 작동하는 방식을 보여 줍니다.

  1. 사용자가 웹 페이지를 방문: 사용자가 웹 페이지의 내장된 콘텐츠를 방문하면 웹 페이지가 외부 응용 프로그램으로 GET 요청을 전송하여 해당 웹 페이지의 HTML을 검색합니다.
  2. 외부 응용 프로그램이 인증 토큰을 구성: 외부 응용 프로그램은 JWT를 구성합니다. JWT에는 연결된 앱의 암호(추가 JWT 요구 사항은 아래의 3단계 참조)와 내장된 콘텐츠에 대한 사용자 액세스 범위가 포함됩니다. 암호는 외부 응용 프로그램에 의해 서명되며 이후 단계에서 신뢰 관계를 확인하는 데 사용됩니다.
  3. 외부 응용 프로그램이 인증 토큰으로 응답: 외부 응용 프로그램은 웹 페이지가 호출한 내장된 콘텐츠의 URL에 포함되는 JWT를 통해 페이지에 응답합니다.
  4. 웹 페이지에서 Tableau의 콘텐츠를 요청: 내장된 콘텐츠를 로드하기 위해 웹 페이지는 내장된 콘텐츠의 URL을 호출합니다. 그러면 GET 요청이 Tableau로 전송됩니다.
  5. Tableau가 토큰을 검증: Tableau는 JWT를 수신하고 연결된 앱과 JWT에 사용된 공유 암호를 식별하여 외부 응용 프로그램과의 신뢰 관계를 확인합니다. 그런 다음 사용자에 대한 세션을 만듭니다. 이 세션은 JWT에 정의된 내장 범위를 준수할 뿐만 아니라 연결된 앱에 지정된 제한 사항(허용된 도메인 및 허용된 프로젝트 등)도 준수합니다.
  6. Tableau에서 제한된 내장 컨텍스트에 따라 콘텐츠를 반환: 내장된 콘텐츠는 페이지가 허용된 도메인 아래에 있고 콘텐츠가 허용된 프로젝트(해당하는 경우)에 게시되는 경우에만 로드됩니다. 인증된 사용자는 JWT에 정의된 범위까지만 내장된 콘텐츠와 상호 작용할 수 있습니다.

연결된 앱 만들기

1단계: 연결된 앱 만들기

Tableau Server의 설정 페이지에서 연결된 앱을 만듭니다.

  1. 서버 관리자로 Tableau Server에 로그인합니다.

  2. 왼쪽 패널에서 설정 > 연결된 앱을 선택한 다음 새 연결된 앱 단추를 클릭합니다.

  3. 연결된 앱 만들기 대화 상자에서 다음 중 하나를 수행합니다.
    1. REST API 권한 부여 워크플로우(인증을 위해 REST API를 사용하는 메타데이터 API 워크플로우 포함)의 경우 연결된 앱의 이름 텍스트 상자에 연결된 앱의 이름을 입력하고 만들기 단추를 클릭합니다.

      참고: REST API 및 메타데이터 API 권한 부여에 대해 연결된 앱을 구성할 때 액세스 수준도메인 허용 목록은 무시해도 됩니다.

    2. 내장 워크플로우의 경우 다음을 수행합니다.

      1. 연결된 앱 이름 텍스트 상자에 연결된 앱의 이름을 입력합니다.

      2. 적용 대상 드롭다운 메뉴에서 모든 프로젝트 또는 단일 프로젝트만을 선택하여 내장할 수 있는 뷰 또는 메트릭을 제어합니다. "단일 프로젝트만" 옵션을 선택한 경우 범위를 지정할 특정 프로젝트를 선택합니다. 이 2가지 옵션에 대한 자세한 내용은 액세스 수준(내장 워크플로우만 해당)를 참조하십시오.

        참고:

      3. 도메인 허용 목록에서 아래의 도메인 서식 지정에 설명된 규칙을 사용하여 뷰 또는 메트릭을 내장할 수 있는 위치를 제어합니다.

      4. 작업을 마치면 만들기 단추를 클릭합니다.

  4. 연결된 앱 이름 옆의 동작 메뉴를 클릭하고 사용을 선택합니다. 연결된 앱은 보안을 위해 앱을 만들 때 기본적으로 사용되지 않도록 설정됩니다.

  5. 연결된 앱의 ID(클라이언트 ID라고도 함)을 기록하여 아래의 3단계에서 사용합니다.

2단계: 암호 생성

연결된 각 앱에 대해 총 2개의 암호를 생성할 수 있습니다. 두 번째 암호를 암호 교체용으로 사용하여 암호가 손상된 경우 문제를 방지할 수 있습니다.

  1. 1단계에서 만든 연결된 앱의 세부 정보 페이지에서 새 암호 생성 단추를 클릭합니다.

  2. 아래의 3단계에서 사용할 암호 ID와 암호 값을 기록합니다.

3단계: JWT 구성

암호를 생성한 후 외부 응용 프로그램에서 유효한 JWT를 보내야 할 수 있습니다. JWT는 양방 간에 안전하게 정보를 전송하는 데 사용되는 표준입니다. JWT는 외부 응용 프로그램에 의해 서명되어 Tableau Server으로 안전하게 정보를 전송합니다. JWT는 연결된 앱, 세션의 대상 사용자 및 사용자의 액세스 수준을 참조합니다.

유효한 JWT에는 다음 정보가 포함됩니다.

  • 1단계의 연결된 앱 ID(클라이언트 ID)
  • 2단계에서 생성한 암호 ID 및 암호 값

  • 등록된 클레임 및 헤더:

    클레임이름설명 또는 필요한 값
    "kid"Secret ID필수입니다(헤더에 필요). 연결된 앱 암호 ID입니다.
    "iss"Issuer필수입니다(헤더에 필요). 신뢰할 수 있는 연결된 앱 및 서명 키를 식별하는 고유한 발급자 URI입니다.
    "alg"Algorithm필수입니다(헤더에 필요). JWT 서명 알고리즘입니다. HS256만 지원됩니다.
    "sub"Subject인증된 Tableau Server 사용자의 사용자 이름입니다.
    "aud"Audience값은 "tableau"여야 합니다.
    "exp"Expiration Time

    유효한 JWT는 만료되지 않아야 합니다. JWT의 만료 시간은 구성된 최대 유효 기간 안에 있어야 합니다. 최대 유효 기간은 tsm의 vizportal.oauth.connected_apps.max_expiration_period_in_minutes 명령을 사용하여 구성할 수 있습니다.

    "jti"JWT ID클레임으로 필요합니다. JWT ID 클레임은 JWT의 고유 식별자를 제공하며 대/소문자를 구분합니다.
    "scp"

    중요: "scope"를 사용하지 마십시오.

    Scope내장 워크플로우의 경우 지원되는 값은 다음과 같습니다.

    "tableau:views:embed"
    "tableau:views:embed_authoring"(Tableau Server 2022.3에 추가됨)
    "tableau:metrics:embed"(Tableau Server 2023.3에서 사용 중지됨)
    "tableau:ask_data:embed"(Tableau Server 버전 2023.1에 추가됨)

    참고:

    • 값을 목록 유형으로 전달해야 합니다.
    • tableau:views:embed의 경우 범위는 Tableau Server에서 이미 구성된 사용자의 사용 권한을 따르며 원본 뷰에서 사용할 수 있는 경우 내장된 뷰에서 도구와 상호 작용할 수 있습니다.
    • 내장 코드에는 툴바 매개 변수를 제외하는 것이 좋습니다. 자세한 내용은 아래에서 알려진 문제(내장 워크플로우만 해당)를 참조하십시오.

    REST API 권한 부여 워크플로우의 경우 JWT 권한 부여를 지원하는 REST API 메서드를 참조하십시오.

    인증을 위해 REST API를 사용하는 메타데이터 API 워크플로우의 경우 유일하게 지원되는 범위는 tableau:content:read입니다.

예제 JWT

다음은 Java 및 Python 언어의 예제 JWT입니다. Java 및 Python 예제에는 각각 nimbus-jose-jwt 라이브러리와 PyJWT 라이브러리가 사용됩니다.

Java

import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.*;
import com.nimbusds.jwt.*;

import java.util.*;

...
				
String secret = "secretvalue";
	String kid = "connectedAppSecretId";
	String clientId = "connectedAppClientId";
	List<String> scopes = new
ArrayList<>(Arrays.asList("tableau:views:embed"));
	String username = "username";
	JWSSigner signer = new MACSigner(secret);
	JWSHeader header = new
JWSHeader.Builder(JWSAlgorithm.HS256).keyID(kid).customParam("iss", clientId).build();
	JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
		.issuer(clientId)
		.expirationTime(new Date(new Date().getTime() + 60 * 1000)) //expires in 1 minute
		.jwtID(UUID.randomUUID().toString())
		.audience("tableau")
		.subject(username)
		.claim("scp", scopes)
		.build();
	SignedJWT signedJWT = new SignedJWT(header, claimsSet);
	signedJWT.sign(signer);
	model.addAttribute("token", signedJWT.serialize());

Python

import jwt
token = jwt.encode(
	{
		"iss": connectedAppClientId,
		"exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=5),
		"jti": str(uuid.uuid4()),
		"aud": "tableau",
		"sub": user,
		"scp": ["tableau:views:embed", "tableau:metrics:embed"]
	},
		connectedAppSecretKey,
		algorithm = "HS256",
		headers = {
		'kid': connectedAppSecretId,
		'iss': connectedAppClientId
        }
  )

JWT를 구성한 후 외부 응용 프로그램에서 코드를 실행하면 토큰이 생성됩니다.

4단계: 다음 단계

내장 워크플로우의 경우

JWT를 구성한 후에는 외부 응용 프로그램에 내장 코드를 추가해야 합니다. 위의 3단계에서 구성한 유효한 JWT를 외부 응용 프로그램에서 호출하는 웹 구성 요소에 포함해야 합니다.

Tableau 콘텐츠 내장에 대한 자세한 내용은 다음을 참조하십시오.

참고: 사용자가 내장된 콘텐츠에 액세스할 때 성공적으로 인증하려면, 타사 쿠키를 허용하도록 브라우저를 구성해야 합니다.

REST API 권한 부여 워크플로우의 경우

JWT를 구성한 후에는 유효한 JWT를 REST API 로그인 요청에 추가해야 액세스 권한이 부여됩니다. 자세한 내용은 연결된 앱의 액세스 범위를 참조하십시오.

메타데이터 API 워크플로우의 경우

JWT를 구성한 후에는 유효한 JWT를 REST API 로그인 요청에 추가해야 합니다. 자세한 내용은 연결된 앱의 액세스 범위를 참조하십시오.

연결된 앱 관리

연결된 앱 페이지는 사이트의 모든 연결된 앱을 관리할 수 있는 위치입니다. 연결된 앱 만들기, 삭제 및 사용 해제와 같은 작업과 기존 암호가 손상된 경우 기존 암호를 해지하거나 새 암호를 생성하는 등의 작업을 수행할 수 있습니다.

  1. 서버 또는 사이트 관리자로 Tableau Server에 로그인합니다.

  2. 왼쪽 패널에서 설정 > 연결된 앱을 선택합니다.

  3. 관리하려는 연결된 앱 옆의 확인란을 선택하고 다음 중 하나 이상을 수행합니다.

    • 조직의 보안 정책에 지정된 교체 일정에 따라 새 암호를 생성합니다. 추가 암호를 생성하려면 연결된 앱의 이름을 클릭한 다음 새 암호 생성 단추를 클릭합니다. 연결된 앱에는 최대 2개의 암호를 사용할 수 있습니다. 두 암호 모두 동시에 활성화될 수 있고 만료되지 않으며 삭제되기 전까지 유효한 상태로 유지됩니다.

    • 연결된 앱의 이름을 클릭하고 앱이 만들어진 시기, ID, 프로젝트 및 도메인 범위와 암호를 확인하여 연결된 앱의 세부 정보를 검토합니다.

    • 동작 메뉴에서 편집을 선택하여 프로젝트 범위 또는 도메인을 변경합니다. 변경을 수행하고 업데이트를 클릭합니다.

      참고: 프로젝트 또는 도메인 범위를 변경하는 경우 내장된 콘텐츠가 새 프로젝트 또는 새 도메인에 없으면 내장된 뷰 또는 메트릭을 표시할 수 없으며 사용자가 내장된 콘텐츠에 액세스하려고 하면 오류가 표시됩니다.

    • 연결된 앱의 이름을 클릭하여 암호를 삭제합니다. 연결된 앱의 페이지에서 암호 옆의 동작을 클릭하고 삭제를 선택합니다. 확인 대화 상자에서 삭제를 다시 선택합니다.

      참고: 연결된 앱의 암호가 외부 응용 프로그램에 사용되는 경우 암호가 삭제된 후에는 내장된 뷰 또는 메트릭을 표시할 수 없습니다. 자세한 내용은 아래의 연결된 앱 사용 해제 또는 삭제 또는 암호 삭제의 효과를 참조하십시오.

    • 동작 메뉴에서 사용 안 함을 선택하여 연결된 앱을 사용하지 않도록 설정합니다. 연결된 앱이 외부 응용 프로그램에 사용되는 경우 연결된 앱이 사용되지 않도록 설정된 후에는 내장된 뷰 또는 메트릭을 표시할 수 없습니다. 자세한 내용은 아래의 연결된 앱 사용 해제 또는 삭제 또는 암호 삭제의 효과를 참조하십시오.

연결된 앱 사용 해제 또는 삭제 또는 암호 삭제의 효과

연결된 앱을 통해 사용자에게 내장된 뷰 또는 메트릭을 표시하려면 연결된 앱을 사용하도록 설정하고 암호를 생성해야 합니다. 연결된 앱이 외부 응용 프로그램에 사용되는 중에 사용 해제 또는 삭제되었거나 암호가 삭제 또는 교체된 경우 사용자가 내장된 콘텐츠에 액세스하면 오류가 표시됩니다.

이 문제를 방지하려면 연결된 앱이 사용되도록 설정되었고 JWT에 올바른 암호 ID와 값이 사용되는지 확인하십시오.

액세스 수준(내장 워크플로우만 해당)

연결된 앱의 액세스 수준을 구성할 때 2가지 프로젝트 유형 중 하나를 선택할 수 있습니다. 액세스 수준은 내장 가능한 콘텐츠를 제어합니다.

  • 모든 프로젝트: 이 옵션을 선택하면 모든 프로젝트의 콘텐츠를 내장할 수 있습니다.
  • 단일 프로젝트만: 이 옵션을 선택하면 지정된 프로젝트의 콘텐츠만 내장할 수 있습니다. 지정된 프로젝트에 중첩된 프로젝트가 있는 경우 이 중첩된 프로젝트의 콘텐츠를 내장하는 것은 사용되지 않습니다.

도메인 허용 목록 규칙(내장 워크플로우만 해당)

연결된 앱의 도메인 허용 목록을 사용하면 내장된 Tableau 콘텐츠에 대한 액세스를 모든 도메인 또는 일부 도메인으로 제한할 수 있습니다. 또는 일부 도메인을 제외하거나 모든 도메인을 차단할 수 있습니다.

도메인 옵션

연결된 앱의 도메인 허용 목록을 구성할 때 2가지 옵션 중 하나를 선택할 수 있습니다.

  • 모든 도메인: 기본 옵션인 이 옵션을 사용하면 내장된 콘텐츠에 대한 액세스가 제한되지 않습니다.
  • 특정 도메인만: 이 옵션을 사용하면 내장된 콘텐츠에 대한 액세스 범위를 좁힐 수 있습니다. 이 옵션을 사용하는 경우 도메인 서식 지정 섹션에 지정된 서식 지정 규칙을 따릅니다.

도메인 서식 지정

도메인 허용 목록 텍스트 상자에 아래 서식 예를 사용하여 하나 이상의 도메인을 입력할 수 있습니다.

참고: 도메인 서식 지정 규칙은 Tableau REST API에서 연결된 앱 메서드(링크가 새 창에서 열림)를 사용하는 경우에도 적용됩니다.

다음은 일반적인 시나리오에 따른 몇 가지 서식 지정 예제입니다.

지정할 항목...내장 액세스
도메인 범위*.myco.commyco.com 아래의 모든 하위 도메인에서 내장된 콘텐츠에 액세스할 수 있습니다.
모든 포트myco.com:*myco.com 아래의 모든 포트에서 내장된 콘텐츠에 액세스할 수 있습니다.
특정 포트myco.com:8080myco.com 아래 8080 포트의 내장된 콘텐츠에만 액세스할 수 있습니다.
다수의 개별 도메인myco.com
events.myco.com
ops.myco.com

3개 도메인 모두에서 내장된 콘텐츠에 액세스할 수 있습니다.

참고: 여러 도메인을 지정하는 경우 각 도메인을 한 줄에 하나씩 입력하거나 도메인을 공백으로 구분하십시오. REST API의 경우 도메인을 공백으로 구분해야 합니다.

보안 트래픽 전용https:도메인에 관계없이 내장된 콘텐츠를 안전하게 액세스할 수 있습니다.
다양한 도메인의 모든 포트에 대한 보안 트래픽https:*myco.com:*myco.com 아래 모든 하위 도메인의 모든 포트에서 내장된 콘텐츠에 안전하게 액세스할 수 있습니다.
도메인 없음[도메인 없음]내장된 콘텐츠에 대한 액세스가 차단됩니다.

알려진 문제(내장 워크플로우만 해당)

연결된 앱을 사용하는 경우 몇 가지 알려진 문제가 있으며, 이는 향후 릴리스에서 해결될 예정입니다.

  • 툴바 기능: 내장된 콘텐츠에 툴바 매개 변수가 정의되어 있으면 일부 툴바 기능이 작동하지 않습니다. 이 문제를 해결하려면 아래 예와 같이 툴바 매개 변수를 숨기는 것이 좋습니다.

    <tableau-viz id='tab-viz' src='https://<your_server>/t/<your_site>/...'
    	toolbar='hidden'>
    </tableau-viz>

  • 게시된 데이터 원본: 데이터베이스 자격 증명이 사용자에게 확인으로 설정된 경우 게시된 데이터 원본이 표시되지 않습니다. 이 문제를 해결하려면 가능한 경우 데이터 원본 소유자가 대신 데이터베이스 자격 증명을 내장하는 것이 좋습니다.
  • 내장된 대시보드의 데이터에 질문 개체: 내장된 대시보드의 데이터에 질문 개체는 로드되지 않습니다. ( Tableau Server 2024.2에서는 데이터에 질문(Ask Data)이 사용 중지됩니다.)

  • 메트릭 및 도메인 허용 목록: 내장된 메트릭 뷰는 연결된 앱의 도메인 허용 목록에서 지정할 수 있는 액세스 제한에도 불구하고 표시됩니다. 참고: 내장된 뷰의 툴바에서 액세스되는 메트릭 데이터는 예상대로 작동합니다. (Tableau Server 2023.3에서 메트릭 내장 기능이 사용 중지되었습니다.)

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