TheKoguryo's 기술 블로그

 Version 2024.11.15

다른 Cloud Account의 Identity Domain를 인증서버 IdP로 추가하기

다른 Identity Domain을 인증서버 등록할 수 있습니다. 여기서는 명확한 확인을 위해 2개의 OCI Cloud Account간에 하나가 다른 Cloud Account의 Identity Domain을 인증서버로 등록해서 사용하는 방법을 확인해 봅니다. 기본 생성된 Identity Domain은 동일한 구조로 연동이 간편합니다. 여기서는 Default Domain을 기준으로 합니다.

Service Provider 역할 두번째 Cloud Account에서 설정 - 실제 유저가 사용할 환경

Identity Provider에게 제공할 정보를 먼저 확인합니다.

  1. OCI 콘솔에 로그인합니다

  2. 좌측 상단 내비게이션 메뉴에서 Identity & Security > Identity > Domains를 클릭합니다.

  3. 사용할 Default Domain을 클릭합니다.

  4. Security > Identity providers를 클릭합니다.

  5. 우측 Export SAML metadata를 클릭합니다.

    image-20240521205808387

  6. Manual export를 클릭합니다.

  7. Identity Provider에게 제공할 정보를 먼저 확인합니다.

    • Provider ID, Assertion consumer service URL, Logout service endpoint URL, Logout service return URL 기록
    • Service provider signing certificate 오른쪽 Download를 클릭하여 SigningCertificate.pem 파일 다운로드

    image-20240521140444886

IdP(Identity Provider) 역할 첫번째 Cloud Account에서 작업 - 인증서버로 사용할 환경
  1. OCI 콘솔에 로그인합니다

  2. 좌측 상단 내비게이션 메뉴에서 Identity & Security > Identity > Domains를 클릭합니다.

  3. 사용할 Default Domain을 클릭합니다.

  4. Integrated applications를 클릭합니다.

  5. Add application를 클릭합니다.

  6. SAML Application 선택후 Launch workflow를 클릭합니다.

    image-20240521210421218

  7. Add SAML Application 정보 입력

  8. Finish 클릭

  9. Activate를 클릭하여 활성화합니다.

  10. Service Provider 역할의 Cloud Account에서 Identity Provider로 등록을 위해 Download identity provider metadata를 클릭하여 메타데이터 파일 IDCSMetadata.xml을 다운로드합니다.

    image-20240521213020042

Service Provider 역할 Cloud Account에서 설정 - 실제 유저가 사용할 환경
  1. Default Domain 클릭

  2. Security > Identity providers 클릭

  3. Add IdP 선택후 Add SAML IdP 클릭

    image-20240521213703007

  4. Add SAML identity provider 정보 입력

    • Add details

      • Name: 등록할 이름을 입력합니다, 예, {AccountName} SSO
      • 등록한 이름으로 사인인 페이지 하단에 표시됩니다.

      image-20240522103002198

    • Exchange metadata

      • 앞서 다운받은 IdP의 메타데이터 파일 IDCSMetadata.xml 파일 업로드

      image-20240521232541459

    • Map user identity

      • 기본값 그대로 사용

      image-20240521232614050

    • Review and Create

      • 설정값 확인후 Create IdP 클릭
    • What’s Next?

      • 테스트 로그인
        • Test login 클릭합니다.

          image-20240522103127030

        • IDP로 설정한 Cloud Account 로그인 화면이 뜹니다. 해당 Cloud Account의 유저로 로그인합니다.

          image-20240522095335506

        • 로그인을 성공해도 앱에 액세스할 수 있는 권한이 부여되지 않았다는 에러가 뜹니다. Service Provider에서 요청해서 IdP로 인증할 때 허용할 사용자로 아직 등록되지 않았기 때문입니다.

          image-20240522095700226

IdP(Identity Provider) 역할 첫번째 Cloud Account에서 작업 - 인증서버로 사용할 환경

Service Provider에서 요청해서 IdP로 인증할 때 허용할 사용자 또는 그룹을 등록하는 과정입니다.

  1. Default Domain 클릭

  2. Integrated applications 클릭

  3. 앞서 등록한 SAML application을 클릭

  4. Resources > Users 또는 Groups에서 인증을 허용할 유저 또는 그룹을 지정합니다.

    image-20240521232916123

Service Provider 역할 Cloud Account에서 설정 - 실제 유저가 사용할 환경

