Snipe-IT API 사용을 위한 초기 설정 완벽 가이드




Snipe-IT 관리자 계정 설정

API를 사용하기 전에 적절한 권한을 가진 계정이 필요합니다. 보안상 일반 사용자 계정으로는 API 토큰을 생성할 수 없습니다.

관리자 계정 확인 방법:

  1. Snipe-IT 웹 인터페이스에 로그인
  2. 우측 상단 프로필 메뉴 클릭
  3. “Account Settings” 선택
  4. “Permissions” 탭에서 다음 권한 확인:
    • admin 또는 super-admin 권한
    • api.readapi.write 권한

권한이 없는 경우: 시스템 관리자에게 권한 요청을 하거나, Super Admin 계정으로 권한을 부여해야 합니다.

API 토큰 생성 및 관리

Snipe-IT API는 토큰 기반 인증을 사용합니다. 각 API 요청에 이 토큰을 포함해야 합니다.

토큰 생성 단계:

  1. Account Settings 접근
    • 로그인 후 우측 상단 프로필 아이콘 클릭
    • “My Account” → “API Keys” 메뉴 선택
  2. 새 토큰 생성 Token Name: "Python Automation Script" Permissions: Full Access (또는 필요한 권한만 선택)
  3. 토큰 저장
    • 생성된 토큰은 한 번만 표시됩니다
    • 반드시 안전한 곳에 저장하세요
    • 예시: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...

토큰 관리 모범 사례:

python# .env 파일에 저장 (권장)
SNIPE_IT_URL=https://your-snipe-it.domain.com
SNIPE_IT_TOKEN=your-api-token-here
SNIPE_IT_TIMEOUT=30
python# Python에서 환경변수 사용
import os
from dotenv import load_dotenv

load_dotenv()

API_URL = os.getenv('SNIPE_IT_URL')
API_TOKEN = os.getenv('SNIPE_IT_TOKEN')

권한 설정 및 보안 고려사항

API 권한 레벨:

권한 레벨설명사용 사례
Read Only조회만 가능리포팅, 모니터링
Read/Write생성, 수정 가능자산 관리 자동화
Full Access모든 작업 가능시스템 통합, 마이그레이션

보안 체크리스트:

토큰 보안

  • 토큰을 코드에 직접 하드코딩하지 않기
  • 환경변수 또는 설정 파일 사용
  • Git에 토큰 정보 커밋하지 않기

네트워크 보안

  • HTTPS 연결 강제 사용
  • IP 기반 접근 제한 (가능한 경우)
  • VPN 환경에서 API 사용

토큰 순환

  • 정기적인 토큰 갱신 (3-6개월)
  • 사용하지 않는 토큰 즉시 삭제
  • 토큰별 목적 명시

API 엔드포인트 확인 방법

Snipe-IT의 API 문서는 설치된 인스턴스에서 직접 확인할 수 있습니다.

API 문서 접근:

https://your-snipe-it-domain.com/api/docs

주요 엔드포인트 구조:

Base URL: https://your-domain.com/api/v1/
Assets: /hardware
Users: /users  
Categories: /categories
Manufacturers: /manufacturers
Models: /models
Locations: /locations

Postman을 통한 API 연결 테스트

실제 코드 작성 전에 API 연결을 테스트해보겠습니다.

Postman 설정:

  1. 새 Collection 생성
    • Name: “Snipe-IT API Tests”
    • Authorization: Bearer Token
    • Token: [생성한 API 토큰]
  2. Environment 변수 설정 base_url: https://your-snipe-it-domain.com/api/v1 api_token: your-token-here
  3. 첫 번째 테스트 요청 Method: GET URL: {{base_url}}/hardware Headers: Authorization: Bearer {{api_token}} Accept: application/json

성공적인 응답 예시:

json{
  "total": 150,
  "rows": [
    {
      "id": 1,
      "name": "Dell-Laptop-001",
      "asset_tag": "DL001",
      "model": {
        "id": 1,
        "name": "Dell Latitude 7420"
      },
      "status_label": {
        "id": 1,
        "name": "Ready to Deploy"
      }
    }
  ]
}

문제 해결 가이드

자주 발생하는 오류와 해결책:

401 Unauthorized

원인: 잘못된 토큰 또는 만료된 토큰
해결: 토큰 재생성 및 권한 확인

403 Forbidden

원인: 권한 부족
해결: 관리자 권한 요청 또는 API 권한 부여

404 Not Found

원인: 잘못된 엔드포인트 URL
해결: API 문서에서 정확한 경로 확인

SSL Certificate Error

python# 개발 환경에서만 사용 (운영환경 비권장)
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
response = requests.get(url, verify=False)

연결 테스트 스크립트

설정이 올바른지 확인하는 간단한 Python 스크립트:

pythonimport requests
import os
from dotenv import load_dotenv

load_dotenv()

def test_api_connection():
    """API 연결 테스트"""
    base_url = os.getenv('SNIPE_IT_URL')
    token = os.getenv('SNIPE_IT_TOKEN')
    
    headers = {
        'Authorization': f'Bearer {token}',
        'Accept': 'application/json'
    }
    
    try:
        response = requests.get(
            f'{base_url}/api/v1/hardware',
            headers=headers,
            timeout=10
        )
        
        if response.status_code == 200:
            data = response.json()
            print(f"✅ 연결 성공! 총 {data['total']}개의 자산이 있습니다.")
            return True
        else:
            print(f"❌ 연결 실패: {response.status_code} - {response.text}")
            return False
            
    except requests.exceptions.RequestException as e:
        print(f"❌ 네트워크 오류: {e}")
        return False

if __name__ == "__main__":
    test_api_connection()

이제 Snipe-IT API 사용을 위한 모든 준비가 완료되었습니다!




Leave a Comment