Snipe-IT 관리자 계정 설정
API를 사용하기 전에 적절한 권한을 가진 계정이 필요합니다. 보안상 일반 사용자 계정으로는 API 토큰을 생성할 수 없습니다.
관리자 계정 확인 방법:
- Snipe-IT 웹 인터페이스에 로그인
- 우측 상단 프로필 메뉴 클릭
- “Account Settings” 선택
- “Permissions” 탭에서 다음 권한 확인:
admin
또는super-admin
권한api.read
및api.write
권한
권한이 없는 경우: 시스템 관리자에게 권한 요청을 하거나, Super Admin 계정으로 권한을 부여해야 합니다.
API 토큰 생성 및 관리
Snipe-IT API는 토큰 기반 인증을 사용합니다. 각 API 요청에 이 토큰을 포함해야 합니다.
토큰 생성 단계:
- Account Settings 접근
- 로그인 후 우측 상단 프로필 아이콘 클릭
- “My Account” → “API Keys” 메뉴 선택
- 새 토큰 생성
Token Name: "Python Automation Script" Permissions: Full Access (또는 필요한 권한만 선택)
- 토큰 저장
- 생성된 토큰은 한 번만 표시됩니다
- 반드시 안전한 곳에 저장하세요
- 예시:
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 설정:
- 새 Collection 생성
- Name: “Snipe-IT API Tests”
- Authorization: Bearer Token
- Token: [생성한 API 토큰]
- Environment 변수 설정
base_url: https://your-snipe-it-domain.com/api/v1 api_token: your-token-here
- 첫 번째 테스트 요청
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 사용을 위한 모든 준비가 완료되었습니다!