본문 바로가기
IT/도커

[docker] Grafana iframe에 넣을 때 'X-Frame-Options' to 'deny' 오류 해결

by 한동두 2024. 5. 9.
반응형

저번에 올렸던 게시글처럼 (https://dongdu-blog.tistory.com/23)

chcon -t container_file_t /host/path/prometheus/data

과 같은 코드를 통해 폴더의 권한을 해제해준 다음

 

# prometheus Run
docker run -it -d -p 29093(임의의 포트번호):9090 -v /host/path/prometheus/data:/prometheus --name containername image/prometheus:1.0(version)

# grafana Run
docker run -it -d -p 23000(임의의 포트번호):3000 -e GF_SECURITY_ADMIN_USER=[id] -e GF_SECURITY_ADMIN_PASSWORD=[pw] -e GF_USERS_ALLOW_SIGN_UP=false -e GF_AUTH_ANONYMOUS_ENABLED=true -e GF_USERS_ALLOW_ORG_CREATE=false -v /host/path/grafana/data:/var/lib/grafana --name containername2 image/grafana:1.0

위와 같이 prometheus와 grafana를 Run해주면 도커 컨테이너가 성공적으로 올라가게 된다.

(docker-compose.yml을 이용해도 마찬가지임)

 

이렇게 생성된 grafana를 웹페이지에 iframe안에 띄우려고 했는데....

 

 

 


1. 문제상황

<iframe src="grafana url" width="100%" height="700px">

iframe 내의  src 주소가 안열리는 모습

src에 grafana 링크를 넣었는데 안열리는 모습이다.

grafana링크를 그냥 주소창에 넣엇을때는 아주 잘 나오는데.. iframe에 넣었더니 안나온다.

 

또,

Refused to display 'grafana url' in a frame because it set 'X-Frame-Options' to 'deny'.

이런식의 에러메세지가 나온다.

 

 

 


2. 문제 파악

검색 결과, grafana를 생성할 때, allow_embedding값을 true로 만들면 된다고 한다.

다들 도커 내에 생성된 grafana.ini 파일 안에 있는 값을 직접 바꾼다는데, 
내 코드의 경우 config file을 지정해두고 run하는게 아니여서, grafana.ini 파일을 바꾼다고 해도 적용되지 않을것 같았다.

 

그렇다면, 어떻게 이 값을 바꿔서 생성할 수 있을까? 생각해봤다.

 

좀 쉬운 방법을 생각해 봤는데, 

docker run 할 때 -e옵션에 추가하면 다른거 건들일 필요도 없고 편할거같은데, 가능할까? 라는 생각이 들었다.

(docker-compose.yml의 경우 environment)

 

근데 -e에 GF_SECURITY_ADMIN_USER 옵션같은걸 보면 대문자고.. GF같은거도 있고... 아무튼 그냥 allow_embedding=true 처럼 쓸 순 없을 것 같았다.

 

 

 


3. 문제 해결

최대한 제일 쉬운 방법인  -e 옵션을 이용해 보려고 엄청 찾아봤다!

역시 가능했다. 비교적 빠르게 해답을 발견해서 너무 기뻤다.

 

방법은,

-e에 GF_SECURITY_ALLOW_EMBEDDING=true 를 넣어주는것

(docker-compose.yml의 경우 environment에 '- GF_SECURITY_ALLOW_EMBEDDING=true' 추가)

 

docker run -it -d -p 23000(임의의 포트번호):3000 -e GF_SECURITY_ADMIN_USER=[id] -e GF_SECURITY_ADMIN_PASSWORD=[pw] -e GF_USERS_ALLOW_SIGN_UP=false -e GF_AUTH_ANONYMOUS_ENABLED=true -e GF_USERS_ALLOW_ORG_CREATE=false -e GF_SECURITY_ALLOW_EMBEDDING=true -v /host/path/grafana/data:/var/lib/grafana --name containername2 image/grafana:1.0

이렇게 수정해 준 후 실행시키면~!

 

문제 없이 iframe 내에서 실행 되는 모습
iframe 안에 띄워지는 모습

 

보안상 전체 화면을 캡쳐하긴 곤란하기 때문에..  일부만 캡쳐해서 iframe인지 좀 애매할 수 있는데,

실제로 iframe에서 열었고 잘 된다!

 

 

 

비교적 쉽게 해결이 되어서 다행이었다. 아래는 도움 받은 링크다. 

https://www.reddit.com/r/grafana/comments/g49b1q/how_to_set_allow_embeddingtrue/

 

From the grafana community on Reddit: How to set ALLOW_EMBEDDING=true?

Explore this post and more from the grafana community

www.reddit.com

 

 

문제가 있다면 아래에 댓글 달아주세요. 빠르게 답하도록 하겠습니다! 

반응형