IAM/SSO 관련기술

완제품

  • Keycloak
    https://github.com/keycloak/keycloak
  • Gluu
    https://gluu.org/docs/gluu-server/4.1/installation-guide/install-docker/
  • OpenAM, OpenDJ
    https://github.com/OpenIdentityPlatform/OpenAM
  • JOSSO
    http://www.josso.org/
    https://github.com/atricore/josso2
  • LemonLDAP
    https://lemonldap-ng.org/welcome/
    https://github.com/LemonLDAPNG/lemonldap-ng-docker
  • Shibbolet ldp
    https://wiki.shibboleth.net/confluence/display/DEV/Source+Code+Access
    https://github.com/Unicon/shibboleth-idp-dockerized
  • 389 Directory Server
  • GLAuth
  • RazDC
  • FreeIPA
    https://www.freeipa.org/page/Main_Page
  • https://github.com/jasny/SSO
  • https://github.com/heipei/nginx-sso
  • https://github.com/IdentityServer
  • https://github.com/freeipa/freeipa
  • https://github.com/wso2/product-is
  • https://github.com/authelia/authelia

라이브러리

  • CAS
  • https://github.com/spring-projects/spring-security-saml
  • https://github.com/spring-projects/spring-security-oauth
  • https://github.com/spring-projects/spring-security-kerberos
  • https://github.com/samitpal/simple-sso
  • https://github.com/go-oauth2/oauth2
  • Apache Shiro
  • https://github.com/jcasbin/shiro-casbin
  • pac4j
  • Apache CFX https://cxf.apache.org/
  • Apache Fortress
  • geronimo.apache.org
  • https://casbin.org/
  • https://github.com/casbin/jcasbin
  • https://github.com/casbin/casbin
  • https://github.com/OpenConext/Mujina
  • https://github.com/pac4j/spring-webmvc-pac4j
  • https://github.com/Neloop/jaclp

프로토콜

  • OAuth
  • JWT
  • SAML
  • Kerberos
  • Radius
    https://www.gnu.org/software/radius/
  • CAS
  • Session
  • BasicAuth
  • LDAP
  • OpenID

REF

  • https://www.getkisi.com/blog/authentication-protocols-overview
  • https://en.wikipedia.org/wiki/Authentication_protocol
  • https://www.geeksforgeeks.org/types-of-authentication-protocols
  • https://developer.okta.com/docs/concepts/saml

맨먼스 미신The Mythical Man-Month, 프레더릭 브룩스

내용

  • Prototype – 두 번째 시스템
    : 첫번째 시스템은 프로토타입이다
  • 1:10 업무효율
    : 같은 조직내에서 비슷한 급여를 받는 살마들 사이에도 업무능력 차이는 10배
  • 일정 늘어짐
    : 일정은 항상 늘어진다. 일정을 너무 루즈하게 잡은게 아니라면. 돌발상황에 대비해 조금 타이트하게 업무처리
  • 문서화
    : 워크북. 요즘은 위키를 주로 사용
  • 급하다고 많은 인원 투입
    : 의사소통 비용 증가
  • 소수정예
    : 큰 프로젝트 불가
  • 핵심개발인력과 보조인력 구조
    : 아키텍트와 모듈분할
  • 구체적인 마일스톤의 정의
  • 프로젝트 관리자는 의사 결정이 아닌 의사 소통

대상

오히려 개발자보다
한국에서의 특이직군인 기획자, PM
그리고 스타트업 대표, PO, 원청업체담당자가 봐야 할 책

읽고나서

소프트웨어 공학을 모를 때도
개발 업무를 하면서 맞딱뜨리게 되는 불편한 점들과 개선점을 생각했었는데
내가 찾아낸 최선의 방법의 핵심은 빠른 프로토타이핑과 작은 개선의 반복이었다.

이 책에서는 이것을 포함해서 그리고 더 다양한 상황에서의 대응법이 잘 정리가 되어 있다. 현업을 겪어보지 못했다면 그렇구나.. 하면서 감흥없이 넘어갔을 것 같다. 어차피 한번 겪어보고 다시 읽어야 됐었겠지
소프트웨어 개발 싸이클틀 겪어 본 사람이라면 이 책을 읽으면서 자기가 겪었던 문제점이 그대로 다 써 있다는데 놀라지 않을까

