본문 바로가기
Security/Keycloak

Keycloak + AWS saml SSO 로그인 연동

by wlsdn3004 2023. 5. 9.
728x90
반응형

 

본 글에서는 Keycloak과 AWS SAML을 연동하여 단일 인증(Single Sign-On)을 구현하는 실습을 다룬다.

 

AWS SAML을 이용하면 AWS에 대한 단일 인증을 제공하고, IAM에서 정의된 권한에 따라 AWS 리소스에 대한 액세스를 제어할 수 있다. 즉, 해당 구성을 통해 사용자의 편의성을 높이고, 보안성을 강화하는 효과가 있다.

또한 IAM 역할을 기반으로 권한 부여를 수행하기 때문에, 기업의 보안 정책을 준수하는 것도 용이해진다.

 

아래 그림을 참고하면 동작 과정 이해에 도움이 될 것이다.

참조사이트 : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html

 

SAML 2.0 페더레이션 사용자가 AWS Management Console에 액세스할 수 있게 하기 - AWS Identity and Access Managem

이와 같은 SAML의 특수한 사용이 SAML 2.0 기반 페더레이션 정보에 설명된 더 일반적인 사용과 차이가 나는 이유는, 이 워크플로우가 사용자를 대신해 AWS Management Console을 열기 때문입니다. 이를 위

docs.aws.amazon.com

전제 조건

- [Keycloak 설치 실습]

- AWS 계정

 

 

 

 

1. Keycloak clients 생성


서비스 제공자(SP) saml-metadata.xml 파일 다운로드한다.

$ curl -O https://signin.aws.amazon.com/static/saml-metadata.xml

 

Clients > Import client를 누른다.

 

위에서 다운로드한 saml-metadata.xml 파일을 업로드하고 저장한다.

 

 

2. AWS SAML 자격 증명 공급자 및 IAM Role 생성


"Realm settings > SAML 2.0 Identity Provider Metadata"를 눌러 나오는 descriptor.xml 파일을 다운로드한다.

 

 

"AWS > IAM > 자격 증명 공급자> 자격 증명 공급자 생성"을 눌러 위에서 받은 descriptor.xml 파일을 업로드하여 SAML 자격 증명 공급자를 생성한다.

 

 

"AWS > IAM > 역할 > 역할 생성"을 눌러 위에서 만든 SAML 자격 증명 공급자를 선택하여 아래와 같이 만들고 다음을 눌러 원하는 IAM 정책을 선택하고 역할을 생성한다.

 

 

3. Keycloak clients 설정


위에서 생성한 Keycloak Clients로 들어가 아래와 같이 Access settings설정을 한다.

 

아래와 같이 Signature and Encryption설정이 되어 있는지 확인한다.

 

 

아래와 같이 Roles을 생성한다. 해당 Role에 AWS Role을 맵핑할 예정이다.

 

Clinet scopes로 이동하면 기본 role_list라는 Client scopes가 추가되어 있는데 Role 전달할 때 SAML 오류가 발생하기 때문에 삭제해 준다.

 

한 개 남아있는 :urn:amazon:webservices-dedicated" Clinet scope를 클릭한다.

 

Role 전달 시 SAML 오류가 발생하기 때문에 아래와 같이 Full scope allowed를 Off로 설정한다.

 

"Mappers > Add mapper > By configuration"로 이동하여 Role list를 선택한다.

 

아래와 같이 Session Role이라는 이름의 Role list를 생성한다.

 

 

"Mappers > Add mapper > By configuration"로 이동하여 User Property를 선택한다.

 

아래와 같이 Session Name이라는 이름으로 User Property를 생성한다.

 

위에서 생성한 Session Name과 Session Role Mapper는 처음 받았던 서비스 제공자(SP) saml-metadata.xml 파일의 내용이다.

 

"Mappers > Add mapper > By configuration"로 이동하여 Hardcoded attribute를 선택한다.

 

아래와 같이 Session Duration라는 이름으로 Hardcoded attribute를 생성한다.

(28800초 = 8시간 세션 지속시간)

 

"Mappers > Add mapper > By configuration"로 이동하여 Role Name Mapper를 선택한다.

"Keycloak > Clinets > urn:amazon:webservices > Roles"에서 생성한 aws-admin-role을 선택하고,

New Role Name에 {aws rol arn},{aws saml-provider arn} 형식으로 입력하고 저장한다.

 

 

4. Keycloak Group 생성


Groups로 이동하여 Group을 생성한다.

 

생성한 Group의 Members에서 User를 생성한다. 현재 test유저가 있기에 test 유저를 추가하였다.

 

Group에서 Role mapping에서 "Clinets > urn:amazon:webservices > Roles"에서 생성한 Role을 Assign 한다.

 

5. Keycloak 유저로 AWS 로그인


Clinets에서 아래와 같이 Access settings에서 정보를 확인하고 아래 URL로 접근한다.

 

위에서 Gruop에 포함시킨 test유저로 접근한다.

 

Clinets의 roles가 여러 개면 아래와 같이 로그인 전 선택할 수 있다.

 

로그인하면 우측 상단에 {aws_role_name}/{keycloak_user}@admin 으로 접근된 걸 확인할 수 있다.

 

CoudTrail에서 사용자 이름으로 이벤트 기록을 확인하면 아래와 같이 keycloak user를 확인할 수 있다.

 

이벤트 이름 하나를 클릭하여 이벤트 레코드를 확인해 보면 어떤 role을 사용했는지 확인할 수 있다.

 

반응형

댓글