RATSENO

AWS EC2에 docker, docker-compose를 이용하여 keycloak 설치하기 본문

DEV/DevOps

AWS EC2에 docker, docker-compose를 이용하여 keycloak 설치하기

RATSENO 2020. 10. 21. 13:23

keycloak이라는 오픈소스를 사용해보고 공부하기 위해서 어떻게 설치를 해야 하나 고민하다

회사 계정으로 AWS를 쓸 수 있어서, EC2에 docker와 docker-compose를 설치 후 진행해보기로 했습니다.

 

keycloak이란 일단 오픈소스이며, 최신 애플리케이션 및 서비스를 위한 오픈소스 ID 및 Access 관리 솔루션입니다.

자세한 사용법은 먼저 설치부터 하고 공부하려 합니다...ㅠ

 

먼저 EC2에 docker와 docker-compose는 설치되어 있다는 전제 하여 진행하겠습니다.

megazonedsg.github.io/1-Make-Docker/#4-docker-compose-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

AWS EC2 인스턴스에 Docker 설치하기 [1/6]

1# AWS EC2 인스턴스에 Docker 설치하기

megazonedsg.github.io

이 포스팅의 4번까지 진행 주시면 됩니다.

 

이어서 docker-compose를 이용하여 keycloak을 설치하겠습니다.

원하는 directory를 생성합니다. 저는 keystore-test란 이름으로 생성하였습니다.

 

keycloak 설치에 필요한 yml파일을 다운로드합니다.

wget https://github.com/jboss-dockerfiles/keycloak/raw/master/docker-compose-examples/keycloak-postgres.yml

 

해당 yml파일을 이용하여 keycloak 컨테이너와, keycloak이 필요로 하는 postgres컨테이너(DB)를 생성합니다.

약간의 수정이 필요하기 때문에 먼저 해당 파일을 열어봅시다.

vi keycloak-postgres.yml
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
  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: Pa55w0rd
        # 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에 컨테이너 실행 시 필요한 환경변수 등 정보들이 (DB정보, keycloak admin 페이지 계정 정보) 작성되어 있습니다. 필요에 따라서 변경해주시면 됩니다.

이대로 진행해도 되지만... 제가 설치를 진행하면서 발생한 문제를 해결하기 위해 약간의 수정이 필요했습니다.

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: Pa55w0rd
        # 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

 postgres컨테이너 ports부분에 -5432:5432를 추가했습니다. 호스트 5432 포트와 컨테이너 5432 포트를 연결하였습니다.

EC2의 아웃바운드 8080 포트와 5432 포트를 추가 후 접근하게 되면,

각각 외부에서 EC2 IP : {keycloak port 8080, postgres port 5432}로 접근 가능합니다.

 

이제 컨테이너를 올려보겠습니다.

docker-compose -f keycloak-postgres.yml up

 

잘 올라갔는지 확인해보겠습니다.

docker ps

keycloak에 UI페이지에 접근해봅시다.

http://{ec2-address}:8080/auth/

admin console로 접근하기 위해 Administratsion Console을 클릭하게 되면 문제가 발생합니다..

 

구글링 해보니 지금 상황에서 가장 도움이 될만한 질문이 2개를 찾을 수 있었다.

stackoverflow.com/questions/41592284/how-to-disable-https-on-keycloak

 

How to disable HTTPS on Keycloak

Like in the title: How to disable the requirement of https on Keycloak? Using only the terminal, as I can't log in to the administrator panel, because... there's no https.

stackoverflow.com

stackoverflow.com/questions/30622599/https-required-while-logging-in-to-keycloak-as-admin

 

"HTTPS required" while logging in to Keycloak as admin

I am using Keycloak (version 1.0.4.Final) in JBOSS AS 7.1.1 server. The server is on Amazon AWS. I am able to start the jboss server with keycloak. i can see the keycloak default screen while hitt...

stackoverflow.com

아주 간단하게 설명하자면, 외부 IP로 접근하는 요청에 대해서 기본은 SSL이 필수로 기본 설정이 되어있다는 것 같았습니다.

이 값은 DB에 저장이 되어있고요.

 

keycloak컨테이너를 올릴 때 따로 DB를 설정하지 않으면 H2 DB를 이용하는데 우리는 postgres를 이용하였습니다.

 

 이 SSL옵션은 realm이라는 tableSSL_REQUIRED라는 컬럼으로 EXTERNAL이라는 값으로 되어있습니다.(기본 설정)

이 값을 NONE으로 변경 후 keycloak 컨테이너를 재실행하면 접속할 수 있습니다..!

이를 위해서 keycloak-postgres.yml 에서 postgres 컨테이너로 접근하기 위해 ports 부분을 수정하였던 것입니다.

 

현재 HTTP로만으로 충분하기에(실습용)_이 값을 바꿔보겠습니다.

커멘드로 직접 postgres 컨테이너에 접근하여 (docker exec -it {postgres 컨테이너 id} bash) 수정해도 되지만 저는 DB Client tool을 이용하여 수정하였습니다. (tool은 dbeaver를 사용하였습니다.)

DB 연결 정보는 keycloak-postgres.yml 파일에 이미 명시되어 있습니다.

ssl_required 필드 값을 NONE으로 변경 후 keycloak 컨테이너를 재실행한 뒤 다시 admin console로 접근해봅니다.

 

 정상적인 로그인 화면이 노출됩니다.

 

로그인을 하게 되면

이렇게 노출됩니다.

 

실습으로 keycloak을 사용할 때는 이런 식으로 사용해도 되지만, 나중에 프로젝트에 쓰일 때는 HTTPS 방법으로

고려야 해야 될 사항인 것 같습니다...

 

누군가에게 도움이 될 포스팅이었으면 좋겠습니다.

감사합니다.

Comments