Key Cloak
Key Cloak 설치
사전 조건 : Docker 환경 구성
터미널에서 아래 명령어 입력
docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:11.0.0
기본 8080 포트 구성. 포트 변경 필요시 해당 부분 변경 <container port>:<host port>
관리 콘솔 로그인
1. http://<IP주소 or localhost>:8080 접속
2. Administration console 클릭 한 후 admin 계정으로 로그인(keycloak 컨테이너 실행 시 입력한 ID/PW)
영역(realm) 생성
1. 화면 좌측 상단 Master 영역 > “Add realm” 버튼 클릭
2. 영역 이름 입력 > 활성화 enable on > “Create” 버튼 클릭
Client 생성
1. Clients > “Create” 버튼 클릭
2. 각 키값 입력
Key | Value |
---|---|
Client ID * |
|
Client Protocol | saml |
Client SAML Endpoint |
|
3. Setting Tab 설정
Key | Value |
---|---|
Client ID |
|
Name |
|
Description |
|
Enabled | ON |
Consent Required | OFF |
Login Theme | base |
Client Protocol | saml |
Include AuthnStatement | ON |
Include OneTimeUse Condition | OFF |
Sign Documents | ON |
Optimize REDIRECT signing key lookup | OFF |
Sign Assertions | ON |
Signature Algorithm | RSA_SHA26 |
SAML Signature Key Name | KEY_ID |
Canonicalization Method | EXCLUSIVE |
Encrypt Assertions | OFF |
Client Signature Required | ON |
Force POST Binding | ON |
Front Channel Logout | ON |
Force Name ID Format | OFF |
Name ID Format | persistant |
Root URL |
|
Valid Redirect URIs |
|
Base URL |
|
Master SAML Processing URL |
|
IDP Initiated SSO URL Name | |
IDP Initiated SSO Relay State |
####Fine Grain SAML Endpoint Configuration:
Key | Value |
---|---|
Assertion Consumer Service POST Binding URL |
|
Assertion Consumer Service Redirect Binding URL | |
Logout Service POST Binding URL | |
Logout Service Redirect Binding URL |
4. Roles Tab 설정
Role 이름 | Composite |
---|---|
gitlab.example.com:access | false |
gitlab.example.com:external | false |
5. Mappers Tab 설정
Create 버튼 클릭하여 아래와 같이 생성
Name:
name
Mapper Type:
User Property
Property:
Username
Friendly Name:
Username
SAML Attribute Name:
name
SAML Attribute NameFormat: Basic
Name:
email
Mapper Type:
User Property
Property:
Email
Friendly Name:
Email
SAML Attribute Name:
email
SAML Attribute NameFormat: Basic
Name:
first_name
Mapper Type:
User Property
Property:
FirstName
Friendly Name:
First Name
SAML Attribute Name:
first_name
SAML Attribute NameFormat: Basic
Name:
last_name
Mapper Type:
User Property
Property:
LastName
Friendly Name:
Last Name
SAML Attribute Name:
name
SAML Attribute NameFormat: Basic
Name:
roles
Mapper Type:
Role list
Role attribute name:
roles
Friendly Name:
Roles
SAML Attribute NameFormat: Basic
Single Role Attribute: On
idp Fingerprint 생성
1. Realm Settings > Keys > RSA256 > Certificate 복사
2. https://www.samltool.com/fingerprint.php 접속하여 fingerprint 생성
-----BEGIN CERTIFICATE-----로 시작하고 -----END CERTIFICATE-----로 끝나느 형식으로 입력
Gitlab에서 지원하는 알고리즘은 sha1이므로 해당 알고리즘 선택 후 fingerprint 생성
fingerprint 는 GitLab의 gitlab.rb에 등록되어야 함
GitLab
SAML 설정
1. gitlab.rb 수정
gitlab_rails['omniauth_enabled'] = true gitlab_rails['omniauth_allow_single_sign_on'] = ['saml'] gitlab_rails['omniauth_block_auto_created_users'] = false gitlab_rails['omniauth_auto_link_saml_user'] = true gitlab_rails['omniauth_providers'] = [ { "name" => "saml", "label" => "<보여지는 버튼 이름>", "groups_attribute" => "roles", "external_groups" => ['<roles tab에 구성한 external 이름'], "args" => { assertion_consumer_service_url: '<gitlab url>/users/auth/saml/callback', idp_cert_fingerprint: '생성한 fingerprint', idp_sso_target_url: '<keycloak url>/auth/realms/<realm 이름>/protocol/saml/clients/<client 이름>', allowed_clock_drift: 5, issuer: '<client 이름>', attribute_statements: { first_name: ['first_name'], last_name: ['last_name'], name: ['name'], username: ['name'], email: ['email'] }, name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' } } ]
2. GitLab 재구성
$ gitlab-ctl reconfigure
3. GitLab 로그인 확인
4. 버튼 없이 바로 리디렉션 하는 방법
모든 로그인 시도는 SAML 서버로 리디렉션되므로 로컬 자격 증명을 사용하여 로그인 불가. 하나 이상의 SAML 사용자에게 관리자 권한이 있는지 확인 필요.
1. gitlab.rb 파일 수정
gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'saml'
2. gitlab-ctl reconfigure
0 Comments