보안 강화 구성
보안 강화 구성 (Configure security hardening)
보안 강화(security hardening)는 악의적인 공격자가 특정 취약점을 악용하는 것을 막는 데 도움이 되는 추가 보안을 적용할 수 있게 해줘요. 쿠키 보안, 보안 헤더, 버전 숨김 등을 grafana.ini로 구성하는 방법을 다뤄요.
출처: 문서
본문
보안 강화를 사용하면 악의적인 공격자가 특정 취약점을 악용하는 것을 막는 데 도움이 되는 추가 보안을 적용할 수 있어요.
Note
이 설정들은 grafana.ini 구성 파일에서 사용할 수 있어요. 구성 파일의 변경 사항을 적용하려면 Grafana 서버를 재시작해요.
쿠키에 대한 추가 보안 (Additional security for cookies)
Grafana가 HTTPS를 사용한다면 시스템이 웹 UI 접근을 인증하는 데 사용하는 쿠키를 더욱 안전하게 만들 수 있어요. 쿠키에 추가 보안을 적용하면 공격자가 쿠키 값을 획득해 발생하는 특정 공격을 완화할 수 있어요.
Note
다음 구성이 제대로 작동하려면 Grafana가 HTTPS를 사용해야 해요.
쿠키에 Secure 속성 추가 (Add a secure attribute to cookies)
일부 MITM(중간자) 공격을 완화하려면 사용자를 인증하는 데 사용되는 쿠키에 Secure 속성을 추가해요. 이 속성은 사용자가 유효한 HTTPS 보안 연결을 통해서만 쿠키를 보내도록 강제해요.
예시:
[security]
# Set to true if you host Grafana behind HTTPS. The default value is false.
cookie_secure = true
쿠키에 SameSite 속성 추가 (Add a SameSite attribute to cookies)
거의 모든 CSRF 공격을 완화하려면 cookie_samesite 옵션을 strict로 설정해요. 이 설정은 클라이언트가 cross-site로 만들어지는 요청에서 쿠키를 보내는 것을 방지하며, 오직 쿠키를 만든 사이트에서만 보내게 해요.
예시:
[security]
# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled"
cookie_samesite = strict
Note
SameSite 속성을 "strict"로 설정하면 Grafana 인스턴스 내에서의 사용자 클릭만 작동해요. 기본 옵션인 "lax"는 이 동작을 만들지 않아요. 로그인에 OAuth/SAML을 사용하려면 이 속성을
lax로 구성해야 해요.
쿠키 이름에 접두사 추가 (Add a prefix to cookie names)
Cookie Prefix를 추가해 쿠키 인증을 더욱 안전하게 할 수 있어요. 특수 접두사가 없는 쿠키는 사이트가 HTTPS를 사용하더라도 중간자 공격에서 덮어쓸 수 있어요. 쿠키 접두사는 특정 기준이 충족될 때만 클라이언트가 쿠키를 수락하도록 강제해요.
현재 쿠키 이름에 __Secure- 또는 __Host- 접두사를 추가해요. 후자는 Set-Cookie 헤더를 보낸 호스트에서만 쿠키를 만들 수 있게 하여 추가 보호를 제공해요.
예시:
[auth]
# Login cookie name
login_cookie_name = __Host-grafana_session
보안 헤더 (Security headers)
Grafana는 XSS 같은 특정 공격을 완화하는 데 도움이 되도록 구성할 수 있는 몇 가지 추가 헤더를 포함해요.
Content Security Policy 추가 (Add a Content Security Policy)
content security policy(CSP)는 웹 브라우저가 콘텐츠를 처리하는 방식을 제어하는 HTTP 응답 헤더예요. 인라인 스크립트 실행 허용이나 특정 도메인의 이미지 로드 같은 것을 제어해요. 기본 CSP 템플릿은 이미 일부 공격에 대한 충분한 보호를 제공하도록 구성되어 있어요. 이 덕분에 공격자가 취약점이 존재할 때 임의 JavaScript를 실행하기가 더 어려워져요.
예시:
[security]
# Enable adding the Content-Security-Policy header to your requests.
# CSP enables you to control the resources the user agent can load and helps prevent XSS attacks.
content_security_policy = true
# Set the Content Security Policy template that is used when the Content-Security-Policy header is added to your requests.
# $NONCE in the template includes a random nonce.
# $ROOT_PATH is server.root_url without the protocol.
content_security_policy_template = """script-src 'self' 'unsafe-eval' 'unsafe-inline' 'strict-dynamic' $NONCE;object-src 'none';font-src 'self';style-src 'self' 'unsafe-inline' blob:;img-src * data:;base-uri 'self';connect-src 'self' grafana.com ws://$ROOT_PATH wss://$ROOT_PATH;manifest-src 'self';media-src 'none';form-action 'self';"""
Trusted types 활성화 (Enable trusted types)
현재 개발 중. Trusted types는 제한된 브라우저 지원을 가진 실험적인 Javascript API예요.
Trusted types는 개발자가 innerHTML 설정 같은 주입 지점(injection sinks)에 사용되는 문자열을 정화(sanitize)하도록 강제해 DOM XSS의 위험을 줄여요. 또한 trusted types를 활성화하면 이러한 주입 지점은 문자열을 정화하거나 그대로 두고 "safe"로 반환하는 정책을 통과해야 해요. 이것은 jQuery, Angular 같은 서드파티 라이브러리와 서드파티 플러그인의 클라이언트 측 주입 취약점으로부터 일부 보호를 제공해요.
주입 지점이 자동으로 정화되는 enforce 모드에서 trusted types를 활성화하려면:
- 구성에서
content_security_policy를 활성화해요. - 구성의
content_security_policy_template에require-trusted-types-for 'script'를 추가해요.
report 모드(trusted types로 정화되지 않은 입력이 콘솔에 기록됨)로 trusted types를 활성화하려면:
- 구성에서
content_security_policy_report_only를 활성화해요. - 구성의
content_security_policy_report_only_template에require-trusted-types-for 'script'를 추가해요.
이 기능은 현재 개발 중이므로 문제가 발생할 수 있어요. 문제가 생기거나 다른 피드백이 있다면 이슈를 열어주세요.
추가 보안 강화 (Additional security hardening)
Grafana 서버에는 보안을 강화하기 위해 선택할 수 있는 여러 내장 보안 기능이 있어요. 이 섹션은 보안을 강화하기 위해 사용할 수 있는 추가 기법을 설명해요.
버전 번호 숨기기 (Hide the version number)
true로 설정하면 Grafana 서버는 인증되지 않은 사용자에게 실행 중인 버전 번호를 숨겨요. 버전 번호는 사용자가 오래되고 취약한 Grafana 버전을 실행 중인지 드러낼 수 있어요.
예시:
[auth.anonymous]
# mask the Grafana version number for unauthenticated users
hide_version = true
메트릭에 대한 인증 활성화 (Enable auth for metrics)
기본적으로 Grafana 자체의 메트릭은 인증 없이 접근할 수 있어요. 이는 정보 누출로 이어질 수 있어요.
예시:
[metrics]
# If both are set, basic auth will be required for the metrics endpoints
basic_auth_username =
basic_auth_password =
도메인 검증 적용 (Enforce domain verification)
true로 설정하면 Grafana 서버는 실제 도메인과 일치하지 않는 Host-header 값을 가진 요청을 리다이렉트해요. 이는 일부 DNS 리바인딩 공격을 완화하는 데 도움이 될 수 있어요.
예시:
[server]
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
enforce_domain = true