NAVER Cloud

[네이버클라우드] Ncloud Single Sign-On(SSO) / keycloak 연동 - 1. keycloak 설치

한크크 2024. 6. 12. 19:04

Ncloud Single Sign-On 서비스는 네이버클라우드에서 사용중인 계정을 외부 IDP 에 연동하거나 외부 IDP 계정을 네이버클라우드에 연동할 수 있는 서비스로 SSO 계정별로 네이버클라우드의 리소스 접근 권한을 설정할 수 있다. 

 

여기서는 외부 IDP (keycloak) 에 등록된 계정으로 네이버클라우드에 접근할 수 있도록 설정하는 테스트를 진행해 보았다. 

먼저 Keycloak 설치를 진행한 후 Ncloud Single Sign-On 서비스를 설정하였다. 

 

1. Keycloak 설치

vm 에 직접 설치하는 방법도 어렵지는 않지만 https 설정을 Disabled 하기 위해서는 http://localhost 로 접근해야 해서 vm 에 docker 를 띄워서 구동하였다. 

# keycloak 컨테이너 구동 커맨드
docker run \
  --name keycloak \
  -p 8080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:25.0.0 \
  start-dev &
  
  Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Trying to pull quay.io/keycloak/keycloak:25.0.0...
Getting image source signatures
Copying blob 1a6bf4378530 done
Copying blob 969cd2eb857f done
Copying blob 57ff0d98393a done
Copying blob d1bbf278c66a done
Copying config 874c259155 done
Writing manifest to image destination
Storing signatures
Updating the configuration and installing your custom providers, if any. Please wait.
2024-06-12 09:51:40,324 INFO  [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 10114ms
2024-06-12 09:51:45,220 INFO  [org.infinispan.CONTAINER] (Thread-5) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller'
2024-06-12 09:51:46,232 INFO  [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_549277, Site name: null
2024-06-12 09:51:46,239 INFO  [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
2024-06-12 09:51:47,729 INFO  [org.keycloak.quarkus.runtime.storage.legacy.liquibase.QuarkusJpaUpdaterProvider] (main) Initializing database schema. Using changelog META-INF/jpa-changelog-master.xml

UPDATE SUMMARY
Run:                        133
Previously run:               0
Filtered out:                 0
-------------------------------
Total change sets:          133

2024-06-12 09:51:51,098 INFO  [org.keycloak.services] (main) KC-SERVICES0050: Initializing master realm
2024-06-12 09:51:54,118 INFO  [org.keycloak.services] (main) KC-SERVICES0009: Added user 'admin' to realm 'master'
2024-06-12 09:51:54,239 INFO  [io.quarkus] (main) Keycloak 25.0.0 on JVM (powered by Quarkus 3.8.5) started in 13.767s. Listening on: http://0.0.0.0:8080. Management interface listening on http://0.0.0.0:9000.
2024-06-12 09:51:54,239 INFO  [io.quarkus] (main) Profile dev activated.
2024-06-12 09:51:54,239 INFO  [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, keycloak, logging-gelf, narayana-jta, reactive-routes, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
2024-06-12 09:51:54,246 WARN  [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.

# 로그가 이렇게 종료되면 기동 완료된 것

 

 

이렇게 구동 후 바로 브라우저에서 http://ip:8080 으로 접근해보면 HTTPS required 오류가 발생하면서 접근할 수 없다. keycloak 컨테이너에 접속해서 sslRequired 설정을 변경해야 한다. 

# 컨테이너 기동 여부 확인
docker ps -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                             COMMAND     CREATED        STATUS        PORTS                   NAMES
0060c0bb47f3  quay.io/keycloak/keycloak:25.0.0  start-dev   7 minutes ago  Up 7 minutes  0.0.0.0:8080->8080/tcp  keycloak

# keycloak 컨테이너에 접속
docker exec -it 0060c0bb47f3 bash

Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.

bash-5.1$ cd /opt/keycloak/bin
bash-5.1$ ./kcadm.sh config credentials --server http://localhost:8080 --realm master --user admin
Logging into http://localhost:8080 as user admin of realm master
Enter password: #docker run 할 때 설정한 패스워드 입력 (예제에서는 admin)
bash-5.1$ ./kcadm.sh update realms/master -s sslRequired=NONE

 

다시 브라우저에서 Reload 해보면 id/pwd 입력창이 보인다.

반응형