우분투에서 Keycloak을 설치하고 설정하여 사용할 수 있는 방법
Keycloak은 강력한 오픈소스 인증 및 권한 부여 솔루션으로 다양한 인증 및 SSO 기능을 제공합니다.
1. MySQL 설치
wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
sudo apt update
sudo apt install mysql-server
mysqld -V
$ mysqld -V
/usr/sbin/mysqld Ver 8.4.3 for Linux on x86_64 (MySQL Community Server - GPL)
2. Java 설치
Keycloak을 설치하기 위해서는 Java 11 이상의 버전이 필요합니다.
sudo apt update
sudo apt install -y openjdk-17-jdk
java --version
$ java --version
openjdk 17.0.12 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Ubuntu-1ubuntu222.04, mixed mode, sharing)
3. Keycloak 설치
작업 디렉토리로 이동
cd /usr/local/src
/opt 디렉토리 생성
sudo mkdir -p /opt
sudo mkdir -p mkdir /opt/keycloak/log
3.1 Keycloack 사용자 계정 생성
sudo useradd -r -s /sbin/nologin keycloak
3.2 Keycloak 다운로드(최신 버전)
KEYCLOAK_VERSION=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
echo ${KEYCLOAK_VERSION}
curl -fsSL https://github.com/keycloak/keycloak/releases/download/${KEYCLOAK_VERSION}/keycloak-${KEYCLOAK_VERSION}.tar.gz \
-o keycloak-${KEYCLOAK_VERSION}.tar.gz
3.3 압축 해제
tar -xzf keycloak-${KEYCLOAK_VERSION}.tar.gz
mv keycloak-${KEYCLOAK_VERSION} /opt/keycloak
sudo chown -R keycloak:keycloak /opt/keycloak
3.4 데이터베이스 구성
Keycloak 데이터베이스를 MySQL에 생성하고 사용자 권한을 부여합니다.
MySQL 데이터베이스 및 사용자 생성
- 데이터베이스 이름 : keycloak_db
- 사용자 이름 : keycloak_user
- 사용자 비밀번호 : keycloak_password
sudo mysql -u root -p
CREATE DATABASE keycloak_db;
CREATE USER 'keycloak_user'@'localhost' IDENTIFIED BY 'keycloak_password';
GRANT ALL PRIVILEGES ON keycloak_db.* TO 'keycloak_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
3.5 MySQL JDBC 드라이버 설치
MySQL 데이터베이스에 연결하려면 MySQL JDBC 드라이버를 Keycloak에 추가해야 합니다.
wget -q https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j_9.1.0-1ubuntu22.04_all.deb
sudo dpkg -i mysql-connector-j_9.1.0-1ubuntu22.04_all.deb
드라이버 복사
- .jar 파일을 Keycloak의 providers 디렉터리에 복사합니다.
sudo cp /usr/share/java/mysql-connector-j-9.1.0.jar /opt/keycloak/providers/
ls -l /opt/keycloak/providers/mysql-connector-j-9.1.0.jar
3.6 Keycloak 설정
Keycloak의 설정 파일에서 MySQL을 데이터베이스로 사용하도록 설정합니다.
sudo vim /opt/keycloak/conf/keycloak.conf
---
cat /opt/keycloak/conf/keycloak.conf
# Basic settings for running in production. Change accordingly before deploying the server.
# Database
# The database vendor.
#db=postgres
# The username of the database user.
#db-username=keycloak
# The password of the database user.
#db-password=password
# The full database JDBC URL. If not provided, a default URL is set based on the selected database vendor.
#db-url=jdbc:postgresql://localhost/keycloak
# Observability
# If the server should expose healthcheck endpoints.
#health-enabled=true
# If the server should expose metrics endpoints.
#metrics-enabled=true
# HTTP
# The file path to a server certificate or certificate chain in PEM format.
#https-certificate-file=${kc.home.dir}conf/server.crt.pem
# The file path to a private key in PEM format.
#https-certificate-key-file=${kc.home.dir}conf/server.key.pem
# The proxy address forwarding mode if the server is behind a reverse proxy.
#proxy=reencrypt
# Do not attach route to cookies and rely on the session affinity capabilities from reverse proxy
#spi-sticky-session-encoder-infinispan-should-attach-route=false
# Hostname for the Keycloak server.
#hostname=myhostname
---
db=mysql
db-username=keycloak_user
db-password=keycloak_password
db-url=jdbc:mysql://localhost:3306/keycloak_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
3.7 Keycloak 서버 시작
Keycloak은 두 가지 실행 모드를 지원합니다.
디렉터리로 이동
cd /opt/keycloak
초기화 및 시작
export KC_HOSTNAME=192.168.0.111
export KC_BOOTSTRAP_ADMIN_USERNAME=admin
export KC_BOOTSTRAP_ADMIN_PASSWORD=adminpassword
./bin/kc.sh show-config
Current Mode: production
Current Configuration:
kc.bootstrap-admin-password = ******* (ENV)
kc.bootstrap-admin-username = admin (ENV)
kc.config.args = show-config (SysPropConfigSource)
kc.config.built = true (SysPropConfigSource)
kc.db = mysql (keycloak.conf)
kc.db-password = ******* (keycloak.conf)
kc.db-url = jdbc:mysql://localhost:3306/keycloak_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC (keycloak.conf)
kc.db-username = keycloak_user (keycloak.conf)
kc.hostname = 192.168.0.111 (ENV)
kc.log-console-output = default (classpath keycloak.conf)
kc.provider.file.mysql-connector-j-9.1.0.jar.last-modified = 1731386904968 (Persisted)
kc.spi-hostname-v2-hostname = 192.168.0.111 (ENV)
kc.version = 26.0.5 (SysPropConfigSource)
Keycloak 실행
bin/kc.sh start-dev
Keycloak 초기 설정
- 웹 브라우저를 열고 **http://localhost:8080**에 접속합니다.
http://localhost:8080
3.8 Keycloak 서비스 등록 및 자동 시작 설정
Keycloak 서비스 파일 생성
sudo tee /etc/systemd/system/keycloak.service > /dev/null <<EOF
[Unit]
Description=Keycloak Server
After=network.target
[Service]
User=root
WorkingDirectory=/opt/keycloak
ExecStart=/opt/keycloak/bin/kc.sh start
StandardOutput=append:/opt/keycloak/log/keycloak.log
StandardError=append:/opt/keycloak/log/keycloak.log
Restart=always
LimitNOFILE=102642
[Install]
WantedBy=multi-user.target
EOF
서비스 등록 및 시작
sudo systemctl daemon-reload
sudo systemctl enable --now keycloak
sudo systemctl restart keycloak
sudo systemctl status keycloak
sudo journalctl -xeu keycloak.service
sudo journalctl -u keycloak.service -b
관리자 콘솔 로그인
realm 생성
- Realm name : T20241112
Users 생성(Users > Create user)
- Required user actions : -
- Username : ktest
- Email : ktest@localhost
- First name : test
- Last name : kim
Set password(Users > User details > Credentials)
- Password : ktest
- Password confirmation : ktest
Clients 생성(Clients > Create client)
- Client type : OpenID Connect
- Client ID : test-client
- Name : TEST Client
- Description : TEST Client
- Root URL: http://192.168.0.111
- Home URL : http://www.sangchul.kr/
- Valid redirect URIs
- http://www.sangchul.kr/*
- http://192.168.0.111/*
간단한 테스트
로그인
http://192.168.0.111:8080/realms/T20241112/protocol/openid-connect/auth?client_id=test-client&response_type=code&state=12345
- Username : ktest
- Password : ktest
Sessions 확인(Users > User details)
참고URL
- Keycloak GitHub : keycloak
- Keycloak Tutorials : Installing & Configuring Keycloak
- Keycloak Documentation : Server Administration Guide
'리눅스' 카테고리의 다른 글
[draft] 우분투에서 Keycloak을 기반으로 SSH 인증을 설정하는 방법 (0) | 2024.11.10 |
---|---|
[draft] SSO란 (0) | 2024.11.10 |
[draft] CentOS 7에서 Zabbix Agent 2를 설치하고 설정하는 방법 (0) | 2024.11.08 |
[draft] 우분투에서 Graylog 설치하는 방법 (1) | 2024.11.08 |
[draft] 우분투에서 MongoDB Community Edition을 설치하는 방법 (0) | 2024.11.07 |