Service Provider 쪽에도 같은 Username으로 유저가 있어야 이후 테스트에서 사인인이 성공합니다. kildong@example.com 유저가 없는 경우 유저를 먼저 생성합니다.

  1. 테스트 로그인 항목에서 Test login을 다시 클릭합니다.

  2. IDP로 설정한 Cloud Account 로그인 화면이 뜨면 추가한 kildong@example.com 로 다시 사인인합니다.

  3. 로그인이 성공하면 “Your connection is successful.” 문구가 뜹니다.

    image-20240521233010171

  4. 사인인한 창을 닫고 Add SAML identity provider 화면으로 돌아갑니다.

  5. Activate 클릭하여 추가한 SAML identity provider 활성화

    image-20240521233840129

  6. Add to IdP policy 클릭

  7. IdP policies 화면으로 전환되었습니다. Default Identity Provider Policy 클릭

  8. Default IDP Rule 오른쪽 액션 메뉴에서 Edit IdP rule 클릭

    image-20240521234513047

  9. Assign identity providers에서 기본 Username-Password에 외에 앞서 추가한 Identity Provider를 추가하고 저장합니다.

    image-20240522103201218

  10. Service Provider 역할 Cloud Account의 Console에 현재 유저에서 사인아웃합니다.

사인인 테스트
  1. Service Provider인 두번째 Cloud Account의 OCI 콘솔 접속화면으로 이동합니다.

  2. 사인인 화면에서 유저/패스워드 방식 말고 아래에 등록한 IdP를 통한 사인인을 위한 버튼이 추가된 것이 보입니다. 해당 버튼을 클릭합니다.

    image-20240522103239096

  3. IdP로 등록한 Cloud Account의 사인인 화면이 뜹니다. 사인인 합니다.

    image-20240522095335506

  4. IdP로 사인인이 성공하고 MFA를 등록하면, 실제로는 Service Provider 쪽 Cloud Account로 접속됩니다.

    image-20240522105757700

유저 프로비저닝

Service Provider에 사인인할때 IdP를 통해 인증합니다. 즉 Service Provider의 유저에 대한 인증절차만 IdP를 이용하는 것입니다. 이때 사인인할 유저는 Service Provider와 IdP 양쪽에 모두 있어야 합니다.

IdP로 등록된 서버는 일반적으로 사내 유저 통합 인증 서버로, 신규 입사자에 대해 IdP에 최초 유저를 만들 것입니다. 해당 유저가 Service Provider 시스템에 권한을 부여하는 경우, Service Provider 시스템에도 유저가 있어야 합니다. 일반적으로 사내 Identity Management 시스템을 사용하여, Service Provider에 대한 사용 권한 할당시 해당 시스템에 유저를 프로비저닝하고, 이후 IdP에 유저 정보 변경시 Service Provider로 동기화합니다.

앞선 예시에서는 Service Provider에 사용자 정보를 수작업으로 등록했습니다. 여기서는 Identity Domain에서 제공하는 Just In Time Provisioning 기능을 사용하여, 유저 프로비저닝하는 방법을 알아봅니다.

Identity Provider 설정 변경

Identity Domain에서 새 IAM User 생성시 Last name, Username, Email은 필수항목입니다. Identity Provider에서 Service Provider에서 유저정보 전달시 앞서 설정한 Username외에 다른 항목도 전달하도록 설정을 변경합니다.

  1. OCI 콘솔에 로그인합니다

  2. 좌측 상단 내비게이션 메뉴에서 Identity & Security > Identity > Domains를 클릭합니다.

  3. 사용할 Default Domain을 클릭합니다.

  4. Integrated applications를 클릭합니다.

  5. 앞서 등록한 애플리케이션을 클릭합니다. 예, ServiceProvider-{AccountName}-default-domain

  6. Edit SSO configuration을 클릭합니다.

    image-20240829104537424

  7. 설정화면 제일 아래 Attribute configuration에 다음 유저 속성을 추가합니다.

    • 전달할 유저 정보 속성(Type value)를 Name에 입력한 속성명으로 해서 Service Provider에 추가로 전달하도록 설정하는 과정입니다.

    image-20240829104613125

  8. 변경사항을 저장합니다.

  9. 변경사항 전달을 위해 SSO configuration에서 Download identity provider metadata를 클릭하여 메타데이터(IDCSMetadata (1).xml)를 다운로드 받습니다.

  10. 테스트를 위해 Default Domain에서 다음 유저 그룹 2개를 생성합니다.

    • sso-users-for-child-a
    • group-a
  11. 다시 등록한 Integrated applications으로 이동합니다.

  12. Resources > Groups에서 방금 생성한 sso-users-for-child-a을 추가합니다. 이제 해당 그룹에 속한 유저를 Service Provider인 Cloud Account에서 사인인도 하고, 유저정보로 프로비저닝 되도록 설정할 것입니다.

    image-20240829105658963

