콘텐츠 보안 정책
Tableau Server는 CSP(콘텐츠 보안 정책) 표준을 지원합니다. CSP는 사이트 간 스크립팅 및 기타 악의적인 웹 기반 공격에 대한 추가 보안 계층입니다. CSP는 HTTP 응답 헤더로 구현되며, 이 헤더를 사용하여 스크립트 및 이미지와 같은 외부 리소스를 안전하게 로드할 수 있는 위치를 지정할 수 있습니다.
CSP에 대한 자세한 내용은 Mozilla 웹 사이트(링크가 새 창에서 열림)를 참조하십시오.
CSP 구성 및 사용하도록 설정
CSP는 tsm configuration set 옵션 명령을 사용하여 구성하고 사용하도록 설정합니다. 분산 배포에서 Tableau Server를 실행하는 경우 클러스터의 초기 노드에서 이러한 명령을 실행합니다. tsm pending-changes apply를 실행하면 클러스터 전체에 구성이 적용됩니다.
1단계: 기본 지시문 설정
Tableau Server에는 아래 테이블에 기본 지시문 집합이 포함되어 있습니다.
지시문을 설정하려면 다음 tsm 구문을 사용하십시오.
tsm configuration set -k content_security_policy.directive.<directive_name> -v "<value>"
예를 들어 connect_src
지시문을 설정하려면 다음 명령을 실행합니다.
tsm configuration set -k content_security_policy.directive.connect_src -v "* unsafe-inline"
옵션 | 기본값 | 설명 |
---|---|---|
content_security_policy.directive.default_src | ‘none’ | 다른 fetch 지시문에 대한 대체 지시문으로 사용됩니다. |
content_security_policy.directive.connect_src | * | 스크립트 인터페이스를 사용하여 로드할 수 있는 URL을 제한합니다. |
content_security_policy.directive.script_src | * | JavaScript의 유효한 원본을 지정합니다. |
content_security_policy.directive.style_src | * ‘unsafe-inline’ | 스타일시트의 유효한 원본을 지정합니다. |
content_security_policy.directive.img_src | * data: | 이미지 및 파비콘의 유효한 원본을 지정합니다. |
content_security_policy.directive.font_src | * data: | @font-face를 사용하여 로드된 글꼴의 유효한 원본을 지정합니다. |
content_security_policy.directive.frame_src | * data: | <frame> 및 <iframe>과 같은 요소를 사용하여 로드하는 중첩된 탐색 컨텍스트의 유효한 원본을 지정합니다. |
content_security_policy.directive.object_src | data: | <object>, <embed> 및 <applet> 요소에 대한 유효한 원본을 지정합니다. |
content_security_policy.directive.report_uri | /vizql/csp-report | 사용자 에이전트에 CSP 위반 시도를 보고하도록 지시합니다. 이러한 위반 보고서는 HTTP POST 요청을 통해 지정된 URI에 전송된 JSON 문서로 구성됩니다. |
2단계: 다른 지시문 추가(선택 사항)
Tableau Server에 포함된 기본 지시문은 CSP에서 지원하는 지시문의 하위 집합입니다.
지원되는 CSP 지시문의 전체 목록을 보려면 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy(링크가 새 창에서 열림)로 이동하십시오.
content_security_policy.directive 네임스페이스에 새 지시문을 추가하는 방식으로 기존 기본 집합에 지시문을 추가할 수 있습니다. 새 지시문을 추가할 때 --force-keys
매개 변수를 포함해야 합니다. 구문은 다음과 같습니다.
tsm configuration set -k content_security_policy.directive.<new_directive_name> -v "<value>" --force-keys
예를 들어 worker-src
(링크가 새 창에서 열림) 지시문을 추가하려면 다음 명령을 실행합니다.
tsm configuration set -k content_security_policy.directive.worker-src -v "none" --force-keys
3단계: 보고 전용 지시문 지정(선택 사항)
일부 지시문을 보고하고 다른 지시문을 적용하도록 CPS를 구성할 수 있습니다. content_security_policy.report_only_enable가 true로 설정되어 있어도 content_security_policy.enforce_enabled를 true로 설정하면 모든 지시문이 적용됩니다.
지시문을 "report-only"로 지정하고 적용하지 않으려면 report_only_directive 네임스페이스에 지시문을 추가합니다. 새 지시문을 추가할 때 --force-keys
매개 변수를 포함해야 합니다. 구문은 다음과 같습니다.
tsm configuration set -k content_security_policy.report_only_directive.<directive_name> -v "<value>" --force-keys
예를 들어 script_src
지시문을 보고 전용으로 설정하려면 다음 명령을 실행합니다.
tsm configuration set -k content_security_policy.report_only_directive.script_src -v " http://*.example.com" --force-keys
4단계: Tableau Server에서 CSP를 사용하도록 설정
지시문을 구성한 후 Tableau Server에서 CSP를 사용하도록 설정합니다.
다음 옵션은 설정한 지시문에 대해 적용 또는 보고 전용 모드를 사용하도록 설정하는 데 사용됩니다.
옵션 | 기본값 | 설명 |
---|---|---|
content_security_policy.enforce_enabled | false | 모든 위반이 브라우저에서 적용되도록 모든 요청에 CSP 헤더를 추가합니다. |
content_security_policy.report_only_enabled | true | 모든 위반이 vizql-client 로그에 기록되지만 브라우저에서 적용되지 않도록 모든 요청에 CSP 헤더를 추가합니다. |
지정한 CSP 지시문을 적용하도록 설정하려면 다음 명령을 실행합니다.
tsm configuration set -k content_security_policy.enforce_enabled -v true
5단계: tsm pending-changes apply 실행
CSP 구성을 마쳤으면 tsm pending-changes apply를 실행합니다.
보류 중인 변경 내용을 적용하려면 서버를 다시 시작해야 하는 경우 pending-changes apply
명령은 서버가 다시 시작됨을 알리는 메시지를 표시합니다. 서버가 중지된 경우에도 이 메시지가 표시되지만 이 경우 다시 시작은 없습니다. --ignore-prompt
옵션을 사용하여 이 메시지를 표시하지 않을 수 있지만 다시 시작 동작은 변경되지 않습니다. 변경 내용을 적용해도 다시 시작할 필요가 없는 경우 메시지 없이 변경 내용이 적용됩니다. 자세한 내용은 tsm pending-changes apply를 참조하십시오.
CSP 보고서 보기
지정된 비주얼리제이션에 대한 CSP 위반을 보려면 개발자 도구가 포함된 브라우저에서 비주얼리제이션을 로드합니다. 이 예에서는 Chrome 브라우저를 사용합니다.
CSP를 구성한 Tableau Server 배포에서 호스팅되는 위반을 사용하여 테스트 비주얼리제이션을 로드합니다.
CTRL+Shift+I
를 입력하여 Chrome의 개발자 도구를 엽니다.Network(네트워크) 탭을 클릭합니다.
Filter(필터) 필드에
csp-report
를 입력한 다음 Find All(모두 찾기)을 클릭합니다.위반이 없는 경우 검색에서 CSP 보고서가 반환되지 않습니다.
위반이 있는 경우 결과 패널에서 Headers(헤더) 탭을 클릭하고 맨 아래로 스크롤하여 Request Payload(페이로드 요청)를 표시합니다.