1975년 초판이라는데
아직도 그대로라니

개발에 필요한 Data SEED 종류

개발을 할 때 상황에 따라 다른 초기 데이터가 필요하다

init seed

데이터베이스 초기화

  • db schema

시스템 구동에 필수적인 데이터

거래소 개발인 경우라고 가정하고

  • 코인 메타데이터
    • BTC
    • ETH

faker seed

UI를 확인하기 위한 데이터

SNS에서 친구 프로필 목록 화면인 경우

  • 이름
  • 전화번호
  • 이메일
  • 주소
  • 회사

replica seed

실제 환경에서 테스트를 하는 경우

production -> 데이터 복제 후 민감정보 제거

VSCODE ssiba

터미널과 진짜 터미널의 환경변수가 다르다

아래 명령으로 확인

echo $PATH

command+shift+p – Preferences: Open Settings (JSON)

"terminal.integrated.env.osx": {
  "PATH": "$PATH"
}

REF

  • https://stackoverflow.com/questions/43983718/set-global-path-environment-variable-in-vs-code

UNIX 유닉스의 탄생

그냥 옛날이야기나 써 있을 줄 알았는데
기술서적이었다

유닉스 계열을 많이 경험 해 보지 않은 사람이 보면 대부분 내용은 그냥 넘어가야 하지 않을까
awk, sed, grep, … 을 한 번도 써 보지 않았다면 내용에 몰입하기 힘들 것 같다.

자주 사용하던 기술들이 어떻게 만들어졌고 왜 생겼는지를 알게 되는것으로도
기술을 이해하는데 도움이 되니
유닉스계열(리눅스)를 자주 사용하는 사람이라면 한번 보면 좋을 것 같다

미국의 벨 연구소

kt연구소랑 비슷한 분위기일 것 같다
독점기업의 지원금에 돈 걱정없고
빡빡한 듯 하지만 자유롭고
연구 좀 실패해도 아무도 뭐라 안 하고

KT연구소도 좀

바이든 대통령님 초거대기업 MS의 자회사 Github의 횡포를 막아주세요.

바이든 대통령님, 안녕하십니까.

저는 빌드배포산업 협회원이며 해당 산업에 종사하고 있는 영세 자영업자입니다.

근래 거대기업 MS가 막대한 자본력을 바탕으로 개발자의 성지인 Github서비스를 인수하는 사태가 발생하였읍니다. 오픈소스 정신으로 무장한 개발자들의 공동체가 거대 자본의 발밑에 들어가 버린 사건으로 저와 저희 협회 그리고 전세계 개발자들이 많은 걱정을 하였읍니다. 하지만 한동안 MS는 별다른 행보를 취하지 않은 상태로 Github를 기존처럼 운영하는 척을 하였읍니다. 하지만 Github Action이라는 기능이 추가되면서 사건은 급전직하 되어 버리고 말았읍니다.

Github Action이라는 기능은 기존에 기술자들이 배쉬 쉘스크립트를 활용해 한줄한줄씩 한달에 거쳐 만들던 빌드배포 기능을 와이엠엘 형태로 선언적으로 쉽게 만들수 있게 해 버리면서 많은 빌드배포 개발자들의 일자리를 빼앗아 가고 있읍니다. 이는 AI보다 더욱 목전에 닥친 일자리 위협으로 저희 빌드배포 개발자들은 생명의 위기를 느끼고 있는 상태입니다.
 또한 비슷한 혁신을 꿈꾸며 사업을 키워나가던 Travis, CircleCI 등의 회사는 꿈을 펴기도 전에 위기에 빠져 버렸습니다. Github Action은 기존 Travis, CircleCI가 개발한 와이엠엘형태 선언방식을 그대로 따라한 아류작이지만 MS의 초거대자본을 등에업은 Github의 독점력을 바탕으로 급격하게 시장을 탈취 해 가고 있읍니다. 기존 서비스를 모방했지만 선언방식을 조금 더 쉽게 개선하고 다양한 샘플과 풍부한 도큐먼트를 제공하여 기존 업체들은 경쟁이 불가능하도록 전방위 압박을 받고 있습니다. 고사위기에 처한 영세 스타트업과 영구적 실업위기에 빠진 빌드배포개발자들은 한숨속에 잠을 못 이루고 있읍니다.

 빌드배포산업은 소프트웨어 뿌리산업으로 웹개발 업계를 지탱하고 있읍니다. 저희가 무너지는 것은 괜찮지만 저희 업계가 무너지는 것은 소프트웨어 업계의 몰락을 뜻합니다. 저희 협회원 뿐 아니라 인접산업군 그리고 그 가족들과 그 친척들과 그 친구들까지 10억명의 생계와 친목이 걸려 있는 중대한 사아님을 말씀 드립니다.

