클라우드 관련 프로젝트 진행하기에 앞서 keycloak을 사용하려하여 공부를 해보려한다.
keycloak은 ID 및 액세스 관리 솔루션을 제공하는 오픈소스이다.
인증(Authentication)과 인가(Authorization)을 쉽게 해주고 SSO(Single-Sign-On)을 가능하게 해주는 오픈소스이다.
그래서 SSO가 뭔데? 하고 궁금해졌다.
SSO는 Single-Sign-On의 약자로 한번의 로그인을 통해 그와 연결된 여러가지 다른 사이트들을 자동으로 접속하여 이용할 수 있도록 하는 방법이다.
일반적으로 각자 다른 사이트는 각각 사용자의 정보들과 DB가 각각 있는데 그 정보를 연동하여 사용해야 하는 경우가 발생할 수 있다. 이런 경우에 SSO 기능을 사용하게 되며 하나의 시스템에서 인증을 할 경우 그와 연결된 다른 시스템에서는 인증 정보가 있는지 없는지를 확인하여 이후 처리를 하도록 만들면 된다.
다중 프로토콜 지원
SSO
사용자 지정 역할 및 그룹
애플리케이션 인증 및 역할 기반 보호
외부 ID 소스 동기화
신원 중개
소셜 로그인
페이지 사용자 정의
docker run -d --name keycloak -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:10.0.0
Keycloak 서버가 성공적으로 실행되었다.
내가 원하는 실습이 진행되지 않아, 다른 방법으로 진행했다.
yml 파일을 이용하여 keycloak 컨테이너와 keycloak이 필요로 하는 postgres 컨테이너를 생성한다.
version: '3'
volumes:
postgres_data:
driver: local
services:
postgres:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
ports:
- 5432:5432
keycloak:
image: quay.io/keycloak/keycloak:latest
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: keycloak
DB_SCHEMA: public
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: admin
# Uncomment the line below if you want to specify JDBC parameters. The parameter below is just an example, and it shouldn't be used in production without knowledge. It is highly recommended that you read the PostgreSQL JDBC driver documentation in order to use it.
#JDBC_PARAMS: "ssl=true"
ports:
- 8080:8080
depends_on:
- postgres
위는 keycloak-postgres.yml 파일이다.
이제 컨테이너를 올려보자.
docker-compose -f keycloak-postgres.yml up
잘 올라갔는지 확인해보자.
이제 keycloak UI 페이지에 접근해보자.
http://{server-address}:8080/auth/
잘 접속된걸 볼 수 있다.
하지만 admin consol로 접근하기 위해 Administration Console 을 클릭하면 문제가 발생한다.
구글링 해보니 지금 상황에서 가장 도움이 될만한 질문이 2개를 찾을 수 있었다.
간단하게 말하면,
외부 IP로 접근하는 요청에 대해서 기본으로 SSL이 설정되어 있다는 것이다.
이 값은 DB에 저장이 되어있다.
DB가 처음에 나는 PostgreSQL을 사용하도록 구성하였기 때문에 SSL 옵션을 변경해주어야 한다.
SSL_REQUIRED : EXTERNAL -> NONE 변경
이 SSL 옵션은 realm 이라는 테이블에 SSL_REQUIRED라는 컬럼으로 EXTERNAL이라는 값으로 되어있다.
이 값을 NONE으로 변경후 keycloak 컨테이너를 재실행하면 접속할 수 있다.
컨테이너의 ID를 확인한다
docker ps
PostgreSQL 컨테이너에 'docker exec' 명령을 사용하여 접속한다.
docker exec -it 44b59be67b0f bash
PostgreSQL 데이터베이스에 접속한다.
psql -U keycloak -d keycloak
'realm' 테이블을 업데이트 한다. 'SSL_REQUIRED' 값을 'EXTERNAL'에서 'NONE'으로 변경한다.
UPDATE realm SET SSL_REQUIRED = 'NONE';
글이 많은 도움이 되었습니다, 감사합니다.