본문 바로가기
IT KNOWLEDGE

Keycloak과 Grafana 연동

by BTC_보담씨 2023. 7. 21.

항상 웃음이 나는 픠식팀 입니다.

오늘은 keycloak과 grafana를 연동을 해보는 시간을 가져 봅시다.

 

지금 실습하는 keycloak은 13버전으로 구버전입니다.

그러나 최신버전과 엄청나게 차이가 나지 않으니 구버전의 제 글을 보고 따라해보시고

최신의 버전으로도 한번 해보시길 권해드립니다 :)

 

docker run -d -p 8080:8080 -e KEYCLOAK_USER=admin --name keycloak -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:13.0.1

Docker - Keycloak

 

Docker - Keycloak

A realm in Keycloak is equivalent to a tenant. Each realm allows an administrator to create isolated groups of applications and users. Initially, Keycloak includes a single realm, called master. Use this realm only for managing Keycloak and not for managin

www.keycloak.org

 

Realm 생성

처음 keycloak을 실행하게 되면 Master Realm만 있기 때문에 다른 Realm을 생성해줘야 합니다.

Client 생성

저희가 연동할 어플리케이션인 그라파나이기 때문에 클라이언트의 경우 그라파나라고 지정해줬습니다.

 

Realm Role 생성

keycloak의 경우 Realm 단위의 Role을 지정해 줄 수도 있고 각 개별 Client 단의 단위로 Role을 지정해 줄 수 있는데요

해당 글은 Realm 단의 Role을 지정하는 실습이기 때문에 Realm Role에 대해서 생성하겠습니다.

그리고 중요한 것이 어플리케이션 별로 따로 Role이 존재합니다 특히나 적합한 Role을 생성해서 만들지 않을 경우 연동이 되지 않을 수 있으니 알고 있으시면 좋겠습니다.

 

Grafana에서는 3가지 Admin, Viwer, Editor의 롤이 존재 합니다.

 

Mapper 생성

 

User 생성

사용자를 생성하고 패스워드를 지정해줍니다.

 

 

그리고 사용자의 역할을 매핑해주시면 됩니다.

그림에서는 두 가지의 Realm Roles, Client Roles가 표시되어 있는데요 블로그 글에서는 Realm Role에 대해서 진행하였으니 위에 Realm Roles에서 admin의 역할을 할당해주시면 됩니다.

 

JWT 확인

이제 저희가 설정한 것들이 제대로 정상 작동하는지 확인을 해봐야겠죠

저 같은 경우 postman, insomnia를 사용해서 확인을 하는데요 간단하게 리눅스 명령어를 통해서 확인을 할 수 있게 명령어도 적어 놓겠습니다

curl -L -X POST 'http://{Keycloak Address}:8080/auth/realms/testrealm/protocol/openid-connect/token' \\
-H 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'client_id=grafana' \\
--data-urlencode 'grant_type=password' \\
--data-urlencode 'client_secret={Client_Secret_Key}' \\
--data-urlencode 'scope=openid' \\
--data-urlencode 'username=user' \\
--data-urlencode 'password=1234'

 

JWT.IO

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

해당 사이트에서 토큰의 값을 열어볼 수 있습니다.

 

Grafana

마지막으로 그라파나를 배포 해주시면 되는데요 저 같은 경우에는 도커 yaml에 그라파나 구성파일을 적용시켜 배포하는 방식을 적용하였습니다.

docker-compose.yaml

version: '3'
services:
  grafana:
    image: grafana/grafana
    container_name : grafana
    ports:
      - 3000:3000
    volumes:
      - grafana-data:/var/lib/grafana
      - ./grafana.ini:/etc/grafana/grafana.ini
    restart: always

volumes:
  grafana-data:

grafana.ini

[server]
domain = http://{Grafana Address}:3000/
root_url = http://{Grafana Address}:3000/

[auth.generic_oauth]
enabled = true
name = keycloakOAuth
allow_sign_up = true
client_id = grafana
client_secret = {Client_Secret_Key}
scopes = openid profile email
auth_url = http://{Keycloak Address}:8080/auth/realms/testrealm/protocol/openid-connect/auth
token_url = http://{Keycloak Address}:8080/auth/realms/testrealm/protocol/openid-connect/token
api_url = http://{Keycloak Address}:8080/auth/realms/testrealm/protocol/openid-connect/userinfo
role_attribute_path = contains(roles[*], 'admin') && 'Admin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer'

[auth]
disable_login_form = false
oauth_auto_login = false

[security]
allow_embedding = true
cookie_secure = false
cookie_samesite = lax

[users]
auto_assign_org = true
auto_assign_org_role = Admin

role_attrtibute_path를 통해서 역할에 대한 설정을 꼭 지정해주셔야 합니다.

 

감사합니다 다음번에는 더 재미있는 글로 찾아 뵙겠습니다 감사합니다.

'IT KNOWLEDGE' 카테고리의 다른 글

정적 팩토리 메서드(Static Factory Method)  (0) 2023.08.04
[Youtube API] YouTube Data API v3 개요  (0) 2023.08.03
Translation LLM 실습  (0) 2023.07.21
백엔드란?  (0) 2023.07.21
JWT 토큰과 세션의 차이점  (0) 2023.07.21

댓글