부록 - Apache를 사용한 웹 계층 예제 배포

이 항목에서는 예제 AWS 참조 아키텍처에서 웹 계층을 구현하는 방법을 설명하는 전체 절차를 제공합니다. 예제 구성은 다음 구성 요소로 구성됩니다.

  • AWS 응용 프로그램 부하 분산 장치
  • Apache 프록시 서버
  • Mellon 인증 모듈
  • Okta IdP
  • SAML 인증

참고: 이 섹션에 나와 있는 웹 계층 구성 예제에는 타사 소프트웨어 및 서비스를 배포하는 자세한 절차가 포함되어 있습니다. Tableau는 웹 계층 시나리오를 지원하기 위한 절차를 확인하고 문서화하기 위해 최선을 다하고 있습니다. 하지만 타사 소프트웨어가 변경되거나 여기에 설명된 참조 아키텍처와 다른 시나리오가 있을 수 있습니다. 신뢰할 수 있는 구성 세부 정보 및 지원은 타사 설명서를 참조하십시오.

이 섹션 전반에 걸친 Linux 예는 RHEL와 같은 배포에 대한 명령을 보여줍니다. 특히 여기에 나온 명령은 Amazon Linux 2 배포를 통해 개발되었습니다. Ubuntu 배포를 실행 중인 경우 그에 따라 명령을 편집합니다.

이 예제의 웹 계층 배포는 단계별 구성 및 확인 절차를 따릅니다. 핵심 웹 계층 구성은 Tableau와 인터넷 간의 HTTP를 사용하도록 설정하는 다음 단계로 구성됩니다. AWS 응용 프로그램 부하 분산 장치 뒤에서 역방향 프록시/부하 분산을 수행하도록 Apache를 구성하고 실행합니다.

  1. Apache 설치
  2. Tableau Server에 대한 연결을 테스트하도록 역방향 프록시 구성
  3. 프록시의 부하 분산 구성
  4. AWS 응용 프로그램 부하 분산 장치 구성

웹 계층을 설정하고 Tableau 연결을 확인한 후에는 외부 공급자를 통한 인증을 구성합니다.

Apache 설치

두 EC2 호스트(프록시 1 및 프록시 2)에서 다음 절차를 실행합니다. 참조 아키텍처 예제에 따라 AWS에서 배포하는 경우 두 가용성 영역이 있어야 하며 각 영역에서 단일 프록시 서버를 실행해야 합니다.

  1. Apache를 설치합니다.

    sudo yum update -y
    sudo yum install -y httpd
  2. 재부팅 시 Apache를 시작하도록 구성합니다.

    sudo systemctl enable --now httpd

  3. 설치한 httpd 버전에 proxy_hcheck_module이 있는지 확인합니다.

    sudo httpd -M

    proxy_hcheck_module이 필요합니다. httpd 버전에 이 모듈이 없는 경우 모듈이 포함된 httpd 버전으로 업데이트합니다.

Tableau Server에 대한 연결을 테스트하도록 프록시 구성

프록시 호스트 중 하나(프록시 1)에서 이 절차를 실행합니다. 이 단계의 목적은 사설 보안 그룹에서 인터넷, 프록시 서버 및 Tableau Server 간의 연결을 확인하는 것입니다.

  1. tableau.conf 파일을 만들고 /etc/httpd/conf.d 디렉터리에 추가합니다.

    다음 코드를 복사하고 Tableau Server 노드 1의 비공개 IP 주소를 사용하여 ProxyPassProxyPassReverse 키를 지정합니다.

    중요: 아래에 표시된 구성은 안전하지 않으므로 프로덕션에서 사용되어서는 안 됩니다. 이 구성은 설치 프로세스 중에 종단간 연결을 확인하기 위한 용도로만 사용되어야 합니다.

    예를 들어 노드 1의 사설 IP 주소가 10.0.30.32인 경우 tableau.conf 파일의 내용은 다음과 같습니다.

    <VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass "/" "http://10.0.30.32:80/"
    ProxyPassReverse "/" "http://10.0.30.32:80/"
    </VirtualHost>
  2. httpd를 다시 시작합니다.

    sudo systemctl restart httpd

확인: 기본 토폴로지 구성

http://<proxy-public-IP-address>로 이동하여 Tableau Server 관리 페이지에 액세스할 수 있어야 합니다.

브라우저에서 Tableau Server 로그인 페이지가 로드되지 않는 경우 프록시 1 호스트에서 다음 문제 해결 단계를 수행하십시오.

  • 첫 번째 문제 해결 단계로 httpd를 중지한 다음 시작합니다.
  • tableau.conf 파일을 다시 확인합니다. 노드 1 비공개 IP가 올바른지 확인합니다. 큰따옴표를 확인하고 구문을 세심히 검토합니다.
  • 역방향 프록시 서버에서 노드 1 비공개 IP 주소를 사용하여 curl 명령을 실행합니다(예: curl 10.0.1.90). 셸에서 html이 반환되지 않거나 Apache 테스트 웹 페이지의 html이 반환되는 경우 공용 및 사설 보안 그룹 간의 프로토콜/포트 구성을 확인합니다.
  • 프록시 1 비공개 IP 주소를 사용하여 curl 명령을 실행합니다(예: curl 10.0.0.163). 셸에서 Apache 테스트 웹 페이지에 대한 html 코드가 반환되는 경우 프록시 파일이 올바르게 구성되지 않은 것입니다.
  • 프록시 파일 또는 보안 그룹의 구성을 변경한 후에는 항상 httpd(sudo systemctl restart httpd)를 다시 시작합니다.
  • TSM이 노드 1에서 실행되고 있는지 확인합니다.

