Skip to main content
GET
https://sajuapi.dev
/
v1
/
reports
/
audit
감사 로그 조회
curl --request GET \
  --url https://sajuapi.dev/v1/reports/audit \
  --header 'X-API-Key: <api-key>'
v1 Enterprise API (Coming Soon)이 엔드포인트는 Enterprise 버전에서 제공될 예정입니다. 현재는 v0 API를 사용하세요.
감사 로그를 조회합니다. 민감한 데이터 접근, 삭제 작업 등 보안 관련 활동을 확인할 수 있습니다.
감사 로그는 개인정보보호법 및 기업 컴플라이언스 준수를 위해 제공됩니다. 모든 복호화 요청, 삭제 작업이 자동으로 기록됩니다.

Query 파라미터

action
string
특정 액션으로 필터링합니다. profile.unmasked, fortune.unmasked, profile.deleted, fortune.deleted 등입니다.
resource_type
string
리소스 타입으로 필터링합니다. profile, fortune, webhook 중 하나입니다.
resource_id
string
특정 리소스 ID로 필터링합니다.
actor_ip
string
특정 IP 주소로 필터링합니다.
start_date
string
조회 시작 날짜입니다. ISO 8601 형식입니다.
end_date
string
조회 종료 날짜입니다. ISO 8601 형식입니다.
limit
integer
default:"50"
한 페이지에 반환할 로그 수입니다. 최대 1000입니다.
cursor
string
다음 페이지를 조회하기 위한 커서입니다.

Response

성공

감사 로그 조회에 성공하면 AuditLog 배열이 반환됩니다.

실패

상태 코드에러 타입설명
401authentication_errorAPI 키가 유효하지 않음
403forbidden감사 로그 조회 권한이 없음
429rate_limited요청 한도 초과

요청 예시

# 전체 감사 로그 조회
curl -X GET "https://api.sajuapi.dev/v1/reports/audit?limit=100" \
  -H "X-API-Key: bs_live_xxx"

# 복호화 요청만 조회
curl -X GET "https://api.sajuapi.dev/v1/reports/audit?action=profile.unmasked" \
  -H "X-API-Key: bs_live_xxx"

# 특정 프로필 관련 로그 조회
curl -X GET "https://api.sajuapi.dev/v1/reports/audit?resource_id=prf_abc123def456" \
  -H "X-API-Key: bs_live_xxx"

응답 예시

{
  "data": [
    {
      "id": 12345,
      "action": "profile.unmasked",
      "resource_type": "profile",
      "resource_id": "prf_abc123def456",
      "actor_ip": "203.0.113.42",
      "actor_api_key": "bs_live_xxx...",
      "request_id": "req_xyz789",
      "metadata": {
        "user_agent": "Mozilla/5.0 ...",
        "endpoint": "GET /v1/profiles/prf_abc123def456/unmasked"
      },
      "created_at": "2025-01-16T09:30:00Z"
    },
    {
      "id": 12344,
      "action": "fortune.unmasked",
      "resource_type": "fortune",
      "resource_id": "ftn_xyz789abc123",
      "actor_ip": "203.0.113.42",
      "actor_api_key": "bs_live_xxx...",
      "request_id": "req_abc456",
      "metadata": {
        "profile_id": "prf_abc123def456"
      },
      "created_at": "2025-01-16T09:25:00Z"
    },
    {
      "id": 12343,
      "action": "profile.deleted",
      "resource_type": "profile",
      "resource_id": "prf_def456ghi789",
      "actor_ip": "198.51.100.23",
      "actor_api_key": "bs_live_yyy...",
      "request_id": "req_def789",
      "metadata": {
        "fortunes_deleted": 23,
        "cached_calculations_deleted": 5
      },
      "created_at": "2025-01-16T09:15:00Z"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJpZCI6MTIzNDJ9",
  "total_count": 1523
}

AuditLog 객체

필드타입설명
idinteger로그 ID입니다.
actionstring액션 유형입니다.
resource_typestring리소스 타입입니다.
resource_idstring리소스 ID입니다.
actor_ipstring요청자 IP 주소입니다.
actor_api_keystring사용된 API 키 (앞 20자)입니다.
request_idstring요청 ID입니다.
metadataobject추가 메타데이터입니다.
created_atstring로그 생성 시간입니다.

액션 유형

액션설명
profile.created프로필 생성
profile.updated프로필 수정
profile.deleted프로필 삭제
profile.unmasked프로필 복호화 조회
fortune.created운세 생성
fortune.deleted운세 삭제
fortune.unmasked운세 복호화 조회
webhook.created웹훅 생성
webhook.deleted웹훅 삭제

보안 모니터링

비정상적인 복호화 요청 패턴을 모니터링하여 보안 이슈를 조기에 발견하세요.
// 특정 IP에서의 복호화 요청 빈도 확인
async function checkUnmaskedRequestFrequency(ip, hours = 24) {
  const startDate = new Date();
  startDate.setHours(startDate.getHours() - hours);

  const response = await fetch(
    `/v1/reports/audit?action=profile.unmasked&actor_ip=${ip}&start_date=${startDate.toISOString()}`,
    { headers: { 'X-API-Key': 'bs_live_xxx' } }
  );

  const { total_count } = await response.json();

  if (total_count > 100) {
    console.warn(`경고: IP ${ip}에서 ${hours}시간 동안 ${total_count}건의 복호화 요청`);
  }

  return total_count;
}
감사 로그는 90일간 보관됩니다. 장기 보관이 필요한 경우 주기적으로 데이터를 백업하세요.