소개
이 문서에서는 API 액세스를 구성하고 이를 사용하여 보안 액세스에서 리소스 정보를 가져오는 단계를 설명합니다.
사전 요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- 파이썬 3.x
- REST API
- Cisco 보안 액세스
요구 사항
다음 요건을 충족해야 계속 진행할 수 있습니다.
- Cisco Secure Access 사용자 계정(전체 관리자 역할)
- Cisco Security Cloud SCSO(Single Sign On) 계정을 사용하여 Secure Access에 로그인합니다.
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
구성
보안 액세스 API는 표준 REST 인터페이스를 제공하며 OAuth 2.0 클라이언트 자격 증명 흐름을 지원합니다. 시작하려면 Secure Access에 로그인하고 Secure Access API 키를 만드십시오. 그런 다음 API 자격 증명을 사용하여 API 액세스 토큰을 생성합니다.
참고: API 키, 비밀번호, 비밀 및 토큰은 개인 데이터에 대한 액세스를 허용합니다. 자격 증명을 다른 사용자 또는 조직과 공유해서는 안 됩니다.
이 문서에서 설명한 스크립트를 실행하기 전에 Secure Access Dashboard에서 API 키를 구성합니다.
API 키 생성
다음 단계를 통해 API 키 및 암호를 생성합니다. URL로 보안 액세스에 로그인: 보안 액세스
- 왼쪽 사이드바에서 옵션을 선택합니다
Admin.
- 에서
Admin 옵션을 선택합니다. API Keys:
보안 액세스 대시보드 관리 - API 키
3. 오른쪽 상단에서 버튼을 클릭하여 + 새 API 키를 추가합니다.
보안 액세스 - API 키 추가
4. API Key Name, Description Key scope(선택사항)을 입력하고 필요에 Expiry date 따라 및 을 선택합니다. 완료되면 Create다음 버튼을 클릭합니다.
보안 액세스 - API 키 세부 정보
5. 및 API Key를 Key Secret 복사한 다음 다음을 클릭합니다ACCEPT AND CLOSE.
보안 액세스 - API 키 및 비밀
참고: API 암호를 복사할 수 있는 기회는 하나뿐입니다. Secure Access는 API 암호를 저장하지 않으므로 처음 만든 후에는 검색할 수 없습니다.
파이썬 코드
생성된 토큰이 3600초(1시간) 동안 유효함을 고려하여 이 코드를 작성하는 방법은 여러 가지가 있습니다. 첫 번째 스크립트를 사용하여 전달자 토큰을 생성한 다음 전달자 토큰을 사용하여 원하는 리소스에 API 호출(가져오기/업데이트 또는 삭제)을 수행할 수 있는 두 번째 스크립트를 만들거나, 전달자 토큰이 이미 생성된 경우 스크립트가 실행될 때마다 새 전달자 토큰이 생성되지 않는다는 조건이 코드에 그대로 유지되면서 두 가지 작업을 수행하는 단일 스크립트를 작성할 수 있습니다.
Python에서 작동하도록 하려면 다음 라이브러리를 설치해야 합니다.
pip install oauthlib pip install requests_oauthlib
스크립트 1:
이 스크립트에서는 올바른 client_id및 client_secret을 언급해야 합니다.
import requests from oauthlib.oauth2 import BackendApplicationClient from oauthlib.oauth2 import TokenExpiredError from requests_oauthlib import OAuth2Session from requests.auth import HTTPBasicAuth token_url = 'https://api.sse.cisco.com/auth/v2/token' client_id = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" client_secret = "XXXXXXXXXXXXXXXXXXXXXXXXX" class SecureAccessAPI: def __init__(self, url, ident, secret): self.url = url self.ident = ident self.secret = secret self.token = None def GetToken(self): auth = HTTPBasicAuth(self.ident, self.secret) client = BackendApplicationClient(client_id=self.ident) oauth = OAuth2Session(client=client) self.token = oauth.fetch_token(token_url=self.url, auth=auth) return self.token # Get token api = SecureAccessAPI(token_url, client_id, client_secret) print("Token: " + str(api.GetToken()))
성과:
이 스크립트의 출력은 다음과 같아야 합니다.
Token: {'token_type': 'bearer', 'access_token': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjcyNmI5MGUzLWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...', 'expires_in': 3600, 'expires_at': 1707767804.6489065}
access_token 는 수천 개의 문자로 매우 길기 때문에 출력을 읽을 수 있도록 이 예제를 위해 단축되었습니다.
스크립트 2:
그런 access_token다음 스크립트 1의 를 이 스크립트에서 사용하여 API 호출을 수행할 수 있습니다. 예를 들어 스크립트 2를 사용하여 리소스를 사용하는 네트워크 터널 그룹에 대한 정보를 가져올 수 있습니다/deployments/v2/networktunnelgroups.
import requests import pprint import json url = "https://api.sse.cisco.com/deployments/v2/networktunnelgroups" BT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjcyNmI5MGUzLWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...'" headers = { 'Authorization':f"Bearer {BT}" ,"Accept": "application/json" } response = requests.request('GET', url, headers=headers) json_object = json.loads(response.content) pprint.pprint(json_object)
성과:
이 스크립트의 출력은 다음과 같아야 합니다.
Python 출력 - 네트워크 터널 그룹
Secure Access Developers User Guide를 사용하여 정책, 로밍 컴퓨터, 보고서 등에 대한 정보를 가져올 수도 있습니다.
문제 해결
Secure Access API 엔드포인트는 HTTP 응답 코드를 사용하여 API 요청의 성공 또는 실패를 나타냅니다. 일반적으로 2xx 범위의 코드는 성공을 나타내고, 4xx 범위의 코드는 제공된 정보에서 발생한 오류를 나타내며, 5xx 범위의 코드는 서버 오류를 나타낸다. 문제를 해결하기 위한 접근 방식은 수신된 응답 코드에 따라 달라집니다.
REST API - 응답 코드 1
REST API - 응답 코드 2
관련 정보