빌드배포산업 종사자의 한 명으로써
저희 산업협회의 입장을 전달 드리겠읍니다.

첫째, 빌드배포산업협회는 해당 산업을 중소기업 적합업종으로 지정하여 자본금 1000억원 이상의 업체들이 진출하지 못하게 막아 줄 것을 요구하는 바입니다. 이는 저희 협회뿐만 아니라 인접산업에도 해당되는 문제로 MS는 운영체제와 클라우드 이외의 산업에 진출하는 것을 영구적으로 막는 규정을 미국 연방의 재수정헌법에 명시해 주실 것을 요청 드립니다.
둘째, 저희 빌드배포산업협회는 MS 윈도우즈엑스피의 소스공개를 요청하는 바입니다. MS는 해당 오에스의 업데이트를 임의로 중지시키고 업데이트를 해 주지 않아 사용자들의 오에스 선택권을 심각하게 침해하고 있는 상태입니다. 윈도우즈10을 강매하는 것과 동일한 행위로 엠에스의 독점적 영향력을 통한 시장 교란행위에 해당합니다. 윈도우즈 엑스피의 소스코드를 공개하여 사용자들이 스스로 보안문제를 해결하면서 사용할 수 있게 만들어 주실 것을 요청 드립니다.

해당 요구사항이 받아들여 지지 않을 경우 저희는 협회 차원에서 MS불매운동과 더불어 바이든 대통령 탄핵 평화촛불 네트워크를 가동시키기로 내부적으로 협의된 바 있읍니다.

실력행사를 할 일이 없길 바라며

서울에서 빌드배포협회 배상

CAS – 로컬실행/개발환경 만들기

뭔가 괜찮은 것 같으면서도 애매한 오픈소스 프로젝트…
복잡함 때문에 몇 번 사용하려다가 포기 했는데 이번에 인증서비스를 만들면서 다시 사용하려고 한다.

jasig CAS일 때 보고 apereo로 바뀐거 보고… 세번째 정도인 것 같다.
이전에는 기능을 축소해서 직접 개발했었는데

복합인증을 구현하려면 쓰는게 나을 것 같다

경쟁제품

유료 무료 다 포함해서 대강

무료

  • Keycloak
  • CAS
  • JOSSO
  • LemonLDAP
  • Shibbolet ldP
  • OpenAM
  • Gluu
  • https://freeradius.org/

유료

  • Auth0
  • AWS Cognito

기타

  • https://gist.github.com/bmaupin/6878fae9abcb63ef43f8ac9b9de8fafd
  • https://www.gluu.org/blog/gluu-versus-keycloak/

조금씩 특성이 다르긴 하다.

CAS 특징

  • 프로젝트가 굉장히 잘게 나눠져 있다.
    모듈형으로 가져다가 사용하라는 것 같은데…
    의존성이 복잡해서 그렇게 쓸 수가 없다
    도큐먼트는 사용법에 관한 것만 있고
  • 설치형으로 사용하려고 보면…
    cas-overlay-template 라는게 있기는 한데
    기본으로 지원되는 부분을 제외하면 설치형으로 쓸 수 있는건 아니고 거의 소스레벨에서 수정해서 써야만 한다.
  • 스프링을 매우 잘 쓴다. 나도 스프링 꽤 써봤다고 생각했는데 처음보는게 조금씩 보인다
  • Springboot autoconfigure 사이의 엄청난 충돌이 발생
    실행형으로 만들게 아니라면 그냥 없애야 하지 않을까