프록시의 부하 분산 구성

  1. tableau.conf 파일을 만든 동일한 프록시 호스트(프록시 1)에서 기존 가상 호스트 구성을 제거하고 부하 분산 논리를 포함하도록 파일을 편집합니다.

    예:

    <VirtualHost *:80>
    ServerAdmin admin@example.com
    #Load balancing logic.
    ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED 
    <Proxy balancer://tableau>
    #Replace IP addresses below with the IP addresses to the Tableau Servers running the Gateway service.
    BalancerMember http://10.0.3.40/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    BalancerMember http://10.0.4.151/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / balancer://tableau/
    ProxyPassReverse / balancer://tableau/ 
    </VirtualHost>
  2. httpd를 중지한 다음 시작합니다.

    sudo systemctl stop httpd
    sudo systemctl start httpd
  3. 프록시 1의 공용 IP 주소로 이동하여 구성을 확인합니다.

두 번째 프록시 서버에 구성 복사

  1. 프록시 1에서 tableau.conf 파일을 복사하고 프록시 2 호스트의 /etc/httpd/conf.d 디렉터리에 저장합니다.
  2. httpd를 중지한 다음 시작합니다.

    sudo systemctl stop httpd
    sudo systemctl start httpd
  3. 프록시 2의 공용 IP 주소로 이동하여 구성을 확인합니다.

AWS 응용 프로그램 부하 분산 장치 구성

부하 분산 장치를 HTTP 수신기로 구성합니다. 다음 절차에서는 AWS에서 부하 분산 장치를 추가하는 방법에 대해 설명합니다.

1단계: 대상 그룹 만들기

대상 그룹은 프록시 서버를 실행하는 EC2 인스턴스를 정의하는 AWS 구성입니다. 이러한 그룹은 LBS에서 오는 트래픽의 대상입니다.

  1. EC2 > 대상 그룹 > 대상 그룹 만들기

  2. 만들기 페이지에서:

    • 대상 그룹 이름 입력(예: TG-internal-HTTP)
    • 대상 유형: 인스턴스
    • 프로토콜: HTTP
    • 포트: 80
    • VPC: 해당하는 VPC 선택
    • 상태 확인 > 고급 상태 확인 설정 > 성공 코드에서 읽을 코드 목록(200,303)을 추가합니다.
    • 만들기를 클릭합니다.
  3. 방금 만든 대상 그룹을 선택한 다음 대상 탭을 클릭합니다. 

    • 편집을 클릭합니다.
    • 프록시 애플리케이션을 실행하는 EC2 인스턴스(또는 한 번에 1개를 구성하는 경우 단일 인스턴스)를 선택한 다음 등록된 항목에 추가를 클릭합니다.
    • 저장을 클릭합니다.

2단계: 부하 분산 장치 마법사 시작

  1. EC2 > 부하 분산 장치 > 부하 분산 장치 만들기

  2. "부하 분산 장치 유형 선택" 페이지에서 응용 프로그램 부하 분산 장치를 만듭니다.

참고: 부하 분산 장치를 구성하기 위해 표시되는 UI는 AWS 데이터 센터 간에 일관되지 않습니다. 아래의 "마법사 구성" 절차는 1단계 부하 분산 장치 구성으로 시작하는 AWS 구성 마법사를 설명합니다. 

데이터 센터가 모든 구성을 단일 페이지에 표시하는 경우 페이지 아래쪽에 부하 분산 장치 만들기 단추가 포함되어 있으면 아래의 "단일 페이지 구성" 절차를 따르십시오.

  1. 부하 분산 장치 구성 페이지:

    • 이름 지정
    • 스키마: 인터넷 연결(기본값)
    • IP 주소 유형: ipv4(기본값)
    • 수신기(수신기 및 라우팅):
      1. 기본 HTTP 수신기를 그대로 둡니다.
      2. 수신기 추가를 클릭하고 HTTPS:443를 추가합니다.
    • VPC: 모든 항목을 설치한 VPC 선택
    • 가용성 영역:
      • 데이터 센터 지역을 나타내는 ab를 선택합니다.
      • 해당하는 각 드롭다운 선택 도구에서 공용 서브넷(프록시 서버가 상주하는 서브넷)을 선택합니다.
    • 보안 설정 구성 클릭
  2. 보안 설정 구성 페이지

    • 공용 SSL 인증서를 업로드합니다.
    • 다음: 보안 그룹 구성을 클릭합니다.
  3. 보안 그룹 구성 페이지:

    • 공용 보안 그룹을 선택합니다. 기본 보안 그룹이 선택된 경우 해당 선택을 취소합니다.
    • 다음: 라우팅 구성을 클릭합니다.
  4. 라우팅 구성 페이지

    • 대상 그룹: 기존 대상 그룹
    • 이름: 이전에 만든 대상 그룹 선택
    • 다음: 대상 등록을 클릭합니다.
  5. 대상 등록 페이지

    • 이전에 구성한 프록시 서버 인스턴스 2개가 표시됩니다.
    • 다음: 검토를 클릭합니다.
  6. 검토 페이지

    만들기를 클릭합니다.

기본 구성

  • 이름 지정
  • 스키마: 인터넷 연결(기본값)
  • IP 주소 유형: ipv4(기본값)

네트워크 매핑

  • VPC: 모든 항목을 설치한 VPC 선택
  • 매핑:
    • 데이터 센터 지역을 나타내는 ab(또는 그에 상응하는) 가용성 영역을 선택합니다.
    • 해당하는 각 드롭다운 선택 도구에서 공용 서브넷(프록시 서버가 상주하는 서브넷)을 선택합니다.

