2023. 1. 24. 22:51ㆍDevops
Jenkins 권한 설정
Jenkins 관련 두번째 포스팅이다. 이번에는 권한에 관련된 내용들을 기록하려고 합니다.
[앞서 포스팅] Jenkins OIDC로 인증 연결하기 에서 Authentication의 한 종류인 OIDC를 이용한 셋팅을 해보았고, 이번에는 Authentication 이후 Authorization에 대한 설정들을 정리해보려고 합니다.
매우 유사한 단어처럼보이지만 한국어로도 확실히 분리된 개념입니다.
인증, 입증 / 인가, 허가... [인증]은 상대방이 시스템 진입에 허락된 사람입을 입증하는 과정이고, [인가]는 특정 사람에게 어떠한 권한이 허가 되어있느냐에 대한 설정입니다.
예를 들면 권한 설정에서 A라는 사람에게 1,2,3 이라는 기능 사용이 허락되어있다고 한다면 A라는 사람임을 확인하는 것이 인증이며, 인증 후 그 사람이 기능을 사용하려고 할 때 이 사람에게 해당 기능(1,2,3)이 허가되어있는 지를 확인하는 것의 차이라고 볼 수 있을 것 같습니다.
현재 Jenkins가 OIDC로 인증 설정이 되어있는 것을 전제로
이번 포스팅은 전적으로 후자에 대한 것임을 고려하고 보시면 좋겠습니다.
keycloak User & Group 준비
우선 Keycloak을 좀 더 디테일하게 설정을 해보겠습니다.
그룹 단위로 권한을 주기위해 그룹을 만들고...
테스트용 유저들을 생성합니다.
유저를 생성 후 그룹에 매핑하는 작업을 선행해줍니다.
이제 oidc-test client에 로그인할 경우 공유해줄 유저의 정보에 대해서 정의해놓습니다.
Keycloak의 Mappers를 통해서 설정해줄 수 있습니다.
난 Add builtin 항목를 선택하고 Email, family name을 지정했습니다.
Group 정보는 별도로 create해서 "Group Membership" type으로 설정해주면 됩니다.
각 항목들의 상세정보입니다. 여기서 'Token Claim Name' 값을 봐두세요.
Jenkins의 OIDC 인증시 UserInfo mapping 설정
이제 다시 Jenkins로 돌아와서 앞서 OIDC 인증 설정이 되어있는 메뉴... Configure >Global Security > Authentication 의 Advanced 탭을 열어봅니다.
인증 후 userInfo를 통해서 얻어오는 값을 매핑하는 설정이 있는 데,
앞서 확인했던 'Token Claim Name'을 맞춰넣으면 됩니다.
이제 다시 jenkins login 화면에서 앞서 만들어놓은 jenkins_test로 로그인을 해보겠습니다. 로그인 후 유저 정보를 보면 Group 정보, 사용자 이름 등을 정상적으로 keycloak으로 부터 전달받은 것을 확인할 수 있습니다.
User, Group별 실제 권한 설정
이제 이 Jenkins에서 전달받은 User, Group 정보를 이용해서 권한을 지정해보도록 하겠습니다.
Configure Global Security > Authorization > Matrix-based security
로 Type을 설정하고, /test1_group(Group), jenkins_test(User)에만 권한을 부여하도록 해둡니다.
이렇게 되면, 최초 Keycloak에 등록했던 User들은 어떻게 될까요?
jenkins_test, jenkins_test2, jenkins_test3 중에서
jenkins_test는 User명 자체로 권한을 부여받았고,
jenkins_test2는 test1_group이기에 권한을 부여받았습니다.
jenkins_test3는 User명으로도 Group명으로도 권한을 받지 못한 케이스가 됩니다,
그래서 로그인시 아래와 같은 화면이 나타납니다.
혹시라도 설정과정에서 권한 문제로 인해 시스템 편집이 불가능해질 경우
jenkins의 config.xml (ubuntu의 경우 /var/lib/jenkins/config.xml) 파일의 useSecurity 값을 false로 바꾸면 anyone open으로 초기화 되므로 재설정을 할 수 있습니다.
이번 포스팅에서 정리해본 내용은 Matrix에 존재하는 권한들 단위로만 분리할 수 있다는 한계가 있습니다. 실제 권한 관련해서도 여러 Plugin들이 존재하는 데,
예를 들어 특정 Job 단위로 권한을 분리하고 싶다면 *"Authorize Project"* 와 같은 Plugin으로 원하는 셋팅을 할 수 있습니다.
jenkins를 사용하면 할수록 누군가가 앞서 고민하고 만들어둔 무궁무진한 Plugin들을 이용해서 왠만큼 원하는 것들을 다 충족시킬 수 있음을 느낄 수 있었습니다.
'Devops' 카테고리의 다른 글
Selenium webdriver - test automation (0) | 2023.01.24 |
---|---|
Jenkins 2.0 Pipeline (0) | 2023.01.24 |
Jenkins OIDC로 인증 연결하기 (0) | 2023.01.24 |