본문 바로가기
공부/Open Source

[Keycloak 21] AWS SAML 로그인 연동하기

by haejang 2023. 10. 29.
728x90
728x90

 

 

terraform 버전

2023.10.29 - [공부/Open Source] - [Keycloak 21/Terraform] AWS SAML 로그인 연동하기

 

 

# 1. 별도 realm 생성 (Optional)

master realm과 별도로 유저/그룹 관리를 할 것이기 때문에 realm을 생성한다.

(master realm하고 동일한 유저 관리를 할 것이라면 생략해도 좋을 듯 하다)

나는 infra 라고 만들었다.

 

# 2. aws client 생성 (urn:amazon:webservices)

먼저 aws sp (서비스 제공자) 파일을 다운받자

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

infra realm에서 Clients > Import client

 

 

위에서 받은 saml-metadata.xml 파일을 Resource file로 넣어준 후, Save

 

 

urn:amazon:webservices 라는 client가 생성된다.

 

 

# 3. Client Scope 설정

Full scope allowed 라는 설정이 AWS Role 전달 시 SAML 오류를 발생시킨다고 한다. -> 비활성화 해줘야 함

AWS Client > Client scopes > urn:amazon:webservices-dedicated 진입

 

 

Scope 탭에서 Full scope allowed -> OFF

 

 

# 4. Mapper 설정

3번을 완료한 위치에서, Mappers 탭으로 이동해 Add mapper 클릭 (총 3개 만들어야 함)

 

 

## 1. Session Name (User Property)

  • Name : Session Name
  • Property : username
  • Friendly Name : Session Name
  • SAML Attribute Name : https://aws.amazon.com/SAML/Attributes/RoleSessionName

 

## 2. Session Role (Role list)

  • Name : Session Role
  • Role Attribute Name : https://aws.amazon.com/SAML/Attributes/Role
  • Friendly Name : Session Role
  • Single Role Attribute : ON

 

## 3. Session Duration (Hardcoded attribute)

  • Name : Session Duration
  • Friendly Name : Session Duration
  • SAML Attribute Name : https://aws.amazon.com/SAML/Attributes/SessionDuration
  • Attribute value : 28800 (원하는 Session Duration 값 입력)

 

# 4. AWS에 Keycloak용 Identity provider 생성

먼저 keycloak infra realm용 idp metadata를 다운받자

curl -o keycloak.xml "https://[keycloak host]/realms/[realm name]/protocol/saml/descriptor"

 

AWS IAM Console > Identity providers > Add provider

 

 

provider 이름 설정 후 위에서 받은 keycloak saml xml 파일을 넣어준다.

 

 

# 5. Keycloak용 AWS Role 생성

AWS IAM Console > Roles > Create role

 

trust entity를 SAML로 선택한 후, 위에서 만든 provider를 선택한다.

 

 

이후 원하는 권한과 이름 설정 후 롤 생성을 완료해주자

 

나는 keycloak-test 라고 했다.

 

# 6. AWS Role과 매핑되는 Keycloak Role 생성

거의 다 왔다.

keycloak > aws client > Roles Tap > Create role

 

 

Role name을 4, 5번에서 만든 [AWS idp ARN],[AWS Role ARN] 쌍으로 만들어줘야 한다.

(순서는 상관없다)

 

 

그 후, AWS 접속할 유저에게 이 롤을 부여해 보자

Users > 유저 선택 > Role mapping > Assign role > client filter로 변경 > 위에서 만든 롤 검색 > Assign

 

 

그 후 Keycloak SSO를 통해 AWS에 로그인해보자

SSO URL은 아래와 같다.

https://[keycloak 주소]/realms/[realm 이름]/protocol/saml/clients/amazon-aws

(AWS Client 화면에서 확인 가능하다)

아무튼 로그인해보면...

 

 

아까 만든 keycloak-test role로 자동 접속되는 것을 확인할 수 있다.

지금은 role이 하나밖에 없어서 자동 로그인 되었지만, 롤이 여러개인 경우 SSO 화면에서 롤을 선택할 수 있다.

 

 

# 마무리

생각보다 너~무 할게 많고 복잡하고 직관적이지 못하다

그래서 난 다 테라폼화 해두었다.

다음 글에서 테라폼 코드를 공유하겠다.

 

 

끝!

 

 

 

728x90
728x90

댓글