.. _saml-okta:

okta (SAML2.0) - CWP
====================

본 가이드는 okta 와 네트워크 접근제어 시스템인 Genian ZTNA의 인증연동 기능을 수행하기 위한 설정 방법을 안내합니다.

개요
------

Genian ZTNA와 okta 솔루션의 APP 연동을 통하여 Genian ZTNA자체 사용자DB를 관리할 필요가 없이 okta를 통해 사용자 인증을 수행할 수 있습니다. 

사용자 인증을 위해 Genian ZTNA CWP페이지에서 SAML2.0 프로토콜을 이용하여 okta 인증을 호출하고 okta에서 사용자 인증 여부를 확인하여 정상적인 SSO가 이루어집니다.

권장버전
----------

.. csv-table::
    :header: 제품명(구성요소),버전,비고
    :class: longtable
    :widths: 30 30 40

    Genian ZTNA(정책서버),V6.0 이상,2022.05 이후 Release 버전
    okta APP,SAML2.0,2021.05 현재 연동가능

연동의 목적
--------------

Genian ZTNA와 okta 연동은 다음의 효과를 제공합니다.

    - ZTNA, okta 개별 인증을 위한 사용자 DB 관리가 필요하지 않습니다.
    - okta 계정을 이용하여 SSO로 ZTNA를 인증할 수 있습니다.

지원되는 기능
--------------------
okta SAML App 연동은 다음과 같은 기능을 지원합니다:
    
- SP-initiated SSO
- IdP-initiated SSO
- JIT (Just-In-Time) Provisioning
- Single Logout (SLO)
- Signed Requests

위 기능에 대한 자세한 정보는 , https://help.okta.com/okta_help.htm?type=oie&id=ext_glossary 에서 확인하세요.

    
연동 설정 방법
----------------

본 가이드에서 다루는 Genian ZTNA와 okta 설정 방법은 연동을 위한 필수 항목만을 안내합니다. 최초 1회 설정 이후 자동으로 적용됩니다.

Step 1: okta 연동을 위한 계정등록
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    #. https://www.okta.com/free-trial/ 접속하여 트라이얼 계정을 신청합니다. 
    
        - 사용자 정보와 국가를 선택합니다. 
    #. 신청한 메일주소로 수신된 인증확인 메일을 확인합니다.
     
        - 신청한 메일주소로 'Activate your okta account' 라는 제목으로 계정정보 확인 메일이 발송됩니다. 
    #. 메일 내 'Activate okta Accout' 버튼을 클릭하여 계정을 활성화 하십시오.
     
        - 인증을 위한 초기 패스워드 변경과 2차 인증에 대한 설정을 합니다.
        - okta 콘솔접속시 OTP 2factor 인증을 요구하며 아이폰,안드로이드 OTP 앱 설치 및 OTP 등록이 필요합니다.
        - OTP 등록과 로그인을 완료하였다면 이제 연동을 위한 SAML APP 설정이 시작됩니다. 

Step 2: 인증연동을 위한 SAML APP 추가 및 설정
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    #. 메뉴에서 **Applications > Applications** 로 이동합니다.
    #. **Browse App Catalog** 메뉴에서 Genians ZTNA application을 검색하세요.
    #. 검색된 ZTNA앱을 선택한 후 **Add Integration** 버튼을 클릭하여 추가합니다.
    #. Application label을 입력합니다.
    #. **Base URL** 입력란에 ZTNA 정책서버의 URL을 아래의 예시처럼 입력합니다.

        - ex) \https://test.genians.net/cwp2 

    #. Sign On 탭을 선택하세요.
    
    #. 화면 중간에 **Settings > Sign on methods > SAML 2.0 > More details** 버튼을 클릭하여 IdP 정보를 확인합니다.
    #. Genian ZTNA **Web콘솔 > 설정 > 사용자인증 > 인증연동 > SAML2 인증연동** 에 다음 각 항목의 값을 okta에서 복사해서 입력하십시오.
     
        - **IdP SSO URL** - okta의 **Sign on URL**.
        - **IdP Entity ID** - okta의  **Issuer**.
        - **x509 Certificate** -  okta의 **Signing Certificate** 를 다운로드해서 파일 내용을 복사하여 입력하십시오.
        
    #. JIT provisioning 기능을 사용할려면 ZTNA에서 **JIT provisioning** 을 'On'으로 변경하십시오.

        - ZTNA UI의 **JIT provisioning > 추가정보** 에서 추가 버튼을 클릭해서 사용자 계정의 이름, 이메일을 설정하십시오.

            - 이름에 **{lastName}{firstName}** 입력하십시오.
            - 이메일에 **email** 을 입력하십시오.

                - SAML Attributes (firstName, lastName, email) 항목은 okta에 이미 사전 정의 되어 있습니다.
                - 사전 정의된 속성 이외의 속성도 **Attributes (Optional)** 메뉴를 이용해서 추가가 가능합니다.

    #. Single Logout(SLO)를 사용할려면 ZTNA에서 **Single Logout(SLO)** 설정을 'On' 하십시오.

        - okta의 Sign on > Settings 에서 **Enable Single Logout** 항목을 체크하십시오.            
        - ZTNA의 SP X.509 certificate 를 다운로드해서 okta의 Signature Certificate 에 업로드 하십시오. SLO 기능을 사용하기 위해서는 SP의 인증서가 필요합니다.
        - ZTNA의 **IdP SLO URL** - okta의 **Single Logout URL** 을 복사해서 입력하십시오..

            - okta 화면에서 **Single Logout URL** 이 보이지 않는 경우 **Enable Single Logout** 설정이 체크된 상태에서 **Save** 버튼을 클릭해서 저장하시기 바랍니다.
            - 다시 Sign On 탭으로 돌아와서 **Single Logout URL** 을 확인하십시오.

    #. Signed Requests를 사용할려면 **Signed Requests** 설정을 'On' 하십시오.

        - Signed Requests의 경우 okta의 **Applications > Create App Integration** 을 통해 SAML 설정을 해야 기능을 사용할 수 있습니다.
        - SP X.509 certificate 를 다운로드해서 okta의 Signature Certificate 에 업로드 하십시오. Signed Requests 기능을 사용하기 위해서는 SP의 인증서가 필요합니다.
        - okta의 SAML Settings에서 Signed Requests를 체크하시기 바랍니다.

    #. Genian ZTNA CWP 인증 화면에서 표시할 okta 인증버튼에 표시할 문구를 **로그인 버튼 문구** 에 입력합니다.
    #. Genian ZTNA Web 콘솔 설정 화면 하단 **수정** 버튼을 클릭합니다. 

    .. note:: Sign On tab의 Base URL 필드에 올바른 값을 입력했는지 확인하세요. 잘못된 값을 사용하면 SAML을 통해 ZTNA로 인증할 수 없습니다.
        ex) \https://test.genians.net/cwp2


