.. _rest-api-guide: REST API 활용 ê°€ì´ë“œ ============================================================================== ê°€ì´ë“œ 개요 ------------------------------------------------------------------------------ Genian ZTNA는 타 장비 ë˜ëŠ” 타 시스템 ë“±ê³¼ì˜ ì—°ë™ì„ 위해 ë‹¨ë§ ì •ë³´ì˜ ì œê³µ, ì •ì±…/ê°ì²´ì˜ ìƒì„±, ì„¤ì •ë³€ê²½ ë“±ì´ ê°€ëŠ¥í•˜ë„ë¡ REST API를 ì œê³µí•©ë‹ˆë‹¤. 본 ê°€ì´ë“œëŠ” V5.0 기준으로 작성ë˜ì—ˆìœ¼ë©°, Genian ZTNAì˜ REST API를 활용하기 위한 요구사í•, ì¸ì¦ 방법, 주요 API ë“±ì— ëŒ€í•œ 안내를 목ì 으로 합니다. ìœ íŠœë¸Œë¥¼ 통해 REST API 활용 ê°€ì´ë“œ ë™ì˜ìƒì„ 확ì¸í• 수 있습니다. |youtube01-1| .. _rest-api-guide-preparation: ì‚¬ì „ ì¤€ë¹„ì‚¬í• ------------------------------------------------------------------------------ **Genian ZTNA 활용 ì‚¬ì „ 준비사í•** 외부 장비ì—ì„œ Genian ZTNAë¡œ REST API를 호출하기 위해서 ì¸ì¦ì´ 필요하며, ì¸ì¦ì„ 위한 API ì¸ì¦ë°©ì‹ì„ 'API Key' ë˜ëŠ” 'API 서비스 ê³„ì •' ë°©ì‹ ì¤‘ì—ì„œ ì„ íƒí•˜ê³ , ê·¸ ê°’ì„ ìƒì„±í•©ë‹ˆë‹¤. **API Key** - API Keyë°©ì‹ì€ ì—°ë™ì„ 위한 ê³„ì •ì˜ API키를 ìƒì„±í•˜ì—¬ Genian ZTNAì˜ API를 í˜¸ì¶œí• ë•Œ 마다 API-Key를 첨부하여 활용하는 ë°©ì‹ìž…니다. - ê° ê³„ì • 별로 별ë„ë¡œ ìƒì„±í•˜ì—¬ í™œìš©ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤. í˜¸ì¶œì˜ ê¶Œí•œì€ í•´ë‹¹ ê³„ì •ì˜ ê¶Œí•œì— ì¢…ì†ë©ë‹ˆë‹¤. - ìžì„¸í•œ ë‚´ìš©ì€ :ref:`API Key를 ì´ìš©í•œ ìƒí˜¸ ì¸ì¦ 방법 <rest-api-guide-api-key-auth>` ì„ ì°¸ê³ í•˜ì‹œê¸° ë°”ëžë‹ˆë‹¤. **API 서비스 ê³„ì •** - API ì„œë¹„ìŠ¤ê³„ì •ì„ í™œìš©í•˜ëŠ” ë°©ì‹ì€ ì—°ë™ì„ 위한 별ë„ì˜ ê³„ì •ì„ ìƒì„±í•˜ì—¬ 활용하는 ë°©ì‹ìž…니다. - 호출 ê±´ 마다 API-Key를 첨부하여 활용하는 API-Key ë°©ì‹ê³¼ 달리 í•˜ë‚˜ì˜ ë‹¨ìœ„ë¡œ 구현ë˜ì–´ API 서비스 ê³„ì •ìœ¼ë¡œ Genian ZTNAë¡œ Log-in 후 ê¸°ëŠ¥ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. - ì´ í›„ Log-off ì ˆì°¨ê¹Œì§€ 구현하는 ë°©ì‹ìœ¼ë¡œ 단순한 ì •ë³´ í™•ì¸ ë“±ì„ ìœ„í•œ 단편ì ì¸ ê¸°ëŠ¥ 보다는 í•˜ë‚˜ì˜ ê¸°ëŠ¥ìœ¼ë¡œ êµ¬í˜„í•˜ê³ ìž í• ë•Œ ìœ ë¦¬í•œ ë°©ì‹ìž…니다. - API ì„œë¹„ìŠ¤ê³„ì •ì€ Web콘솔 ì ‘ì†ìš© ê³„ì •ìœ¼ë¡œëŠ” í™œìš©í• ìˆ˜ 없습니다. - ìžì„¸í•œ ë‚´ìš©ì€ :ref:`API ì„œë¹„ìŠ¤ê³„ì •ì„ ì´ìš©í•œ ìƒí˜¸ ì¸ì¦ 방법 <rest-api-guide-api-service-account-auth>` ì„ ì°¸ê³ í•˜ì‹œê¸° ë°”ëžë‹ˆë‹¤. **Networking ì‚¬ì „ 준비사í•** Genian ZTNAì—ì„œ ì œê³µí•˜ëŠ” REST API는 https í”„ë¡œí† ì½œ(TCP/8443)ë¡œ ì ‘ì†í•©ë‹ˆë‹¤. TCP/8443 í¬íŠ¸ëŠ” Web콘솔 ì ‘ì†ìš© í¬íŠ¸ì™€ ë™ì¼í•©ë‹ˆë‹¤. ë”°ë¼ì„œ, 방화벽 등ì—ì„œ Genian ZTNA Web콘솔 ì ‘ì†ì„ 위한 ì„¤ì •ì´ ì ìš©ëœ ìƒíƒœë¼ë©´, 추가 ìž‘ì—…ì€ í•˜ì§€ ì•Šìœ¼ì…”ë„ ë©ë‹ˆë‹¤. .. _rest-api-guide-auth: API í™œìš©ì„ ìœ„í•œ ìƒí˜¸ ì¸ì¦ 방법 ------------------------------------------------------------------------------ Genian ZTNA와 ì—°ë™ ëŒ€ìƒ ìž¥ë¹„ ê°„ì˜ ë³´ì•ˆì„±ì´ í™•ë³´ëœ ìƒíƒœì—ì„œ REST API를 활용하기 위해, ìƒí˜¸ì¸ì¦ ìˆ˜í–‰ì´ ìš°ì„ ì§„í–‰ë˜ì–´ì•¼ 합니다. Genian ZTNA는 2ê°€ì§€ì˜ ì¸ì¦ ë°©ì‹(API Key, API ì„œë¹„ìŠ¤ê³„ì •)ì„ ì œê³µí•˜ë©°, REST API를 활용하기 위해서는 Request URL 문ì´ë‚˜ curl ëª…ë ¹ì´ í•„ìš”í•©ë‹ˆë‹¤. curl ìƒì„± ë° í…ŒìŠ¤íŠ¸ ë°©ë²•ì€ :ref:`ì°¸ê³ - API 활용ë„구 ì œê³µ: Swagger <rest-api-guide-swagger>` 를 ì°¸ê³ í•˜ì‹œê¸° ë°”ëžë‹ˆë‹¤. .. note:: - curl ì„ í†µí•œ API í˜¸ì¶œì€ Ubuntu Terminal, Windows Command 등 ì—ì„œ 가능합니다. - curl ì„ í™œìš©í•˜ì—¬ API 호출 ì‹œ, SSL 오류(ì‹ ë¢°ë˜ì§€ ì•Šì€ ì¸ì¦ì„œì˜ 경우)ê°€ ë°œìƒí•˜ë©´ k 옵션(URLì— ëŒ€í•œ SSL ê²€ì¦ì„ 하지 ì•Šë„ë¡ ì„¤ì •)ì„ ì¶”ê°€í•˜ì—¬ ì ìš© 하시기 ë°”ëžë‹ˆë‹¤. (옵션 변경 : -X -> -kX) - 예시 : curl -X POST https://{ì •ì±…ì„œë²„IP}/mc2/rest/{API Path} **-->** curl -kX POST https://{ì •ì±…ì„œë²„IP}/mc2/rest/{API Path} .. _rest-api-guide-api-key-auth: API Key를 ì´ìš©í•œ ìƒí˜¸ ì¸ì¦ 방법 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' API Key를 ì´ìš©í•œ ë°©ë²•ì€ ì‚¬ì „ì— ìƒí˜¸ê°„ í•©ì˜ëœ Keyê°’ì„ í†µí•´ API를 호출하여 ì‚¬ìš©í• ìˆ˜ 있습니다. API Key는 ê° ê´€ë¦¬ìž ê³„ì • 별로 ìƒì„±ë˜ë©°, ê³„ì •ê³¼ ë™ì¼í•œ 권한으로 API를 호출합니다. .. warning:: - **API Key ìœ ì¶œ ì‹œ, ì‹œìŠ¤í…œì˜ ì •ë³´ê°€ 노출ë 수 있으니 주ì˜í•˜ì‹œê¸° ë°”ëžë‹ˆë‹¤. ë˜í•œ ë³´ì•ˆì„ ìœ„í•´ 주기ì 으로 변경하는 ê²ƒì„ ê¶Œìž¥ë“œë¦½ë‹ˆë‹¤.** **1단계. API Key ìƒì„±** #. Genian ZTNA Web콘솔 ì ‘ì† í›„ **관리 > 사용ìž** 메뉴 í´ë¦ #. API Key를 ì‚¬ìš©í• **ê´€ë¦¬ìž ê³„ì •** í´ë¦ #. **ê¸°ë³¸ì •ë³´ > ë¡œê·¸ì¸ ì„¤ì • > API 키** í•ëª©ìœ¼ë¡œ ì´ë™ #. **ì‹ ê·œ 키 ìƒì„±** ë²„íŠ¼ì„ í´ë¦í•˜ì—¬ 해당 ê³„ì •ì˜ API Key ìƒì„± **2단계. API Key를 활용한 ì¸ì¦** #. ì‚¬ìš©í•˜ë ¤ëŠ” curlì—ì„œ API Pathê°€ ë나는 ë¶€ë¶„ì— **?apiKey={003def2d-4326-4a40-8372-e7806ce5950f}** 와 ê°™ì´ ìƒì„±í–ˆë˜ API Key ìž…ë ¥ #. curlì„ í™œìš©í•˜ì—¬ API 호출 테스트 진행 - curl 예시 .. code-block:: bash curl -kX POST "https://192.168.100.253:8443/mc2/rest/nodes?apiKey={003def2d-4326-4a40-8372-e7806ce5950f}" -H "accept: application/json;charset=UTF-8" -H "Content-Type: application/json;charset=UTF-8" -d "[ { \"nl_ipstr\": \"100.100.100.101\", \"nl_mac\": \"00:00:00:00:00:00\", \"nl_sensornid\": \"\", \"nl_genidev\": 0, \"doNotDeleteNode\": true }]" .. note:: - REST API는 Request URLê³¼ Get Parameterë¶€ë¶„ì„ êµ¬ë¶„í•˜ê¸° 위해 **"?"** 구분ìžë¥¼ 사용합니다. Request URLì´ ëë‚œ 부분 ì´í›„ 구분ìžë¥¼ 2ê°œ ì´ìƒ 사용하게 ë˜ë©´ ì •ìƒì 으로 ì¸ì‹ ë˜ì§€ 않습니다. - REST API 사용 ì‹œ Get Parameter ì— ë‹¤ë¥¸ Parameter ê°’ì´ ì¡´ìž¬í• ë•Œ, ê°’ì´ ë나는 ë¶€ë¶„ì— **"&"** 를 ì´ìš©í•˜ì—¬ apiKey를 추가하면 ì •ìƒì 으로 ë™ìž‘ë©ë‹ˆë‹¤. - 예시 : curl -kX GET "https://192.168.100.253:8443/mc2/rest/tags?page=1&pageSize=30&apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" .. _rest-api-guide-api-service-account-auth: API ì„œë¹„ìŠ¤ê³„ì •ì„ ì´ìš©í•œ ìƒí˜¸ ì¸ì¦ 방법 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' API ì„œë¹„ìŠ¤ê³„ì •ì„ ì´ìš©í•œ ì¸ì¦ë°©ë²•ì€ API를 활용하기 위한 ì „ìš© ê³„ì •ì„ ì¶”ê°€í•˜ì—¬ 사용하는 방법입니다. **1단계. 서비스ì—í• ìƒì„±** #. 서비스ì—í• ìƒì„± ë°©ë²•ì€ ì‹œìŠ¤í…œ 보안과 ê´€ë ¨í•˜ì—¬ 별ë„ì˜ ê´€ë¦¬ê°€ 필요하므로, **API 서비스ì—í• (권한)** ìƒì„±ì„ ìš”ì²í•´ 주시면, ê¸°ìˆ ì§€ì› ë‹´ë‹¹ìžê°€ 별ë„ë¡œ 안내해 드리ë„ë¡ í•˜ê² ìŠµë‹ˆë‹¤. **2단계. API 서비스를 위한 ê³„ì •ì— ì„œë¹„ìŠ¤ ì—í• ë¶€ì—¬** #. Genian ZTNA Web콘솔 ì ‘ì† í›„ **관리 > 사용ìž** 메뉴 í´ë¦ #. API ì„œë¹„ìŠ¤ê³„ì •ìœ¼ë¡œ ì‚¬ìš©í• **ê³„ì •** í´ë¦ #. **ê¸°ë³¸ì •ë³´ > ê¸°ë³¸ì„¤ì • > 관리ì—í• ** í•ëª©ìœ¼ë¡œ ì´ë™ #. ìƒì„± ìš”ì²ì„ 통해 만들어 ë‘ì—ˆë˜ **API 서비스ì—í• ** 권한 부여 **3단계. IP 패턴 ë˜ëŠ” URL 패턴 ì„¤ì •** #. **API 서비스ì—í• ** ê¶Œí•œì„ ë¶€ì—¬í•œ **ê³„ì •** í´ë¦ #. **ê¸°ë³¸ì •ë³´ > 관리ì—í• ë³„ ì„¤ì • > ì‹ ë¢°ì—°ê²° ì„¤ì •** í•ëª©ìœ¼ë¡œ ì´ë™ #. API í˜¸ì¶œì„ í—ˆìš©í• **IP** ë˜ëŠ” **URL** ì— ëŒ€í•´ 패턴 ì„¤ì • .. warning:: - 보안ìƒì˜ ë¬¸ì œê°€ ë°œìƒí• 수 있으므로, IP 패턴 ì„¤ì • ì‹œ **Subnetê³¼ Range ì„¤ì •ì€ ë¶ˆê°€í•©ë‹ˆë‹¤.** **4단계. API ì„œë¹„ìŠ¤ê³„ì •ì„ í™œìš©í•œ ì¸ì¦** #. curlì„ í™œìš©í•˜ì—¬ API 호출 테스트 진행 (API ì„œë¹„ìŠ¤ê³„ì •ì€ **API Key ì—†ì´ í˜¸ì¶œì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.** ) - curl 예시 .. code-block:: bash curl -kX POST "https://192.168.100.253:8443/mc2/rest/nodes" -H "accept: application/json;charset=UTF-8" -H "Content-Type: application/json;charset=UTF-8" -d "[ { \"nl_ipstr\": \"100.100.100.102\", \"nl_mac\": \"11:11:11:11:11:11\", \"nl_sensornid\": \"\", \"nl_genidev\": 0, \"doNotDeleteNode\": true }]" .. _rest-api-guide-main-api-list: 주요 API ------------------------------------------------------------------------------ Genian ZTNA와 ì—°ë™ì„ 위한 주요 API í•ëª©ì€ NODES, TAGS, USERS, LOGS, NODEGROUPS, CVES ë“±ì´ ìžˆê³ , ê°ê°ì˜ ë‚´ìš©ì€ ë‹¤ìŒê³¼ 같습니다. **NODES API** Genian ZTNAì—ì„œ 노드(Node)란 IP 와 MAC ì„ ê°–ê³ ìžˆëŠ” 장비 ë˜ëŠ” 엔드í¬ì¸íŠ¸ë¥¼ ë§í•©ë‹ˆë‹¤. 노드는 ZTNAì—ì„œ 관리하는 ë„¤íŠ¸ì›Œí¬ ëŒ€ì—ëŒ€ì— ì ‘ì†í•˜ê±°ë‚˜ ë…¸ë“œì— ì„¤ì¹˜ëœ ì—ì´ì „íŠ¸ì— ì˜í•´ ìžë™ìœ¼ë¡œ 등ë¡ë©ë‹ˆë‹¤. 노드와 ê´€ë ¨í•œ 주요 API는 다ìŒê³¼ 같습니다. .. csv-table:: :header: "Description", "Type", "API Path", "주요 목ì " :class: longtable :widths: 20 5 15 60 "ì „ì²´ 노드 ëª©ë¡ ë° ì •ë³´ 조회", "GET", "/nodes", "íŠ¹ì • ë…¸ë“œì˜ ì •ë³´ 조회 ë° íƒœê·¸ í• ë‹¹, ì œê±°ë¥¼ 수행하기 위해서 ë…¸ë“œì˜ ip ë° nodeId를 얻기 위한 목ì 으로 ì „ì²´ 노드 ëª©ë¡ ë° ì •ë³´ë¥¼ 조회합니다." "íŠ¹ì • IPì˜ ë…¸ë“œ ì •ë³´ 조회", "GET", "/nodes/{ip}/managementscope", "íŠ¹ì • ë…¸ë“œì— íƒœê·¸ í• ë‹¹ ë° ì œê±°ë¥¼ 위해 ì „ë‹¬ë°›ì€ íŠ¹ì • IPì— ëŒ€í•´ì„œ nodeIdê°’ì„ ì–»ê¸° 위한 목ì 으로 사용ë©ë‹ˆë‹¤." "íŠ¹ì • ë…¸ë“œì— íƒœê·¸ í• ë‹¹", "POST", "/nodes/{nodeId}/tags", "위협노드로 íŒë‹¨ë˜ëŠ” íŠ¹ì •ë…¸ë“œì— ì°¨ë‹¨ 태그를 í• ë‹¹í•˜ì—¬ ë„¤íŠ¸ì›Œí¬ ê²©ë¦¬ë¥¼ 수행하기 위한 목ì 으로 사용ë©ë‹ˆë‹¤." "íŠ¹ì • ë…¸ë“œì— íƒœê·¸ í•´ì œ", "DELETE", "/nodes/{nodeId}/tags", "ì•ˆì „í•˜ë‹¤ê³ íŒë‹¨ë˜ëŠ” íŠ¹ì •ë…¸ë“œì— ì°¨ë‹¨ 태그를 ì œê±°í•˜ì—¬ ë„¤íŠ¸ì›Œí¬ ì§„ìž…ì„ í—ˆìš©í•˜ê¸° 위한 목ì 으로 사용ë©ë‹ˆë‹¤." "íŠ¹ì • ë…¸ë“œì˜ ìƒì„¸ ì •ë³´ 조회", "GET", "/nodes/{nodeId}/information/{catgry}", "í¬íŠ¸ 관리를 위해 íŠ¹ì • ë…¸ë“œì˜ ì—´ë¦° í¬íŠ¸ 목ë¡ì„ 얻기 위한 목ì 으로 사용ë©ë‹ˆë‹¤." - ì „ì²´ 노드 ëª©ë¡ ë° ì •ë³´ 조회 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/nodes?page=1&pageSize=30&view=node&nid=All &apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" - íŠ¹ì • IPì˜ ë…¸ë“œ ì •ë³´ 조회 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/nodes/192.168.100.200/managementscope ?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" - íŠ¹ì • ë…¸ë“œì— íƒœê·¸ í• ë‹¹ 예시 .. code:: bash curl -kX POST "https://192.168.100.100:8443/mc2/rest/nodes/974bc18c-2cf9-103a-8002-2cf05d0cf498-c0649e1c /tags?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" -H "Content-Type: application/json;charset=UTF-8" -d "[ { \"id\": \"\", \"name\": \"test_tag\", \"description\": \"\", \"startDate\": \"\", \"expireDate\": \"\", \"periodType\": \"\", \"expiryPeriod\": \"\" }] - íŠ¹ì • ë…¸ë“œì— íƒœê·¸ í•´ì œ 예시 .. code:: bash curl -kX DELETE "https://192.168.100.100:8443/mc2/rest/nodes/974bc18c-2cf9-103a-8002-2cf05d0cf498-c0649e1c /tags?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" -H "Content-Type: application/json;charset=UTF-8" -d "[ \"5\"]" - íŠ¹ì • ë…¸ë“œì˜ ìƒì„¸ ì •ë³´ 조회 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/nodes/974bc18c-2cf9-103a-8002-2cf05d0cf498-c0649e1c /information/CAT_NETINFO?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" **TAGS API** Genian ZTNA는 노드/사용ìžë¥¼ ë¶„ë¥˜í• ë•Œ 태그(Tag)를 ì‚¬ìš©í• ìˆ˜ 있습니다. (ë””í´íŠ¸ Tag로는 TRUSTED, THREAT, GUESTê°€ ìžˆê³ , ìˆ˜ì • ë° ì¶”ê°€ê°€ 가능합니다.) 외부장비ì—ì„œ ì—°ë™ìœ¼ë¡œ ZTNA ì œì–´ì •ì±… ì ìš© ì‹œ ë…¸ë“œê·¸ë£¹ì„ êµ¬ë¶„í•˜ê¸° 위해 Tagê°€ 사용ë©ë‹ˆë‹¤. 태그와 ê´€ë ¨í•œ 주요 API는 다ìŒê³¼ 같습니다. .. csv-table:: :header: "Description", "Type", "API Path", "주요 목ì " :class: longtable :widths: 15 5 10 70 "태그 ëª©ë¡ ì¡°íšŒ", "GET", "/tags", "노드, 사용ìžIDì— íƒœê·¸ í• ë‹¹ ë° ì œê±°ë¥¼ 수행하기 위해 íƒœê·¸ì˜ idê°’ í˜¹ì€ name ì •ë³´ë¥¼ 얻기 위한 목ì 으로 íƒœê·¸ì˜ ì •ë³´ë¥¼ 조회합니다." "태그 ìƒì„±", "POST", "/tags", "관리ìžê°€ 노드 í˜¹ì€ ì‚¬ìš©ìžIDì— ë¶€ì—¬í•˜ë ¤ëŠ” 태그 í•ëª©ì´ Genian ZTNAì— ì¡´ìž¬í•˜ì§€ ì•Šì„ ì‹œ 태그 ìƒì„±ì„ 위한 목ì 으로 사용ë©ë‹ˆë‹¤." - 태그 ëª©ë¡ ì¡°íšŒ 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/tags?page=1&pageSize=30&apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" - 태그 ìƒì„± 예시 .. code:: bash curl -kX POST "https://192.168.100.100:8443/mc2/rest/tags?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" -H "Content-Type: application/json;charset=UTF-8" -d "{ \"np_idx\": 0, \"np_name\": \"test_tag\", \"np_desc\": \"테스트 태그\", \"np_periodtype\": 0, \"np_period\": \"\", \"np_periodexpire\": \"\", \"np_adminroles\": \"\", \"np_color\": \"\", \"np_static\": 0}" **USERS API** Genian ZTNAì˜ ì‚¬ìš©ìž(User)는 관리ìžê°€ ìƒì„±í•˜ê±°ë‚˜ DB ë™ê¸°í™” ë“±ì„ í†µí•˜ì—¬ ìƒì„±ëœ ì‚¬ìš©ìž ë° ë¶€ì„œì •ë³´ë¥¼ ì˜ë¯¸í•©ë‹ˆë‹¤. 사용ìžì™€ ê´€ë ¨í•œ 주요 API는 다ìŒê³¼ 같습니다. .. csv-table:: :header: "Description", "Type", "API Path", "주요 목ì " :class: longtable :widths: 20 5 15 60 "íŠ¹ì • 사용ìžIDì— ì ìš©ëœ íƒœê·¸ ëª©ë¡ ì¡°íšŒ", "GET", "/users/{userId}/tags", "íŠ¹ì • 사용ìžIDì— ì ìš©ëœ íƒœê·¸ì˜ ëª©ë¡ì„ 조회하여 태그 í• ë‹¹ ë° ì œê±°í•˜ê¸° 위한 목ì 으로 tagidê°’ í˜¹ì€ name ì •ë³´ë¥¼ 조회합니다." "íŠ¹ì • 사용ìžIDì— íƒœê·¸ í• ë‹¹", "POST", "/users/{userId}/tags", "ì¸ê°€ë˜ì§€ ì•Šì€ íŠ¹ì • 사용ìžIDì— ì°¨ë‹¨ 태그를 í• ë‹¹í•˜ì—¬ ë„¤íŠ¸ì›Œí¬ ê²©ë¦¬ë¥¼ 수행하기 위한 목ì 으로 사용ë©ë‹ˆë‹¤." "íŠ¹ì • 사용ìžIDì— íƒœê·¸ í•´ì œ", "DELETE", "/users/{userId}/tags", "ì¸ê°€ëœ íŠ¹ì • 사용ìžIDì— ì°¨ë‹¨ 태그를 ì œê±°í•˜ì—¬ ë„¤íŠ¸ì›Œí¬ ì§„ìž…ì„ í—ˆìš©í•˜ê¸° 위한 목ì 으로 사용ë©ë‹ˆë‹¤." - íŠ¹ì • 사용ìžIDì— ì ìš©ëœ íƒœê·¸ ëª©ë¡ ì¡°íšŒ 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/users/test1/tags?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" - íŠ¹ì • 사용ìžIDì— íƒœê·¸ í• ë‹¹ 예시 .. code:: bash curl -kX POST "https://192.168.100.100:8443/mc2/rest/users/test1/tags?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" -H "Content-Type: application/json;charset=UTF-8" -d "[ { \"id\": \"\", \"name\": \"test_tag\", \"description\": \"\", \"startDate\": \"\", \"expireDate\": \"\", \"periodType\": \"\", \"expiryPeriod\": \"\" }]" - íŠ¹ì • 사용ìžIDì— íƒœê·¸ í•´ì œ 예시 .. code:: bash curl -kX DELETE "https://192.168.100.100:8443/mc2/rest/users/test1/tags?apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" -H "Content-Type: application/json;charset=UTF-8" -d "[ \"5\"] **LOGS API** Genian ZTNAì—ì„œ ê°ì‚¬ë¡œê·¸ëž€ 시스템, 장비 등ì—ì„œ ë°œìƒí•˜ëŠ” ì´ë²¤íŠ¸ì— 대한 ëª¨ë“ ë¡œê·¸ë¥¼ 뜻하며, ìžì²´ì 으로 ë¡œê·¸ì„œë²„ì— ì €ìž¥í•©ë‹ˆë‹¤. 로그와 ê´€ë ¨í•œ 주요 API는 다ìŒê³¼ 같습니다. .. csv-table:: :header: "Description", "Type", "API Path", "주요 목ì " :class: longtable :widths: 15 5 10 70 "ê°ì‚¬ë¡œê·¸ 조회", "GET", "/logs", "대시보드 ë° ì´ë²¤íŠ¸ 현황 ìž‘ì„±ì— í™œìš©í•˜ê¸° 위한 목ì 으로 Genian ZTNAì˜ ê°ì‚¬ë¡œê·¸ë¥¼ 조회합니다." - ê°ì‚¬ë¡œê·¸ 조회 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/logs?page=1&pageSize=30&logschema=auditlog&periodType=custom &apiKey={912fae69-b454-4608-bf4bfa142353b463}"-H "accept: application/json;charset=UTF-8" **NODEGROUPS API** Genian ZTNAì˜ ì •ì±…(Policy)ì€ ë…¸ë“œì •ì±…ê³¼ ì œì–´ì •ì±…ìœ¼ë¡œ 구분ë˜ë©° ì •ì±…ì ìš©ì„ ìœ„í•´ì„œëŠ” ë…¸ë“œê·¸ë£¹ì´ í•„ìš”í•©ë‹ˆë‹¤. 노드그룹과 ê´€ë ¨í•œ 주요 API는 다ìŒê³¼ 같습니다. .. csv-table:: :header: "Description", "Type", "API Path", "주요 목ì " :class: longtable :widths: 15 5 10 70 "노드그룹 ëª©ë¡ ì¡°íšŒ", "GET", "/nodegroups", "대시보드 ë° ë³´ì•ˆ ìš´ì˜ ë³´ê³ ì„œ ìž‘ì„±ì— í™œìš©í•˜ê¸° 위한 목ì 으로 Genian ZTNAì— ìƒì„±ë˜ì–´ 있는 노드그룹 목ë¡ì„ 조회합니다." - 노드그룹 ëª©ë¡ ì¡°íšŒ 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/nodegroups?page=1&pageSize=30& apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" **CVES API** Genian ZTNA는 ê° ë…¸ë“œë³„ë¡œ 공개ì 으로 ì•Œë ¤ì§„ ì •ë³´ 보안 취약성 ë° ë…¸ì¶œì— ëŒ€í•œ ì •ë³´ë¥¼ ì œê³µí•©ë‹ˆë‹¤. CVES와 ê´€ë ¨í•œ 주요 API는 다ìŒê³¼ 같습니다. .. csv-table:: :header: "Description", "Type", "API Path", "주요 목ì " :class: longtable :widths: 15 5 10 70 "ë…¸ë“œì˜ CVE ë‚´ì— ì¡°íšŒ", "GET", "/cves", "ìœ„í—˜ë…¸ë“œì— ë„¤íŠ¸ì›Œí¬ ê²©ë¦¬ë¥¼ 수행하기 위한 목ì 으로 Genian ZTNAì—ì„œ ë…¸ë“œì˜ CVE ë‚´ì—ì„ ì¡°íšŒí•©ë‹ˆë‹¤." - ë…¸ë“œì˜ CVE ë‚´ì— ì¡°íšŒ 예시 .. code:: bash curl -kX GET "https://192.168.100.100:8443/mc2/rest/cves?page=1&pageSize=30 &apiKey={912fae69-b454-4608-bf4b-fa142353b463}" -H "accept: application/json;charset=UTF-8" .. _rest-api-guide-responses-code: RESPONSES CODE ------------------------------------------------------------------------------ 아래 표는 REST APIì—ì„œ 사용하는 HTTP Status Codes를 나타냅니다. .. csv-table:: :header: "Code", "Descriptions", "Detailed Descriptions" :class: longtable :widths: 10 20 70 "200", "Successful operation", "ìš”ì² ì •ìƒ ì²˜ë¦¬" "206", "Partial Content", "Rangeê°€ ì§€ì •ëœ ìš”ì²ì¸ 경우, ì§€ì •ëœ ë²”ìœ„ë§Œí¼ì˜ ìš”ì²ì„ 받았다는 ê²ƒì„ ì•Œë ¤ì¤Œ." "400", "Bad Request", "í´ë¼ì´ì–¸íŠ¸ì˜ ìš”ì² êµ¬ë¬¸ì´ ìž˜ëª»ë¨" "401", "Unauthorized", "ìš”ì² ì²˜ë¦¬ë¥¼ 위해 HTTP ì¸ì¦ ì •ë³´ê°€ í•„ìš”í•¨ì„ ì•Œë ¤ì¤Œ. ì ‘ê·¼ í—ˆìš©ì„ ì°¨ë‹¨í•¨." "403", "Forbidden", "ì ‘ê·¼ 금지 ì‘답. Directory Listing ìš”ì² ë° Web콘솔 ì ‘ê·¼ ë“±ì„ ì°¨ë‹¨í•˜ëŠ” ê²½ìš°ì˜ ì‘답" "404", "Not Found", "í´ë¼ì´ì–¸íŠ¸ê°€ ìš”ì²í•œ 리소스가 ì„œë²„ì— ì—†ìŒ. ìš”ì²í•œ URLì„ ì°¾ì„ ìˆ˜ ì—†ìŒì„ ì˜ë¯¸" "406", "Not Acceptable", "í´ë¼ì´ì–¸íŠ¸ ìš”ì²ì— 대해 ì ì ˆí•œ 컨í…ì¸ ê°€ ì—†ìŒì„ ì˜ë¯¸" "412", "Precondition Failed", "í´ë¼ì´ì–¸íŠ¸ì˜ í—¤ë”ì— ìžˆëŠ” ì „ì œì¡°ê±´ì€ ì„œë²„ì˜ ì „ì œì¡°ê±´ì— ì ì ˆí•˜ì§€ ì•Šë‹¤ê³ ì•Œë ¤ì¤Œ" "416", "Range Not Satisfiable", "Range í—¤ë” í•„ë“œì— ìš”ì²í•œ ì§€ì • 범위를 만족시킬 수 없습니다." "500", "Internal Server Error", "서버ì—ì„œ í´ë¼ì´ì–¸íŠ¸ ìš”ì²ì„ 처리 ì¤‘ì— ì—러가 ë°œìƒí•¨" .. _rest-api-guide-swagger: ì°¸ê³ - API 활용ë„구 ì œê³µ: Swagger ------------------------------------------------------------------------------ Genian ZTNA는 API를 í™œìš©í•˜ëŠ”ë° ë„ì›€ì„ ë“œë¦¬ê³ ìž, Swagger(http://swagger.io/)를 ì œê³µí•©ë‹ˆë‹¤. Swagger는 웹페ì´ì§€ë¥¼ 통해서 REST API ì •ë³´ì™€ 테스트 ë„구를 ì œê³µí•©ë‹ˆë‹¤. **1단계. Swagger ì ‘ì†** #. Genian ZTNAì˜ ê´€ë¦¬ìž ê³„ì •ìœ¼ë¡œ Web콘솔 1ì°¨ ì ‘ì† #. 로그ì¸ì´ ëœ ìƒíƒœì—ì„œ ì£¼ì†Œì°½ì— **https://{ì •ì±…ì„œë²„IP}:8443/mc2/swagger/index.html** ì„ ìž…ë ¥í•˜ì—¬ 2ì°¨ ì ‘ì† #. Swagger ì ‘ì† í™•ì¸ **2단계. Swagger를 ì´ìš©í•œ 테스트** #. í™œìš©í•˜ê³ ìž í•˜ëŠ” API를 ì„ íƒí•œ 후, 해당 APIì˜ ì°½ ìš°ì¸¡ì— **Try It out** 버튼 í´ë¦ #. Parameters í•ëª©ì—ì„œ **Description** ê°’ ë° Body ì˜ **Example Value** ê°’ ìž…ë ¥ #. ì•„ëž˜ì˜ **Execute** 버튼 í´ë¦ #. Responses í•ëª©ì—ì„œ **curl** ë° **Request URL** ê°’ í™•ì¸ (Server response í•ëª©ì—ì„œ Codeê°’ì´ **200** ì¼ë•Œ ì •ìƒë™ìž‘ ë©ë‹ˆë‹¤.) .. note:: - Content Typeì€ JSONì„ ì‚¬ìš©í•˜ë©° 'application/json;charset=UTF-8'ì„ í‘œì¤€ìœ¼ë¡œ 합니다. (í¬ë§·ì´ 다른 경우, í°íŠ¸ê°€ ì†ìƒë˜ì–´ ë³´ì¼ ìˆ˜ 있습니다.) .. |youtube01-1| image:: /images/youtube.png :target: https://www.youtube.com/watch?v=mRrNlaiUlqs&t=422s :width: 30px