어쨌든 소스레벨에서 분석해서 사용해야 하고
필요한 부분만 뽑아쓰긴 힘들어 보인다

설치방법

소스

docker 컨테이너를 제공 해 주면 좋겠는데…. 커스텀을 해서 쓰라는 철학을 가지고 있는 애들이라 그런지 통짜로 제공 해 주지는 않는다.
그래도 쓰기 편하게 템플릿이 제공된다.

https://github.com/apereo/cas-overlay-template

이런것도 제공 해 주고 많이 발전했다.

아래 순서대로 치다보면 뭐가 뭔지 알 수 있을거다. README.md와 비슷하지만 약간 다르다.

설정파일 수정

docker-compose 실행테스트를 해야되서 설정파일을 수정 해 준다

실행

화면수정

수정가능 항목의 목록을 얻는 명령어

템플릿을 소스코드로 가져오는 명령어

기능수정

이쪽 철학이 그런가보다. 디비를 직접 관리하거나 하지 않는다.
그럴거면 jpa 연동하기 쉽게 인터페이스를 달아주던가 하면 좋을텐데 그런건 또 안해놨다.

트리거 설정

각 기능이 실행될 때 마다 앞뒤로 트리거를 달 수 있다.
인터셉터
groovy

아직 안해봐서잘 모르겠지만 할 수 있다.

배포

리버스 프록시 사용

요즘 리버스 프록시 안쓰는 경우가 더 드물지 않을까

결론

overlay template 설치하려면 keycloak, gluu 등 다른 쉬운걸 쓰는게 나을것으로 보인다
인증방식은 어차피 다 표준프로토콜이 있어서 한두개 빼고는 다 비슷하게 제공된다

소스레벨에서 사용하려면 cas를 쓰는게 나을까… 그냥 만드는게 나을까
아직 시작단계라 정확하지는 않지만
이걸 쓰기보다는 필요한 부분 소스만 참고해서 따로 만들게 될 것 같다

REF

  • https://apereo.github.io/2019/01/07/cas61-gettingstarted-overlay/
  • https://apereo.github.io/cas/6.3.x/configuration/Configuration-Server-Management.html
  • https://apereo.github.io/2018/01/05/cas-deployment-with-proxy/

Error – docker 내부에서 자꾸 다른 서버를 찾아

local dns
dockerhub local proxy를 설정했는데
redis 캐시에서 자꾸 다른 서버의 ip를 찾고있다.
docker 컨테이너 ip면 172.x.x.x라야하는데
192.168.0.x을 찾는다

????설정이 잘못됐나??? 않인데
container insptection
컨테이너 내부 /etc/hosts를 봐도 이상없음

문제

nslookup를 실행했더니 data-redis.polypia.net을 찾고 있다

local dns에 *.polypia.net 을 설정했더니

docker registry에서 data-redis를 찾을 때
*.polypia.net를 찾는다
일반적으로는 이상이 없을텐데
/etc/hosts를 우선적으로 참고할테니까
docker registry에서만 발생

docker registry 소스에서도 별거 사용된게 안보인다
좆같은 뉴트리아 언어 특성상 /etc/hosts를 보지 않는 모양

https://github.com/golang/go/issues/22846

뉴트리아 잘못 쓰다가 네트워크에 dns하나 심으면 아주 통째로 털어먹히겠네

[나중에 AI가 깔끔하게 정리해줄 문서]

TEST 전략

뭐라고 해야할까 테스트 전략

설치 환경

  • dev
  • stg
  • prd

git branch

  • devel
  • master

source set

  • check – 수동 기능체크
  • main – 메인소스코드
  • unit test – mock, gradle unit-test, git commit, git merge devel CI
  • integration test – gradle integration-test, scenario test, testcontainer 이용, git merge devel CI

소스이외 관리코드

  • scenario test – testcontainer, git merge, helm 활용
  • load test – http dsl 활용, 시나리오와 유사
  • healthcheck – ping pong, curl, log
  • seed
    • init – DB schema,
    • dev – faker data
    • replica – prd -> stg 민감정보 제거

single module project

tree

multi module project

tree