Step 3: okta 인증연동에 사용할 계정 추가 및 할당
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    이미 사용자가 등록되어 있다면 5번으로 이동

    1. okta 콘솔 화면 메뉴 **Directory > Groups** 으로 이동합니다.
    2. 화면 중간 **Add Group** 버튼을 클릭하여 그룹을 생성합니다.
    3. okta 콘솔 화면 메뉴 **Directory > People** 으로 이동합니다.
    4. 화면 중간 **Add Person** 버튼을 클릭하여 사용자를 추가합니다.
    
     .. note:: Password 항목은 관리자가 패스워드를 지정하여 생성할지 사용자 최초로그인시 변경하도록 할지 선택합니다.
    
    5. okta 콘솔 화면 메뉴 **Application > Application** 으로 이동합니다.
    6. 위에서 등록한 APP 우측 삼각형아이콘을 클릭하여 **Assign to Users** 를 클릭합니다.
    7. 팝업 화면에서 APP을 통하여 인증연동에 사용할 계정의 우측 **Assign** 버튼을 클릭하여 APP에 할당해줍니다.

인증연동 테스트 방법
-----------------------

    **okta My Apps 페이지에서 테스트 하는 방법 (IdP-initiated SSO)**

    #. okta My Apps 페이지에 접속하여 생성한 ZTNA SAML App을 클릭합니다.

    **App Embed Link 사용방법 (IdP-initiated SSO)**

    #. okta의 General tab 화면 아래쪽으로 이동하면 **App Embed Link** 를 제공합니다.
    #. 해당 링크를 통해 ZTNA에 로그인할 수 있습니다.

    **Genian ZTNA Web콘솔에서 테스트하는 방법 (SP-initiated SSO)**

    #. Web콘솔에 접속하여 **설정 > 사용자인증 > 인증연동 > 인증테스트** 항목에 **테스트** 버튼을 클릭합니다.
    #. 팝업창에서 인증정보 저장소를 **SAML2** 를 선택합니다. 
    #. 새로운 팝업창에 okta 인증페이지가 표시되며 사용자명, 암호를 입력하여 인증합니다.
    #. '인증에 성공하였습니다.' 메시지가 표시되면 정상적으로 인증연동이 되었습니다.

    **Genian ZTNA CWP 페이지에서 테스트하는 방법 (SP-initiated SSO)**

    #. Genian ZTNA 노드정책 비밀번호 정책을 할당 받은 단말(노드)를 준비합니다.
    #. Genian ZTNA CWP페이지에 접속합니다.
    #. CWP페이지에 **인증** 버튼을 클릭합니다. 
    #. 인증 화면에 위 Step2 5번 항목에서 설정한 인증버튼을 클릭합니다. 
    #. 새로운 팝업창에 okta 인증페이지가 표시되며 사용자명, 암호를 입력하여 인증합니다.

    **Single Logout (SLO) 테스트하는 방법**
    
    #. SLO 기능을 사용하도록 설정합니다.
    #. SSO 기능을 이용해서 인증을 합니다.
    #. CWP 페이지 상단의 로그아웃 버튼을 이용해서 로그아웃을 합니다.
    #. 다시 SAML 인증을 시도할 때 okta의 계정정보를 입력하라고 표시되면 정상적으로 SLO가 동작한 것입니다.
    
    .. note:: 인증연동 설정 후 정책적용시 제어정책 권한에 okta IdP 도메인을 추가해주어야 차단상태에서도 인증연동 창이 표시됩니다. 
    
    .. code:: bash

        1. 권한 추가 방법
        2. 정책 > 객체 > 네트워크
        3. 작업선택 > 생성
        4. 기본정보 입력
        5. 네트워크주소 > FQDN 선택 > IdP 도메인 입력(e.g. genians.okta.com)
        6. 생성 클릭
        7. 권한 메뉴로 이동
        8. 생성한 네트워크객체를 이용하여 권한 생성
        9. 단말 네트워크를 제어하는 제어정책에 생성한 권한 할당