보안 그룹

  • 공용 보안 그룹을 선택합니다. 기본 보안 그룹이 선택된 경우 해당 선택을 취소합니다.
  • 수신기 및 라우팅

    • 기본 HTTP 수신기를 그대로 둡니다. 기본 동작의 경우 이전에 설정한 대상 그룹을 지정합니다.
    • 수신기 추가를 클릭하고 HTTPS:443을 추가합니다. 기본 동작의 경우 이전에 설정한 대상 그룹을 지정합니다.

    보안 수신기 설정

    • 공용 SSL 인증서를 업로드합니다.

    부하 분산 장치 만들기를 클릭합니다.

    3단계: 연결 유지 사용

    1. 부하 분산 장치를 만든 후 대상 그룹에서 연결 유지를 사용하도록 설정해야 합니다.

      • AWS 대상 그룹 페이지(EC2 > 부하 분산 > 대상 그룹)를 열고 방금 설정한 대상 그룹 인스턴스를 선택합니다. 동작 메뉴에서 특성 편집을 선택합니다.
      • 특성 편집 페이지에서 연결 유지를 선택하고 기간을 1 day로 지정한 다음 변경 내용을 저장합니다.
    2. 부하 분산 장치에서 HTTP 수신기에 연결 유지를 사용하도록 설정합니다. 방금 구성한 부하 분산 장치를 선택한 다음 수신기 탭을 클릭합니다.

      • HTTP:80에서 규칙 보기/편집을 클릭합니다. 결과로 표시되는 규칙 페이지에서 편집 아이콘을 클릭하여 규칙을 편집합니다(페이지 맨 위에서 한 번 클릭하여 편집한 다음 규칙별로 다시 편집). 기존 THEN 규칙을 삭제하고 동작 추가 > 전달 대상...을 클릭하여 바꿉니다. 결과로 나온 THEN 구성에서 이전에 만든 것과 동일한 대상 그룹을 지정합니다. 그룹 수준 연결 유지에서 연결 유지를 사용하도록 설정하고 기간을 1일로 설정합니다. 설정을 저장한 다음 업데이트를 클릭합니다.

    4단계: 부하 분산 장치에서 유휴 시간 초과 설정

    부하 분산 장치에서 유휴 시간 초과를 400초로 업데이트합니다.

    이 배포에 대해 구성한 부하 분산 장치를 선택한 다음 동작 > 특성 편집을 클릭합니다. 유휴 시간 초과400 초로 설정한 다음 저장을 클릭합니다.

    5단계: LBS 연결 확인

    AWS 부하 분산 장치 페이지(EC2 > 부하 분산 장치)를 열고 방금 설정한 부하 분산 장치 인스턴스를 선택합니다.

    설명에서 DNS 이름을 복사하여 브라우저에 붙여 넣고 Tableau Server 로그인 페이지에 액세스합니다.

    500 수준 오류가 발생하면 프록시 서버를 다시 시작해야 할 수 있습니다.

    공용 Tableau URL로 DNS 업데이트

    AWS 부하 분산 장치 설명의 도메인 DNS 영역 이름을 사용하여 DNS에 CNAME 값을 만듭니다. URL(tableau.example.com)에 대한 트래픽은 AWS 공용 DNS 이름으로 전송되어야 합니다.

    연결 확인

    DNS 업데이트가 완료되면 공용 URL(예: https://tableau.example.com)을 입력하여 Tableau Server 로그인 페이지로 이동할 수 있어야 합니다.

    인증 구성 예: SAML 및 외부 IdP

    다음 예에서는 AWS 참조 아키텍처에서 실행되는 Tableau 배포를 위해 Okta IdP 및 Mellon 인증 모듈로 SAML을 설정하고 구성하는 방법에 대해 설명합니다. 이 예에서는 HTTP를 사용하도록 Tableau Server 및 Apache 프록시 서버를 구성하는 방법을 설명합니다. Okta는 HTTPS를 통해 AWS 부하 분산 장치로 요청을 보내지만 모든 내부 트래픽은 HTTP를 통해 이동합니다. 이 시나리오에서 구성할 때는 URL 문자열을 설정할 때 HTTP와 HTTPS 프로토콜의 차이점을 숙지하십시오.

    이 예에서는 Mellon을 역방향 프록시 서버의 사전 인증 서비스 공급자 모듈로 사용합니다. 이 구성에서는 인증된 트래픽만 Tableau Server에 연결되며 Tableau Server는 Okta IdP를 통한 서비스 공급자 역할도 합니다. 따라서 Mellon 서비스 공급자용과 Tableau 서비스 공급자용으로 IdP 응용 프로그램 2개를 구성해야 합니다.

    Tableau 관리자 계정 만들기

    SAML을 구성할 때 흔히 하는 실수는 SSO를 사용하도록 설정하기 전에 Tableau Server에서 관리자 계정을 생성하는 것을 잊는 것입니다.

    첫 번째 단계는 Tableau Server에서 서버 관리자 역할의 계정을 만드는 것입니다. Okta 시나리오의 예에서 사용자 이름은 올바른 이메일 주소 형식이어야 합니다(예: user@example.com). 이 사용자에 대한 비밀번호를 설정해야 하지만 SAML이 구성된 후에는 비밀번호가 사용되지 않습니다.

    Okta 사전 인증 응용 프로그램 구성

    이 섹션에 설명된 전체 시나리오에서는 두 개의 Okta 응용 프로그램이 필요합니다.

    • Okta 사전 인증 응용 프로그램
    • Okta Tableau Server 응용 프로그램

    이러한 각 응용 프로그램은 서로 다른 메타데이터에 연결되며 이를 역방향 프록시와 Tableau Server에서 각각 구성해야 합니다.

    이 절차에서는 Okta 사전 인증 응용 프로그램을 만들고 구성하는 방법에 대해 설명합니다. 이 항목의 뒷부분에서는 Okta Tableau Server 응용 프로그램을 만듭니다. 사용자 수가 제한되어 있는 Okta 무료 테스트 계정은 Okta 개발자 웹 페이지(링크가 새 창에서 열림)를 참조하십시오.

    Mellon 사전 인증 서비스 공급자를 위한 SAML 앱 통합을 만듭니다.

    1. Okta 관리 대시보드 > 응용 프로그램 > 앱 통합 만들기를 엽니다.

    2. 새 앱 통합 만들기 페이지에서 SAML 2.0을 선택한 후 다음을 클릭합니다.

    3. 일반 설정 탭에서 앱 이름(예: Tableau Pre-Auth)을 입력하고 다음을 클릭합니다.

    4. SAML 구성 탭에서:

      • SSO(Single Sign-On) URL. Single Sign-On URL의 최종 경로 요소는 이 절차의 뒷부분에서 설명하는 mellon.conf 구성 파일의 MellonEndpointPath를 일컫습니다. 원하는 끝점을 지정할 수 있습니다. 이 예에서는 sso가 끝점입니다. 마지막 요소인 postResponsehttps://tableau.example.com/sso/postResponse에 필수입니다.
      • 수신자 URL 및 대상 URL에 사용 확인란을 선택 취소합니다.
      • 수신자 URL: SSO URL과 동일하지만 HTTP가 포함됩니다. 예를 들어 http://tableau.example.com/sso/postResponse입니다.
      • 대상 URL: SSO URL과 동일하지만 HTTP가 포함됩니다. 예를 들어 http://tableau.example.com/sso/postResponse입니다.
      • 대상 URI(SP 엔터티 ID) 예를 들어 https://tableau.example.com입니다.
      • 이름 ID 형식: EmailAddress
      • 응용 프로그램 사용자 이름: Email
      • 특성 문: 이름 = mail, 이름 형식 = Unspecified, 값 = user.email.

      다음을 클릭합니다.

    5. 피드백 탭에서 다음을 선택합니다.

      • 내부 앱을 추가하는 Okta 고객
      • 이전에 만든 내부 앱
      • 마침을 클릭합니다.
    6. 사전 인증 IdP 메타데이터 파일을 만듭니다.

      • Okta에서: Applications(응용 프로그램) > Applications(응용 프로그램) > Your new application(새 응용 프로그램)(예: Tableau Pre-Auth) > Sign On(로그온)
      • SAML Signing Certificates(SAML 서명 인증서) 근처에서 View SAML setup instructions(SAML 설정 지침 보기)를 클릭합니다.
      • How to Configure SAML 2.0 for <pre-auth> Application(<pre-auth> 응용 프로그램에 대해 SAML 2.0을 구성하는 방법) 페이지에서 Optional(선택 사항) 섹션인 Provide the following IDP metadata to your SP provider(SP 공급자에게 다음 IdP 메타데이터 제공)로 스크롤합니다.
      • XML 필드의 콘텐츠를 복사하고 pre-auth_idp_metadata.xml이라는 파일에 저장합니다.
    7. (선택 사항) 다단계 인증을 구성합니다.

      • Okta에서: Applications(응용 프로그램) > Applications(응용 프로그램) > Your new application(새 응용 프로그램)(예: Tableau Pre-Auth) > Sign On(로그온)
      • 로그온 정책에서 규칙 추가를 클릭합니다.
      • 앱 로그온 규칙에서 이름 및 다른 MFA 옵션을 지정합니다. 기능을 테스트하려면 모든 옵션을 기본값으로 두어도 됩니다. 그러나 동작에서는 인증 요소 표시를 선택하고 사용자가 로그인해야 하는 빈도를 지정해야 합니다. 저장을 클릭합니다.

    Okta 사용자 만들기 및 할당

    1. Okta에서 디렉터리 > 사용자 > 사용자 추가로 이동하여 Tableau에서 만든 것과 동일한 사용자 이름(user@example.com)으로 사용자를 만듭니다.
    2. 사용자가 만들어지면 해당 사용자에게 새 Okta 앱을 할당합니다. 사용자 이름을 클릭한 다음 응용 프로그램 할당에서 응용 프로그램을 할당합니다.

    사전 인증을 위해 Mellon 설치

    1. Apache 프록시 서버를 실행하는 EC2 인스턴스에서 다음 명령을 실행하여 PHP 및 Mellon 모듈을 설치합니다.

      sudo yum install httpd php mod_auth_mellon

    2. /etc/httpd/mellon 디렉터리를 만듭니다.

    Mellon을 사전 인증 모듈로 구성

    두 프록시 서버에서 다음 절차를 실행합니다.

    Okta 구성에서 만든 pre-auth_idp_metadata.xml 파일의 복사본이 있어야 합니다.

    1. 디렉터리를 변경합니다.

      cd /etc/httpd/mellon

    2. 서비스 공급자 메타데이터를 만듭니다. mellon_create_metadata.sh 스크립트를 실행합니다. 명령에 조직의 엔티티 ID와 반환 URL을 포함해야 합니다.

      반환 URL은 Okta의 Single Sign On URL이라고 합니다. 반환 URL의 최종 경로 요소는 이 절차의 뒷부분에서 설명하는 mellon.conf 구성 파일의 MellonEndpointPath를 일컫습니다. 이 예에서는 끝점 경로로 sso를 지정합니다.

      예:

      sudo /usr/libexec/mod_auth_mellon/mellon_create_metadata.sh https://tableau.example.com "https://tableau.example.com/sso"

      스크립트는 서비스 공급자 인증서, 키 및 메타데이터 파일을 반환합니다.

    3. 쉽게 읽을 수 있도록 mellon 디렉터리에서 서비스 공급자 파일의 이름을 바꿉니다. 설명서에서 이러한 파일은 다음 이름으로 설명하겠습니다.

      sudo mv *.key mellon.key
      sudo mv *.cert mellon.cert
      sudo mv *.xml sp_metadata.xml

    4. pre-auth_idp_metadata.xml 파일을 동일한 디렉터리에 복사합니다.

    5. /etc/httpd/conf.d 디렉터리에서 mellon.conf 파일을 만듭니다.

      sudo nano /etc/httpd/conf.d/mellon.conf

    6. 다음 내용을 mellon.conf에 복사합니다.

      <Location />
      MellonSPPrivateKeyFile /etc/httpd/mellon/mellon.key
      MellonSPCertFile /etc/httpd/mellon/mellon.cert
      MellonSPMetadataFile /etc/httpd/mellon/sp_metadata.xml
      MellonIdPMetadataFile /etc/httpd/mellon/pre-auth_idp_metadata.xml
      MellonEndpointPath /sso
      MellonEnable "info"
      </Location>
    7. 기존 tableau.conf 파일에 다음 콘텐츠를 추가합니다.

      <VirtualHost *:80> 블록 안에 다음 콘텐츠를 추가합니다. 엔터티 ID의 공용 호스트 이름으로 ServerName 을 업데이트합니다.

      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info 

      <VirtualHost *:80> 블록 밖에 Location 블록을 추가합니다. 최상위 도메인으로 MellonCookieDomain을 업데이트하여 표시된 쿠키 정보를 유지합니다.

      <Location />
      AuthType Mellon
      MellonEnable auth
      Require valid-user
      MellonCookieDomain example.com					
      </Location>

      전체 tableau.conf 파일은 다음 예제와 같아야 합니다.

      <VirtualHost *:80>
      ServerAdmin admin@example.com
      ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
      Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
      <Proxy balancer://tableau>
      BalancerMember http://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      BalancerMember http://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      ProxySet stickysession=ROUTEID
      </Proxy>
      ProxyPreserveHost On
      ProxyPass / balancer://tableau/
      ProxyPassReverse / balancer://tableau/
      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info 
      </VirtualHost>
      <Location />
      AuthType Mellon
      MellonEnable auth
      Require valid-user
      MellonCookieDomain example.com
      </Location>
    8. 구성을 확인합니다. 다음 명령을 실행합니다.

      sudo apachectl configtest

      구성 테스트에서 오류가 반환되면 오류를 수정하고 configtest를 다시 실행합니다. 구성이 성공적으로 완료되면 Syntax OK가 반환됩니다.

    9. httpd를 다시 시작합니다.

      sudo systemctl restart httpd

    Okta에서 Tableau Server 응용 프로그램 만들기

    1. Okta 대시보드에서: 응용 프로그램 > 응용 프로그램 > 앱 카탈로그 찾아보기
    2. 앱 통합 카탈로그 찾아보기에서 Tableau를 검색하고 Tableau Server 타일을 선택한 다음 추가를 클릭합니다.
    3. Tableau Server 추가 > 일반 설정에서 레이블을 입력하고 다음을 클릭합니다.
    4. 로그온 옵션에서 SAML 2.0을 선택한 다음 고급 로그온 설정으로 스크롤합니다.
      • SAML 엔터티 ID: 공용 URL을 입력합니다(예: https://tableau.example.com).
      • 응용 프로그램 사용자 이름 형식: 이메일
    5. ID 공급자 메타데이터 링크를 클릭하여 브라우저를 시작합니다. 브라우저 링크를 복사합니다. 이 링크는 다음 절차에서 Tableau를 구성할 때 사용됩니다.
    6. 완료를 클릭합니다.
    7. 사용자(user@example.com)에게 새 Tableau Server Okta 앱 할당: 사용자 이름을 클릭하고 응용 프로그램 할당에서 응용 프로그램을 할당합니다.

    Tableau Server에서 IdP에 SAML을 사용하도록 설정

    Tableau Server 노드 1에서 이 절차를 실행합니다.

    1. Okta에서 Tableau Server 응용 프로그램 메타데이터를 다운로드합니다. 이전 절차에서 저장한 링크를 사용합니다.

      wget https://dev-66144217.okta.com/app/exk1egxgt1fhjkSeS5d7/sso/saml/metadata -O idp_metadata.xml

    2. TLS 인증서와 관련 키 파일을 Tableau Server에 복사합니다. 키 파일은 RSA 키여야 합니다. SAML 인증서 및 IdP 요구 사항에 대한 자세한 내용은 SAML 요구 사항(Linux(링크가 새 창에서 열림))을 참조하십시오.

      인증서 관리 및 배포를 간소화하고 보안을 위한 모범 사례를 적용하기 위해 신뢰할 수 있는 주요 외부 CA(인증 기관)에서 생성된 인증서를 사용할 것을 권장합니다. 또는 자체 서명 인증서를 생성하거나 TLS용 PKI의 인증서를 사용할 수도 있습니다.

      TLS 인증서가 없는 경우 아래 포함된 절차를 사용하여 자체 서명 인증서를 생성할 수 있습니다.

      자체 서명 인증서를 생성합니다.

      Tableau Server 노드 1에서 이 절차를 실행합니다.

      1. 서명 루트 CA(인증 기관) 키를 생성합니다.

        openssl genrsa -out rootCAKey-saml.pem 2048

      2. 루트 CA 인증서를 만듭니다.

        openssl req -x509 -sha256 -new -nodes -key rootCAKey-saml.pem -days 3650 -out rootCACert-saml.pem

        인증서 필드에 값을 입력하라는 메시지가 표시됩니다. 예:

        Country Name (2 letter code) [XX]:US
        State or Province Name (full name) []:Washington
        Locality Name (eg, city) [Default City]:Seattle
        Organization Name (eg, company) [Default Company Ltd]:Tableau
        Organizational Unit Name (eg, section) []:Operations
        Common Name (eg, your name or your server's hostname) []:tableau.example.com
        Email Address []:example@tableau.com
      3. 인증서 및 관련 키(아래 예에서 server-saml.csrserver-saml.key)를 만듭니다. 인증서의 주체 이름은 Tableau 호스트의 공용 호스트 이름과 일치해야 합니다. 주체 이름은 -subj 옵션과 "/CN=<host-name>" 형식을 사용하여 설정됩니다. 예:

        openssl req -new -nodes -text -out server-saml.csr -keyout server-saml.key -subj "/CN=tableau.example.com"

      4. 위에서 만든 CA 인증서를 사용하여 새 인증서에 서명합니다. 다음 명령은 crt 형식으로도 인증서를 출력합니다.

        openssl x509 -req -in server-saml.csr -days 3650 -CA rootCACert-saml.pem -CAkey rootCAKey-saml.pem -CAcreateserial -out server-saml.crt

      5. 키 파일을 RSA로 변환합니다. Tableau에서 SAML을 사용하려면 RSA 키 파일이 필요합니다. 키를 변환하려면 다음 명령을 실행합니다.

        openssl rsa -in server-saml.key -out server-saml-rsa.key

    3. SAML을 구성합니다. 엔터티 ID와 반환 URL, 메타데이터 파일, 인증서 파일 및 키 파일에 대한 경로를 지정하여 다음 명령을 실행합니다.

      tsm authentication saml configure --idp-entity-id "https://tableau.example.com" --idp-return-url "https://tableau.example.com" --idp-metadata idp_metadata.xml --cert-file "server-saml.crt" --key-file "server-saml-rsa.key"

      tsm authentication saml enable

    4. 조직에서 Tableau Desktop 2021.4 이상을 실행하는 경우 다음 명령을 실행하여 역방향 프록시 서버를 통한 인증을 사용하도록 설정해야 합니다.

      최상위 수준 도메인 쿠키 유지를 허용하도록 사전 인증 모듈(예: Mellon)을 구성한 경우 Tableau Desktop 버전 2021.2.1 ~ 2021.3은 이 명령을 실행하지 않고 작동합니다.

      tsm configuration set -k features.ExternalBrowserOAuth -v false

    5. 구성 변경 내용을 적용합니다.

      tsm pending-changes apply

    SAML 기능 확인

    전체 SAML 기능을 확인하려면 이 절차를 시작할 때 만든 Tableau 관리자 계정으로 공용 URL(예: https://tableau.example.com)을 사용하여 Tableau Server에 로그인합니다.

    확인 문제 해결

    잘못된 요청: 이 시나리오의 일반적인 오류는 Okta의 "잘못된 요청" 오류입니다. 이 문제는 주로 브라우저가 이전 Okta 세션의 데이터를 캐싱할 때 발생합니다. 예를 들어 Okta 관리자 자격으로 Okta 응용 프로그램을 관리하고 다른 Okta 지원 계정을 사용하여 Tableau에 액세스하려고 하면 관리자 데이터의 세션 데이터가 "잘못된 요청" 오류를 발생시킬 수 있습니다. 로컬 브라우저 캐시를 지워도 이 오류가 계속되면 다른 브라우저로 연결하여 Tableau 시나리오의 유효성을 확인해 보십시오.

    “Bad Request” 오류의 또 다른 원인은 Okta, Mellon 및 SAML 구성 프로세스 중에 입력한 많은 URL 중 하나의 입력 오류입니다. 이 모든 URL을 주의 깊게 확인하십시오.

    오류를 야기한 URL은 주로 Apache 서버의 httpd error.log 파일에 명시됩니다.

    찾을 수 없음 - 요청한 URL을 이 서버에서 찾지 못했습니다: 이 오류는 많은 구성 오류 중 하나를 나타냅니다.

    사용자가 Okta로 인증된 후 이 오류가 발생하면 SAML을 구성할 때 Okta 사전 인증 응용 프로그램을 Tableau Server에 업로드한 것일 수 있습니다. Okta 사전 인증 응용 프로그램 메타데이터가 아니라 Tableau Server에 Okta Tableau Server 응용 프로그램 메타데이터가 구성되어 있는지 확인합니다.

    다른 문제 해결 단계:

    • 오타 또는 구성 오류가 있는지 tableau.conf를 주의 깊게 검토합니다.
    • Okta 사전 인증 응용 프로그램 설정을 검토합니다. HTTP와 HTTPS 프로토콜이 이 항목에서 지정한 대로 설정되어 있는지 확인하십시오.
    • 두 프록시 서버 모두에서 httpd를 다시 시작합니다.
    • 두 프록시 서버 모두에서 sudo apachectl configtest가 "Syntax OK"를 반환하는지 확인합니다.
    • 테스트 사용자가 Okta의 두 응용 프로그램에 모두 할당되었는지 확인합니다.
    • 부하 분산 장치 및 연결된 대상 그룹에 연결 유지가 설정되어 있는지 확인합니다.

    부하 분산 장치에서 Tableau Server로의 SSL/TLS 구성

    일부 조직의 경우 클라이언트에서 백엔드 서비스에 이르는 엔드 투 엔드 암호화 채널을 요구합니다. 지금까지 설명한 기본 참조 아키텍처는 클라이언트에서 부하 분산 장치(조직의 웹 계층에서 실행됨)로의 SSL을 구성할 것을 명시합니다.

    부하 분산 장치에서 Tableau Server로의 SSL을 구성하려면 다음을 수행해야 합니다.

    • Tableau와 프록시 서버 모두에 유효한 SSL 인증서를 설치합니다.
    • 부하 분산 장치에서 역방향 프록시 서버로의 SSL을 구성합니다.
    • 프록시 서버에서 Tableau Server로의 SSL을 구성합니다.
    • Tableau Server에서 PostgreSQL 인스턴스로의 SSL을 구성해도 됩니다.

    이 항목의 나머지 부분에서는 예제 AWS 참조 아키텍처의 컨텍스트에서 이 구현을 설명합니다.

    예제: AWS 참조 아키텍처에서 SSL/TLS 구성

    이 섹션에서는 Tableau에서 SSL을 구성하고, 예제 AWS 참조 아키텍처에서 실행되는 모든 Apache 프록시 서버에서 SSL을 구성하는 방법을 설명합니다.

    이 예 전반에 걸친 Linux 절차는 RHEL와 같은 배포에 대한 명령을 보여줍니다. 특히 여기에 나온 명령은 Amazon Linux 2 배포를 통해 개발되었습니다. Ubuntu 배포를 실행 중인 경우 그에 따라 명령을 편집합니다.

    1단계: 인증서 및 관련 키 수집

    인증서 관리 및 배포를 간소화하고 보안을 위한 모범 사례를 적용하기 위해 신뢰할 수 있는 주요 외부 CA(인증 기관)에서 생성된 인증서를 사용할 것을 권장합니다.

    또는 자체 서명 인증서를 생성하거나 TLS용 PKI의 인증서를 사용할 수도 있습니다.

    다음 절차는 자체 서명 인증서를 생성하는 방법을 설명합니다. 권장되는 타사 인증서를 사용하는 경우 이 절차를 건너뛰어도 됩니다.

    프록시 호스트 중 하나에서 이 절차를 실행합니다. 인증서 및 연결된 키를 생성한 후 다른 프록시 호스트 및 Tableau Server 노드 1과 공유합니다.

    1. 서명 루트 CA(인증 기관) 키를 생성합니다.

      openssl genrsa -out rootCAKey.pem 2048

    2. 루트 CA 인증서를 만듭니다.

      openssl req -x509 -sha256 -new -nodes -key rootCAKey.pem -days 3650 -out rootCACert.pem

      인증서 필드에 값을 입력하라는 메시지가 표시됩니다. 예:

      Country Name (2 letter code) [XX]:US
      State or Province Name (full name) []:Washington
      Locality Name (eg, city) [Default City]:Seattle
      Organization Name (eg, company) [Default Company Ltd]:Tableau
      Organizational Unit Name (eg, section) []:Operations
      Common Name (eg, your name or your server's hostname) []:tableau.example.com
      Email Address []:example@tableau.com
    3. 인증서 및 관련 키(아래 예에서 serverssl.csrserverssl.key)를 만듭니다. 인증서의 주체 이름은 Tableau 호스트의 공용 호스트 이름과 일치해야 합니다. 주체 이름은 -subj 옵션과 "/CN=<host-name>" 형식을 사용하여 설정됩니다. 예:

      openssl req -new -nodes -text -out serverssl.csr -keyout serverssl.key -subj "/CN=tableau.example.com"

    4. 2단계에서 만든 CA 인증서를 사용하여 새 인증서에 서명합니다. 다음 명령은 crt 형식으로도 인증서를 출력합니다.

      openssl x509 -req -in serverssl.csr -days 3650 -CA rootCACert.pem -CAkey rootCAKey.pem -CAcreateserial -out serverssl.crt

    2단계: SSL에 대한 프록시 서버 구성

    두 프록시 서버에서 다음 절차를 실행합니다.

    1. Apache ssl 모듈을 설치합니다.

      sudo yum install mod_ssl

    2. /etc/ssl/private 디렉터리를 만듭니다.

      sudo mkdir -p /etc/ssl/private

    3. crt 및 key 파일을 다음 /etc/ssl/ 경로에 복사합니다.

      sudo cp serverssl.crt /etc/ssl/certs/

      sudo cp serverssl.key /etc/ssl/private/

    4. 다음 업데이트로 기존 tableau.conf를 업데이트합니다.

      • SSL 다시 쓰기 블록을 추가합니다.
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =tableau.example.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
      • SSL 다시 쓰기 블록에서 RewriteCond 서버 이름을 업데이트합니다. 공용 호스트 이름(예: tableau.example.com)을 추가합니다.
      • <VirtualHost *:80> <VirtualHost *:443>으로 변경합니다.
      • <VirtualHost *:443> <Location /> 블록을 다음으로 래핑합니다. <IfModule mod_ssl.c> ... </IfModule>.
      • BalancerMember: 프로토콜을 http에서 https로 변경합니다.
      • SSL* 요소를 <VirtualHost *:443> 블록 안에 추가합니다.
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/serverssl.crt
        SSLCertificateKeyFile /etc/ssl/private/serverssl.key
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off
      • LogLevel 요소에 ssl:warn을 추가합니다.
      • 선택 사항: 인증 모듈을 설치하고 구성한 경우 tableau.conf 파일에 추가 요소가 포함될 수 있습니다. 예를 들어 <Location /> </Location> 블록에 요소가 포함됩니다.

      여기에 SSL에 대해 구성된 예제 tableau.conf 파일이 나와 있습니다.

      RewriteEngine on
      RewriteCond %{SERVER_NAME} =tableau.example.com
      RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
      
      <IfModule mod_ssl.c>
      <VirtualHost *:443>
      ServerAdmin admin@example.com
      ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
      Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
      <Proxy balancer://tableau>
      BalancerMember https://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      BalancerMember https://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      ProxySet stickysession=ROUTEID
      </Proxy>
      ProxyPreserveHost On
      ProxyPass / balancer://tableau/
      ProxyPassReverse / balancer://tableau/
      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info ssl:warn
      SSLEngine on
      SSLCertificateFile /etc/ssl/certs/serverssl.crt
      SSLCertificateKeyFile /etc/ssl/private/serverssl.key
      SSLProxyEngine on
      SSLProxyVerify none
      SSLProxyCheckPeerName off
      SSLProxyCheckPeerExpire off
      </VirtualHost>
      <Location />
      #If you have configured a pre-auth module (e.g. Mellon) include those elements here.
      </Location>
      </IfModule>
    5. 403 오류를 해결할 index.html 파일을 추가합니다.

      sudo touch /var/www/html/index.html
    6. httpd를 다시 시작합니다.

      sudo systemctl restart httpd

    3단계: 외부 SSL에 대한 Tableau Server 구성

    프록시 1 호스트의 serverssl.crt 및 serverssl.key 파일을 초기 Tableau Server(노드 1)에 복사합니다.

    노드 1에서 다음 명령을 실행합니다.

    tsm security external-ssl enable --cert-file serverssl.crt --key-file serverssl.key
    tsm pending-changes apply

    4단계: 선택적 인증 구성

    Tableau에 대한 외부 ID 공급자를 구성한 경우 IdP 관리 대시보드의 반환 URL을 업데이트해야 할 수 있습니다.

    예를 들어 Okta 사전 인증 응용 프로그램을 사용하는 경우 수신자 URL 및 대상 URL에 HTTPS 프로토콜을 사용하도록 응용 프로그램을 업데이트해야 합니다.

    5단계: HTTPS에 대한 AWS 부하 분산 장치 구성

    이 가이드에 설명된 대로 AWS 부하 분산 장치를 배포하는 경우 HTTPS 트래픽을 프록시 서버로 보내도록 AWS 부하 분산 장치를 다시 구성해야 합니다.

    1. 기존 HTTP 대상 그룹을 등록 취소합니다.

      대상 그룹에서 부하 분산 장치에 구성된 HTTP 대상 그룹을 선택하고 동작을 클릭한 다음 인스턴스 등록 및 등록 취소를 클릭합니다.

      대상 등록 및 등록 취소 페이지에서 현재 구성된 인스턴스를 선택하고 등록 취소를 클릭한 다음 저장을 클릭합니다.

    2. HTTPS 대상 그룹을 만듭니다.

      대상 그룹 > 대상 그룹 만들기

      • "인스턴스" 선택
      • 대상 그룹 이름 입력(예: TG-internal-HTTPS)
      • VPC 선택
      • 프로토콜: HTTPS 443
      • 상태 확인 > 고급 상태 확인 설정 > 성공 코드에서 읽을 코드 목록(200,303)을 추가합니다.
      • 만들기를 클릭합니다.
    3. 방금 만든 대상 그룹을 선택한 다음 대상 탭을 클릭합니다. 

      • 편집을 클릭합니다.
      • 프록시 응용 프로그램을 실행 중인 EC2 인스턴스를 선택한 다음 등록된 항목에 추가를 클릭합니다.
      • 저장을 클릭합니다.
    4. 대상 그룹이 만들어지면 연결 유지를 사용하도록 설정해야 합니다.

      • AWS 대상 그룹 페이지(EC2 > 부하 분산 > 대상 그룹)를 열고 방금 설정한 대상 그룹 인스턴스를 선택합니다. 동작 메뉴에서 특성 편집을 선택합니다.
      • 특성 편집 페이지에서 연결 유지를 선택하고 기간을 1 day로 지정한 다음 변경 내용을 저장합니다.
    5. 부하 분산 장치에서 수신기 규칙을 업데이트합니다. 이 배포에 대해 구성한 부하 분산 장치를 선택한 다음 수신기 탭을 클릭합니다.

      • HTTP:80에서 규칙 보기/편집을 클릭합니다. 결과로 표시되는 규칙 페이지에서 편집 아이콘을 클릭하여 규칙을 편집합니다(페이지 맨 위에서 한 번 클릭하여 편집한 다음 규칙별로 다시 편집). 기존 THEN 규칙을 삭제하고 동작 추가 > 리디렉션 대상...을 클릭하여 바꿉니다. 결과로 나온 THEN 구성에서 HTTPS 및 포트 443을 지정하고 다른 옵션을 기본 설정으로 유지합니다. 설정을 저장한 다음 업데이트를 클릭합니다.
      • HTTP:443에서 규칙 보기/편집을 클릭합니다. 결과로 표시되는 규칙 페이지에서 편집 아이콘을 클릭하여 규칙을 편집합니다(페이지 맨 위에서 한 번 클릭하여 편집한 다음 규칙별로 다시 편집). THEN 구성의 전달 대상...에서 대상 그룹을 방금 만든 HTTPS 그룹으로 변경합니다. 그룹 수준 연결 유지에서 연결 유지를 사용하도록 설정하고 기간을 1일로 설정합니다. 설정을 저장한 다음 업데이트를 클릭합니다.

    6단계: SSL 확인

    https://tableau.example.com으로 이동하여 구성을 확인합니다.

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