Service Provider에서 Just In Time Provisioning 설정 변경

  1. OCI 콘솔에 로그아웃하고, Service Provider 역할 Cloud Account에 로그인합니다.

  2. Default Domain 클릭

  3. 테스트를 위해 Default Domain에서 다음 유저 그룹 2개를 생성합니다.

    • sso-users
    • group-a
  4. Security > Identity providers 클릭

  5. 등록한 IdP 클릭

  6. 변경된 IdP의 메타데이터로 업데이트를 위해 Edit IdP를 클릭합니다.

    image-20240829110410877

  7. 기존 Metadata를 삭제하고, 새로 다운받은 메타데이터 파일을 업로드하고 저장합니다.

    image-20240829110637900

  8. IdP 상세화면에서 Configure JIT를 클릭합니다.

  9. Enable Just-In-Time (JIT) provisioning을 클릭합니다.

  10. 다음 옵션을 체크합니다. 여기서는 둘다 체크하겠습니다.

    • Create a new identity domain user: 체크하면, IdP를 통해 로그인한 유저가 사용할 Cloud Account에 없는 경우, 새로 생성합니다.
    • Update the existing identity domain user: 체크하면, IdP를 통해 로그인한 유저가 사용할 Cloud Account에 있는 경우, IdP에서 매핑되어 온 유저 정보로 변경합니다.

    image-20240829112438201

  11. 유저 속성 매핑

    • userName외에 유저 생성시 필수항목인 familyName, primaryEmailAdress에 앞서 IdP에서 입력한 유저 속성 이름으로 매핑합니다.

    image-20240829112544597

  12. 그룹 매핑

    • Group membership attribute name: 앞서 IdP에서 입력한 Group Membership에 대한 유저 속성으로 지정한 이름으로 매핑합니다.
    • group membership mappings: 그룹 매핑을 설정합니다. 수신한 그룹명을 현재 Cloud Account의 특정그룹으로 명시적으로 매핑하거나, 수신된 그룹명과 같은 이름으로 매핑되게 설정할 수 있습니다. 여기서는 같은 이름을 자동으로 매핑되게 설정합니다.
    • Assign domain group memberships: 수신된 그룹정보외에, JIT 새로 생성되는 유저에게 할당할 추가 그룹을 지정합니다.
    • Assignment rules: 그룹 매핑 실패시, 업데이트시 현재 할당된 그룹을 대체할지, 합칠지를 설정합니다. 여기서는 기존 소속 그룹 대체, 매핑 실패 무시를 선택하였습니다.

    image-20240829113403012

  13. 설정사항을 저장합니다.

사인인 테스트

  1. Identity Provider인 첫번째 Cloud Account의 OCI 콘솔 접속화면으로 이동합니다.

  2. 테스트를 위해 양쪽 Cloud Account에 기존에 없는 새로운 유저를 다음과 같이 생성합니다. 패스워드 초기화 등 로그인할 수 있도록 준비합니다.

    • Username: younghee@example.com
    • Last name: Kim
    • Groups: sso-users-for-child-a, group-a
      • 없는 경우, 그룹도 만듭니다.
  3. 로그아웃하고, Service Provider인 두번째 Cloud Account의 OCI 콘솔 접속화면으로 이동합니다.

  4. 사인인 화면에서 유저/패스워드 방식 말고 아래에 등록한 IdP를 통한 사인인을 위한 버튼이 추가된 것이 보입니다. 해당 버튼을 클릭합니다.

    image-20240522103239096

  5. IdP로 등록한 Cloud Account의 사인인 화면이 뜹니다. 사인인 합니다.

    image-20240522095335506

  6. 새로 추가한 유저 younghee@example.com로 로그인합니다.

  7. IdP로 사인인이 성공하고 MFA를 등록하면, 실제로는 Service Provider 쪽 Cloud Account로 접속됩니다.

    image-20240829123052646

  8. My profile을 클릭하여 유저정보를 확인합니다.

  9. IdP의 Last name, Email 유저정보가 잘 전달되어 유저가 생성된 것을 볼 수 있습니다.

    image-20240829123346653

  10. 그룹 매핑에 설정한 정보를 통해 그룹 할당도 잘 된 것을 볼 수 있습니다.

    image-20240829123409065

참고


이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.