실행 데이터 마스킹
n8n v2.29데이터 마스킹은 Enterprise Self-hosted 및 Enterprise Cloud 플랜에서 사용할 수 있습니다. 제공 버전: n8n 버전 2.16.0(워크플로별 마스킹), n8n 버전 2.26.0(인스턴스 수준 강제 적용)
기능 제공 범위
데이터 마스킹은 Enterprise Self-hosted 및 Enterprise Cloud 플랜에서 사용할 수 있습니다.
제공 버전: n8n 버전 2.16.0(워크플로별 마스킹), n8n 버전 2.26.0(인스턴스 수준 강제 적용)
실행 데이터 마스킹을 사용하면 워크플로 실행의 입력 및 출력 데이터를 숨길 수 있습니다. 이를 통해 개인 데이터, 인증 토큰, 재무 기록 같은 민감한 정보를, 워크플로는 볼 수 있지만 실제 데이터까지는 볼 필요가 없는 사용자로부터 보호할 수 있습니다.
마스킹을 활성화하면 실행 메타데이터(상태, 타이밍, 노드 이름)는 계속 표시되지만, n8n은 각 노드가 처리한 실제 데이터 페이로드를 마스킹 표시로 대체합니다.
워크플로별로 마스킹을 구성하거나, 인스턴스 전체에 강제 적용하여 모든 워크플로가 실행 데이터를 마스킹하도록 할 수 있습니다.
실행 데이터 마스킹을 사용하는 이유#
워크플로는 워크플로 작성자나 열람자가 n8n 외부에서 접근해서는 안 되는 데이터를 처리하는 경우가 많습니다. 일반적인 시나리오는 다음과 같습니다.
- PII 및 컴플라이언스: 고객 개인 데이터(이메일, 주소, 재무 기록)를 다루는 워크플로는 GDPR, SOC 2 또는 내부 보안 표준을 충족해야 합니다.
- 부서 간 워크플로: 한 팀이 만든 워크플로가 다른 팀의 민감한 데이터를 처리하는데, 그렇지 않으면 작성자가 접근할 수 없었을 데이터입니다.
- 최소 권한 원칙: 워크플로 열람 권한이 있는 모든 사람이 아니라, 필요한 사람에게만 데이터 표시를 제한합니다.
실행 데이터 마스킹이 도입되기 전에는 워크플로 수준에서 실행 기록 자체를 완전히 비활성화하는 것이 유일한 선택지였는데, 이 경우 워크플로의 성공/실패 상태에 대한 가시성도 모두 사라졌습니다. 실행 데이터 마스킹은 민감한 데이터 페이로드를 숨기면서도 실행 모니터링은 그대로 유지합니다.
마스킹 설정 구성#
마스킹은 워크플로 설정에서 워크플로별로 구성합니다. 이 설정을 변경하려면 workflow:enableRedaction 또는 workflow:disableRedaction 스코프(또는 둘 다)가 필요합니다.
마스킹을 구성하려면:
- 워크플로를 엽니다.
- 오른쪽 상단의 세 개 점 아이콘
을 선택합니다. - Settings를 선택합니다.
- Redact production execution data와 Redact manual execution data 설정을 찾습니다.
- 각 설정에 대해 Default - Do not redact 또는 Redact 중 하나를 선택합니다.
- Save를 선택합니다.
인스턴스 강제 적용에 의해 잠긴 설정
인스턴스 수준 강제 적용이 활성화되어 있으면, n8n은 강제 적용 범위에 해당하는 설정을 Redact로 잠급니다. 워크플로 수준에서는 이를 끌 수 없습니다.
마스킹 설정 설명#
마스킹을 제어하는 독립적인 두 개의 토글이 있습니다.
| 설정 | 제어 대상 |
|---|---|
| Redact production execution data | n8n이 프로덕션(수동으로 트리거되지 않은) 실행의 데이터를 마스킹할지 여부를 제어합니다. 프로덕션 실행에는 워크플로가 활성 상태일 때 웹훅, 스케줄 또는 기타 트리거에 의해 트리거된 실행이 포함됩니다. |
| Redact manual execution data | n8n이 수동으로 트리거된 실행의 데이터를 마스킹할지 여부를 제어합니다. 수동 실행에는 편집기에서 Execute Workflow를 선택하여 시작한 실행이 포함됩니다. |
인스턴스 수준 강제 적용#
인스턴스 소유자와 관리자는 각 워크플로의 개별 설정에 의존하는 대신, 인스턴스의 모든 워크플로에 대해 마스킹을 강제 적용할 수 있습니다. 강제 적용은 모든 곳에 적용되는 최소 마스킹 정책("바닥선")을 설정합니다.
강제 적용을 활성화하려면 Settings > Security로 이동하여 Data redaction 섹션을 구성합니다. 단계별 지침은 보안 설정을 참조하세요.
강제 적용 범위#
강제 적용 범위는 인스턴스 전체에서 n8n이 마스킹할 실행을 제어합니다.
| 범위 | 강제 적용 대상 |
|---|---|
| Production executions | n8n은 모든 워크플로의 프로덕션 실행 데이터를 마스킹합니다. 수동 실행은 각 워크플로 자체 설정을 따릅니다. 이 값이 권장 설정으로, 실시간 데이터는 보호하면서 디버깅을 위한 수동 테스트 실행은 계속 표시됩니다. |
| Manual and production executions | n8n은 모든 워크플로의 모든 실행 데이터를 마스킹합니다. 테스트 데이터조차 민감한 경우 사용합니다. |
강제 적용과 워크플로 설정의 상호작용#
- 강제 적용은 실행 데이터를 읽을 때 적용됩니다. 자체 설정에서 마스킹이 활성화되지 않은 워크플로의 실행을 포함하여, 누군가 실행을 볼 때마다 n8n은 강제 적용 범위에 해당하는 데이터를 마스킹합니다.
- 워크플로 설정은 강제 적용된 범위보다 약할 수 없습니다. 워크플로 설정 UI는 영향을 받는 마스킹 토글을 잠그며, 공개 API는 바닥선보다 낮은 마스킹 정책으로 워크플로를 생성하거나 업데이트하려는 시도를 거부합니다. 워크플로는 여전히 바닥선보다 더 엄격한 마스킹을 선택할 수 있습니다.
- 새 워크플로는 바닥선에서 시작합니다. 강제 적용이 활성화된 상태에서 워크플로를 생성하면, 해당 워크플로의 마스킹 정책은 기본적으로 강제 적용 범위로 설정됩니다. 공개 API를 통해 마스킹 정책을 지정하지 않고 워크플로를 생성하면, n8n은 이를 바닥선으로 설정합니다.
- 기존 워크플로 설정은 그대로 유지됩니다. 강제 적용을 활성화해도 기존 워크플로에 저장된 설정은 변경되지 않습니다. 해당 워크플로의 실행 데이터는 여전히 강제 적용된 범위에서 마스킹되며, 이후 강제 적용을 비활성화하면 각 워크플로는 자체 설정으로 돌아갑니다.
마스킹되는 항목#
n8n이 실행을 마스킹할 때 다음을 마스킹합니다.
- 아이템 JSON 데이터: n8n은 각 노드의 모든 입력 및 출력 데이터(
item.json)를 빈 객체로 대체합니다. - 바이너리 데이터: n8n은 파일, 이미지 같은 바이너리 데이터(
item.binary)를 제거합니다. - 선언된 민감 필드: n8n은 노드 작성자가 민감하다고 표시한(
sensitiveOutputFields사용) 필드를 항상 마스킹하며, 공개 권한이 있는 사용자에게도 이를 노출하지 않습니다. - 오류 메타데이터: n8n은 오류 메시지를 마스킹하되, 문제 해결에 도움이 되도록 오류 유형과 HTTP 상태 코드(API 오류의 경우)만 보존합니다.
마스킹된 실행에서는:
- 실행 뷰어에 일반적인 데이터 테이블 대신 파쇄기 아이콘과 함께 "Data redacted" 표시가 나타납니다.
- 실행 메타데이터는 계속 표시됩니다. 즉 노드 이름, 실행 상태(성공/실패), 타이밍 정보, 워크플로 구조는 그대로 보입니다.
오류 정보
n8n이 실행 데이터를 마스킹할 때는 오류 메시지를 통해 민감한 정보가 노출되지 않도록 오류 세부 정보도 함께 마스킹합니다. 오류 유형(예: NodeApiError)과 HTTP 상태 코드만 남습니다. 이는 데이터를 노출하지 않으면서도 실패의 범주를 파악할 수 있는 충분한 정보를 제공합니다.
마스킹된 데이터 공개#
Reveal execution data(execution:reveal) 스코프를 가진 사용자는 특정 실행에 대해 마스킹된 실행 데이터를 일시적으로 볼 수 있습니다. 인스턴스 소유자와 관리자는 기본적으로 이 스코프를 가지고 있습니다.
데이터를 공개하려면:
- 실행 뷰어에서 실행을 엽니다.
- 마스킹된 데이터 영역에 표시된 Reveal data 버튼을 선택합니다.
- 확인 대화 상자를 검토합니다. 대화 상자는 다음을 설명합니다.
- 시스템이 이 작업을 감사 추적(audit trail)에 기록합니다.
- 정당한 사유가 있을 때만 데이터를 공개해야 합니다.
- 불필요한 접근은 조직의 정책을 위반할 수 있습니다.
- Reveal data를 선택하여 확인합니다.
해당 실행의 데이터는 현재 세션에서 표시됩니다.
동적 자격 증명을 사용하는 실행
n8n은 사용자의 권한이나 적용 중인 마스킹 정책과 관계없이, 동적 자격 증명을 사용한 실행에 대한 공개 요청을 거부합니다. 이는 실행 시점에 확인된 자격 증명이 노출되는 것을 방지합니다.
감사 로깅#
로그 스트리밍은 공개 작업과 강제 적용 정책 변경을 추적합니다. 다음 감사 이벤트를 사용할 수 있습니다.
| 이벤트 | 설명 |
|---|---|
n8n.audit.execution.data.revealed |
사용자가 마스킹된 실행 데이터를 공개할 때 n8n이 발생시키는 이벤트입니다. 사용자, 실행 ID, 워크플로 ID, 타임스탬프, IP 주소, 적용 중인 마스킹 정책을 포함합니다. |
n8n.audit.execution.data.reveal_failure |
공개 시도를 거부할 때(예: 권한 부족으로 인해) n8n이 발생시키는 이벤트입니다. 위와 동일한 필드에 거부 사유가 추가됩니다. |
n8n.audit.redaction-enforcement.updated |
사용자가 인스턴스 수준 강제 적용 정책을 변경할 때 n8n이 발생시키는 이벤트입니다. 사용자와 변경 전후의 정책 값을 포함합니다. |
이 이벤트들은 기존 로그 스트리밍 대상(syslog, 웹훅, Sentry)과 통합되며, 컴플라이언스 보고와 접근 감사를 지원합니다.
권한 스코프#
실행 데이터 마스킹은 사용자 지정 프로젝트 역할을 통해 할당할 수 있는 다음 권한 스코프를 도입합니다.
| 스코프 | 목적 |
|---|---|
workflow:enableRedaction |
워크플로 설정에서 마스킹을 켤 수 있도록 허용합니다. 역할 구성 UI에서는 Enable data redaction으로 표시됩니다. |
workflow:disableRedaction |
워크플로 설정에서 마스킹을 끌 수 있도록 허용합니다. 역할 구성 UI에서는 Disable data redaction으로 표시됩니다. |
기본적으로 인스턴스 소유자, 관리자, 프로젝트 관리자는 마스킹을 켜고 끄거나 마스킹된 데이터를 공개할 수 있는 권한을 가지고 있습니다. 워크플로 작성자 등 더 많은 사용자에게 두 스코프 중 하나 또는 둘 다를 독립적으로 부여하는 사용자 지정 역할을 만들 수 있습니다.
마스킹이 다루지 않는 영역#
마스킹은 사용자가 실행을 볼 때 실행 데이터의 표시 여부를 제어합니다. 이는 백엔드 접근 제어가 아니며, 일부 데이터 경로는 마스킹 범위 밖에 있습니다. 컴플라이언스를 위해 마스킹을 검토할 때는 다음 제한 사항을 유념하세요.
- Code node의
console.log출력: Code node가console.log로 기록하는 데이터는 마스킹되지 않습니다. 수동 실행에서는 이 출력이 편집기의 Logs 패널에 나타납니다. 프로덕션 실행에서는 이 출력이 서버의 표준 출력(stdout)과 여기에 연결된 모든 로깅 인프라로 전달됩니다. - 노드 간에 흐르는 데이터: 마스킹은 다운스트림 노드가 수신하는 데이터를 제한하지 않습니다. 실행 중에는 데이터가 노드 간에 제한 없이 흐르므로, 워크플로의 어떤 노드든 실행 데이터를 외부 시스템으로 보낼 수 있습니다. 마스킹은 사용자가 실행 뷰어에서 보는 내용을 제어할 뿐, 워크플로 자체가 데이터로 무엇을 하는지는 제어하지 않습니다.
- 웹훅 응답: 워크플로가 호출자에게 반환하는 응답 본문(예: Respond to Webhook node나 노드의 respond 옵션을 통한)은 원본 데이터이며, 마스킹된 버전이 아닙니다.
- 아웃바운드 요청의 인증 헤더: 마스킹은 워크플로가 외부 서비스에 보내는 요청을 변경하지 않으며, 여기에 포함된 인증 헤더도 마찬가지입니다.
- 필드 수준 마스킹 불가: 마스킹은 노드의 전체 데이터 페이로드에 적용됩니다. 데이터 내 개별 필드에 대해서는 마스킹을 구성할 수 없습니다. 예외는 노드 작성자가 민감하다고 선언한 필드로, n8n은 이를 항상 마스킹합니다.
- 저장된 데이터는 그대로 유지: 마스킹은 데이터베이스에 저장된 실행 데이터를 암호화하거나 변경하지 않습니다. n8n은 API를 통해 데이터를 제공할 때 마스킹을 적용합니다. 데이터베이스에 직접 접근할 수 있는 사람은 누구나 원본 데이터를 읽을 수 있습니다.
- 강제 적용은 소스 컨트롤을 통해 전파되지 않음: 인스턴스 수준 강제 적용은 인스턴스 정책이며, 소스 컨트롤을 사용하여 워크플로를 푸시할 때 포함되지 않습니다. 강제 적용이 활성화된 인스턴스에서 강제 적용이 없는 인스턴스로 푸시된 워크플로는 대상 인스턴스에서 마스킹되지 않습니다. 이는 2단계 인증 강제 적용 등 다른 인스턴스 수준 정책의 동작과 동일합니다.
모범 사례#
적절한 마스킹 정책 선택#
| 시나리오 | 권장 설정 |
|---|---|
| 프로덕션에서 PII, 재무 데이터 또는 인증 토큰을 처리하는 워크플로 | 프로덕션 실행 데이터 마스킹 |
| 테스트 데이터조차 민감한 워크플로(예: 프로덕션 데이터의 사본을 사용하는 경우) | 프로덕션과 수동 실행 데이터 모두 마스킹 |
| 민감하지 않은 데이터를 처리하는 워크플로 또는 초기 개발 단계 | 마스킹 없음 |
일반 권장 사항#
- 프로덕션 마스킹부터 시작: 민감한 데이터를 다루는 대부분의 워크플로에서는, 프로덕션 실행을 마스킹하면서 수동 실행은 계속 표시하는 것이 보안과 디버깅 편의성 사이의 좋은 균형을 제공합니다.
- 필요할 때 수동 데이터도 마스킹: 테스트 환경에서 실제 데이터나 프로덕션에 준하는 데이터를 사용한다면, 수동 실행 마스킹도 함께 활성화하세요.
- 로그 스트리밍 사용: 공개 감사 이벤트를 캡처하려면 로그 스트리밍을 활성화하세요. 이는 컴플라이언스를 위한 감사 추적을 제공하고, 누가 민감한 실행 데이터에 접근했는지 모니터링할 수 있게 해줍니다.
- 워크플로 검토 시 마스킹 설정 검토: 특히 부서 간 데이터나 고객 대상 데이터를 다루는 워크플로의 경우, 마스킹 정책을 워크플로 검토 또는 승인 프로세스의 일부로 포함하세요.
보안 고려 사항#
- n8n은 API 수준에서 마스킹을 적용하며, 마스킹된 데이터를 브라우저로 전송하지 않습니다.
- 사용자 지정 노드를 생성할 때, 노드 유형 정의에서
sensitiveOutputFields를 사용하여 특정 출력 필드를 민감하다고 선언할 수 있습니다. n8n은 이러한 필드를 항상 마스킹하며, 공개 권한이 있는 사용자에게도 이를 노출하지 않습니다. - 마스킹 서비스가 노드의 유형 정의를 확인할 수 없는 경우(예: 커뮤니티 노드를 제거한 후), n8n은 해당 노드의 모든 출력 데이터를 완전히 마스킹합니다. 이러한 페일 클로즈드(fail-closed) 방식은 알 수 없는 노드가 민감한 필드를 노출하는 것을 방지합니다.
- 마스킹이 활성화되면, 실행 데이터는 로그 스트리밍과 로깅 출력에서도 자동으로 마스킹됩니다.