n8n API 통한 Audit & Execution Log 수집 모니터링 분석
n8n에서 자체 로그인 내역 및 작업 로그를 수집하고 알람하는 워크플로우를 작성하려면 다음 단계를 따를 수 있습니다. 이 예시는 로그를 수집하고 알람을 트리거하는 기본적인 워크플로우입니다.
- HTTP Request (로그 수집)
- n8n에서 HTTP Request 노드를 사용하여 n8n의 로그 파일 또는 로그 API에 접근합니다.
- HTTP Request 노드의 설정
- Method: GET
- URL:
http://<n8n_instance>/api/logs
(n8n 인스턴스의 로그 API URL) - Authentication: Basic Auth 또는 Token Auth (필요한 경우)
- Function Node (로그 분석)
- HTTP Request 노드의 출력을 받아 로그 데이터를 분석합니다.
- Function 노드의 설정
const logs = items[0].json; const loginAttempts = logs.filter(log => log.message.includes('login attempt')); const recentLoginAttempts = loginAttempts.filter(log => new Date(log.timestamp) > new Date(Date.now() - 3600000)); // 지난 1시간 동안의 로그인 시도 return recentLoginAttempts.map(log => ({ json: log }));
- IF Node (조건 분기)
- Function 노드의 출력을 받아 조건에 따라 분기합니다.
- IF 노드의 설정
- 조건:
items.length > 0
(로그인 시도가 있을 경우)
- 조건:
- Email Node (알람 전송)
- IF 노드의 true 브랜치에서 Email 노드를 사용하여 알람을 전송합니다.
- Email 노드의 설정
- SMTP 설정: 회사의 SMTP 서버 정보
- Sender: 보낸 사람 이메일 주소
- Recipient: 받을 사람 이메일 주소
- Subject:
n8n Login Alert
- Message:
Login attempts detected: {{JSON.stringify($json["message"])}}
- Slack Node (슬랙 알람)
- IF 노드의 true 브랜치에서 Slack 노드를 사용하여 슬랙 알람을 보냅니다.
- Slack 노드의 설정
- Authentication: 슬랙 API 토큰
- Channel: 알람을 보낼 슬랙 채널
- Message:
Login attempts detected: {{JSON.stringify($json["message"])}}
워크플로우의 각 노드 설정이 완료되면, 이를 실행하여 n8n 로그인 내역을 수집하고, 조건에 따라 이메일 및 슬랙 알람을 전송할 수 있습니다.
예시 워크플로우 구성도
- HTTP Request (로그 수집)
- Function (로그 분석)
- IF (조건 분기)
- True 브랜치
- Email (알람 전송)
- Slack (슬랙 알람)
- False 브랜치
- 아무 동작도 하지 않음
- True 브랜치
이 워크플로우는 n8n의 보안 로그를 지속적으로 모니터링하고, 의심스러운 활동이 감지되었을 때 즉시 알림을 받을 수 있도록 도와줍니다.
n8n Public API 개요
n8n Public API는 다양한 작업을 수행할 수 있는 여러 엔드포인트를 제공합니다. 주요 엔드포인트는 사용자, 보안 감사, 실행, 워크플로우, 자격 증명, 태그, 소스 제어 관련 작업을 다룹니다.
API 정보
- 타이틀: n8n Public API
- 설명: n8n Public API
- 버전: 1.1.1
- 베이스 URL: /api/v1
보안
- 인증 방식: ApiKeyAuth (헤더에
X-N8N-API-KEY
포함)
주요 엔드포인트
1. User (사용자 관련 작업)
GET /users
- 설명: 인스턴스의 모든 사용자 조회
- 파라미터:
limit
,cursor
,includeRole
GET /users/{id}
- 설명: 사용자 ID 또는 이메일로 사용자 조회
- 파라미터:
userIdentifier
,includeRole
2. Audit (보안 감사 관련 작업)
POST /audit
- 설명: n8n 인스턴스에 대한 보안 감사 생성
- 바디 파라미터:
additionalOptions
(객체)
3. Execution (실행 관련 작업)
GET /executions
- 설명: 인스턴스의 모든 실행 조회
- 파라미터:
includeData
,status
,workflowId
,limit
,cursor
GET /executions/{id}
- 설명: 실행 ID로 실행 조회
- 파라미터:
executionId
,includeData
DELETE /executions/{id}
- 설명: 실행 ID로 실행 삭제
- 파라미터:
executionId
4. Workflow (워크플로우 관련 작업)
POST /workflows
- 설명: 워크플로우 생성
- 바디 파라미터:
workflow
(객체)
GET /workflows
- 설명: 인스턴스의 모든 워크플로우 조회
- 파라미터:
active
,tags
,name
,limit
,cursor
GET /workflows/{id}
- 설명: 워크플로우 ID로 워크플로우 조회
- 파라미터:
workflowId
DELETE /workflows/{id}
- 설명: 워크플로우 ID로 워크플로우 삭제
- 파라미터:
workflowId
POST /workflows/{id}/activate
- 설명: 워크플로우 활성화
- 파라미터:
workflowId
POST /workflows/{id}/deactivate
- 설명: 워크플로우 비활성화
- 파라미터:
workflowId
GET /workflows/{id}/tags
- 설명: 워크플로우 태그 조회
- 파라미터:
workflowId
PUT /workflows/{id}/tags
- 설명: 워크플로우 태그 업데이트
- 파라미터:
workflowId
- 바디 파라미터:
tagIds
(배열)
5. Credential (자격 증명 관련 작업)
POST /credentials
- 설명: 자격 증명 생성
- 바디 파라미터:
credential
(객체)
DELETE /credentials/{id}
- 설명: 자격 증명 ID로 자격 증명 삭제
- 파라미터:
id
GET /credentials/schema/{credentialTypeName}
- 설명: 자격 증명 데이터 스키마 조회
- 파라미터:
credentialTypeName
6. Tags (태그 관련 작업)
POST /tags
- 설명: 태그 생성
- 바디 파라미터:
tag
(객체)
GET /tags
- 설명: 인스턴스의 모든 태그 조회
- 파라미터:
limit
,cursor
GET /tags/{id}
- 설명: 태그 ID로 태그 조회
- 파라미터:
tagId
DELETE /tags/{id}
- 설명: 태그 ID로 태그 삭제
- 파라미터:
tagId
PUT /tags/{id}
- 설명: 태그 ID로 태그 업데이트
- 파라미터:
tagId
- 바디 파라미터:
tag
(객체)
7. SourceControl (소스 제어 관련 작업)
POST /source-control/pull
- 설명: 원격 저장소에서 변경 사항 가져오기
- 바디 파라미터:
pull
(객체)
응답 (HTTP CODE)
- 200: 성공적인 작업
- 400: 잘못된 요청
- 401: 인증되지 않음
- 403: 접근 금지됨
- 404: 리소스를 찾을 수 없음
- 409: 충돌 발생
- 500: 서버 오류
이 API는 n8n 인스턴스에서 다양한 작업을 자동화하고 관리하는 데 유용하게 사용할 수 있습니다. n8n Public API에서 사용자 로그인 로그 및 API 접근/인증 로그를 직접적으로 수집하는 엔드포인트는 명시되어 있지 않습니다. 그러나 보안 감사(Audit) 관련 엔드포인트를 통해 보안 관련 정보를 수집할 수 있습니다.
Audit 엔드포인트 예제
POST /audit
- 설명: n8n 인스턴스에 대한 보안 감사 생성
- 요청
{ "additionalOptions": { "daysAbandonedWorkflow": 30, "categories": ["credentials", "database", "nodes", "filesystem", "instance"] } }
- 응답
{ "Credentials Risk Report": { "risk": "credentials", "sections": [ { "title": "Credentials not used in any workflow", "description": "These credentials are not used in any workflow. Keeping unused credentials in your instance is an unneeded security risk.", "recommendation": "Consider deleting these credentials if you no longer need them.", "location": [ { "kind": "credential", "id": "1", "name": "My Test Account" } ] } ] }, "Database Risk Report": { "risk": "database", "sections": [ { "title": "Expressions in 'Execute Query' fields in SQL nodes", "description": "This SQL node has an expression in the 'Query' field of an 'Execute Query' operation. Building a SQL query with an expression may lead to a SQL injection attack.", "recommendation": "Consider using the 'Query Parameters' field to pass parameters to the query or validating the input of the expression in the 'Query' field.", "location": [ { "kind": "node", "workflowId": "1", "workflowName": "My Workflow", "nodeId": "51eb5852-ce0b-4806-b4ff-e41322a4041a", "nodeName": "MySQL", "nodeType": "n8n-nodes-base.mySql" } ] } ] } }
보안 감사 엔드포인트는 n8n 인스턴스의 보안 상태를 평가하는 데 유용합니다. 이 엔드포인트를 통해 자격 증명, 데이터베이스, 노드, 파일 시스템 및 인스턴스의 보안 상태를 확인할 수 있습니다. 그러나 사용자 로그인 로그와 API 접근/인증 로그를 직접적으로 제공하지는 않습니다.
사용자 로그인 로그와 API 접근/인증 로그를 수집하려면 n8n의 내부 로그 파일 또는 로그 시스템에서 직접 데이터를 수집해야 할 수도 있습니다. 이를 위해서는 n8n 인스턴스의 로그 파일을 읽거나, 외부 로깅 시스템(예: ELK 스택, Splunk 등)을 설정하여 로그를 수집하는 것이 필요할 수 있습니다. n8n 인스턴스에서 로그 파일을 수집하는 예시 워크플로우를 다음과 같이 작성할 수 있습니다.
- Read Binary File 노드를 사용하여 로그 파일을 읽습니다.
- Function 노드를 사용하여 로그 파일에서 필요한 정보를 추출합니다.
- HTTP Request 노드를 사용하여 외부 로깅 시스템으로 로그 데이터를 전송합니다.
- 알람 노드 (예: 이메일 또는 Slack)를 사용하여 특정 이벤트가 발생했을 때 알림을 보냅니다.
이러한 방식으로 사용자 로그인 로그 및 API 접근/인증 로그를 수집하고 모니터링할 수 있습니다. 주기적으로 로그를 가져와서 파싱한 후, Google Sheets에 추가/업데이트하는 워크플로우를 구성하는 방법은 다음과 같습니다. 이 워크플로우는 다음 단계로 구성됩니다.
- Cron 노드를 사용하여 주기적으로 워크플로우 실행
- Read Binary File 노드를 사용하여 로그 파일 읽기
- Function 노드를 사용하여 로그 파싱
- Google Sheets 노드를 사용하여 파싱된 데이터를 Google Sheets에 추가/업데이트
- 알람 노드 (선택 사항)를 사용하여 특정 이벤트 발생 시 알림 전송
단계별 워크플로우 구성
1. Cron 노드 설정 (주기적 실행)
- 노드 이름: Cron
- 설정: 주기적으로 워크플로우를 실행하도록 설정 (예: 매일, 매시간 등)
{
"nodes": [
{
"parameters": {
"triggerTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"name": "Cron",
"type": "n8n-nodes-base.cron",
"typeVersion": 1,
"position": [
250,
300
]
}
]
}
2. Read Binary File 노드 설정 (로그 파일 읽기)
- 노드 이름: Read Binary File
- 설정: 로그 파일 경로 설정
{
"nodes": [
{
"parameters": {
"filePath": "/path/to/your/log/file.log",
"options": {}
},
"name": "Read Binary File",
"type": "n8n-nodes-base.readBinaryFile",
"typeVersion": 1,
"position": [
450,
300
]
}
]
}
3. Function 노드 설정 (로그 파싱)
- 노드 이름: Parse Logs
- 설정: 로그 데이터를 파싱하여 필요한 정보 추출
{
"nodes": [
{
"parameters": {
"functionCode": "const logs = $binary.data.toString('utf-8');\nconst logEntries = logs.split('\\n').filter(entry => entry);\nconst parsedLogs = logEntries.map(entry => {\n // 로그 형식에 따라 파싱 로직 작성\n const [timestamp, logLevel, message] = entry.split(' ');\n return {\n timestamp,\n logLevel,\n message\n };\n});\nreturn parsedLogs.map(log => ({ json: log }));"
},
"name": "Parse Logs",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
650,
300
]
}
]
}
4. Google Sheets 노드 설정 (Google Sheets에 추가/업데이트)
- 노드 이름: Update Google Sheets
- 설정: Google Sheets API를 사용하여 파싱된 데이터를 추가/업데이트
{
"nodes": [
{
"parameters": {
"authentication": "oAuth2",
"sheetId": "<YOUR_SHEET_ID>",
"range": "Sheet1!A:C",
"valueInputMode": "USER_ENTERED",
"data": "={{$node[\"Parse Logs\"].json[\"timestamp\"]}},{{$node[\"Parse Logs\"].json[\"logLevel\"]}},{{$node[\"Parse Logs\"].json[\"message\"]}}"
},
"name": "Update Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 1,
"position": [
850,
300
],
"credentials": {
"googleSheetsOAuth2Api": {
"id": "YOUR_CREDENTIALS_ID"
}
}
}
]
}
5. 알람 노드 설정
- 노드 이름: Send Alert
- 설정: 이메일 또는 Slack을 사용하여 특정 이벤트 발생 시 알림 전송
{
"nodes": [
{
"parameters": {
"toEmail": "your.email@example.com",
"subject": "n8n Log Alert",
"text": "An important event occurred: {{$node[\"Parse Logs\"].json[\"message\"]}}"
},
"name": "Send Alert",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 1,
"position": [
1050,
300
],
"credentials": {
"smtp": {
"id": "YOUR_SMTP_CREDENTIALS_ID"
}
}
}
]
}
워크플로우 구성도
- Cron (주기적 실행)
- Read Binary File (로그 파일 읽기)
- Function (로그 파싱)
- Google Sheets (데이터 추가/업데이트)
- Send Alert (선택 사항, 알림 전송)
이 워크플로우를 통해 n8n에서 주기적으로 로그 데이터를 가져오고 파싱하여 Google Sheets에 저장할 수 있습니다. 추가적으로 특정 이벤트 발생 시 알림을 받을 수 있도록 설정할 수 있습니다.