본문 바로가기
개인정보 (Privacy)

비밀번호 같은 민감한 데이터를 n8n 워크플로우에서 암호화 저장

by 날으는물고기 2025. 1. 5.

비밀번호 같은 민감한 데이터를 n8n 워크플로우에서 암호화 저장

n8n의 CLI(명령줄 인터페이스)는 n8n 에디터를 사용하지 않고도 다양한 작업을 수행할 수 있도록 해줍니다. CLI를 사용하면 워크플로우를 실행하거나, 워크플로우 및 자격 증명을 내보내고 가져오는 등의 작업을 할 수 있습니다. n8n의 CLI 명령어에 대한 기능들의 예시입니다.

CLI 명령어 실행 방법

n8n을 설치한 방법에 따라 CLI 명령어를 실행하는 방식이 달라집니다.

1. npm으로 설치한 경우

n8n을 npm으로 설치했다면, n8n 명령어를 바로 사용할 수 있습니다.

n8n [명령어] [옵션]

2. Docker로 설치한 경우

Docker 컨테이너 내에서 n8n 명령어를 실행해야 합니다.

docker exec -u node -it [컨테이너_이름] n8n [명령어] [옵션]

예를 들어, 컨테이너 이름이 n8n인 경우

docker exec -u node -it n8n n8n [명령어] [옵션]

주요 CLI 기능 및 사용 예시

1. 워크플로우 실행하기

저장된 워크플로우를 CLI를 통해 직접 실행할 수 있습니다.

n8n execute --id [워크플로우_ID]

ID가 5인 워크플로우를 실행하려면

n8n execute --id 5

2. 워크플로우의 활성 상태 변경하기

워크플로우의 활성 또는 비활성 상태를 CLI를 통해 변경할 수 있습니다. 주의할 점은 이 명령어는 n8n의 데이터베이스에 직접 영향을 미치므로, n8n 서버를 재시작해야 변경 사항이 적용됩니다.

  • 특정 워크플로우 활성화/비활성화
    n8n update:workflow --id=[워크플로우_ID] --active=[true/false]
  • 모든 워크플로우 활성화/비활성화
    n8n update:workflow --all --active=[true/false]

3. 워크플로우 및 자격 증명 내보내기

워크플로우와 자격 증명을 JSON 파일로 내보낼 수 있습니다.

  • --help: 도움말 표시
  • --all: 모든 워크플로우/자격 증명을 내보냅니다.
  • --id: 특정 워크플로우/자격 증명의 ID를 지정합니다.
  • --output: 출력 파일명 또는 디렉토리를 지정합니다.
  • --pretty: 출력된 JSON을 보기 쉽게 포매팅합니다.
  • --separate: 각 워크플로우/자격 증명을 별도의 파일로 내보냅니다.

 

워크플로우 내보내기

n8n export:workflow [옵션]

예시

  • 모든 워크플로우를 표준 출력(터미널)에 내보내기
    n8n export:workflow --all
  • ID가 4인 워크플로우를 workflow_4.json 파일로 내보내기
    n8n export:workflow --id=4 --output=workflow_4.json
  • 모든 워크플로우를 backups 디렉토리에 각각 별도의 파일로 내보내기
    n8n export:workflow --all --separate --output=./backups/

자격 증명 내보내기

n8n export:credentials [옵션]

예시

    • 모든 자격 증명을 표준 출력에 내보내기
      n8n export:credentials --all
    • ID가 2인 자격 증명을 credential_2.json 파일로 내보내기
      n8n export:credentials --id=2 --output=credential_2.json
    • 모든 자격 증명을 backups 디렉토리에 각각 별도의 파일로 내보내기
      n8n export:credentials --all --separate --output=./backups/
    • 모든 자격 증명을 평문으로 내보내기
      n8n export:credentials --all --decrypted --output=decrypted_credentials.json
      주의: --decrypted 옵션을 사용하면 민감한 정보가 평문으로 저장됩니다. 파일 관리에 각별히 유의하세요.

4. 워크플로우 및 자격 증명 가져오기

내보낸 워크플로우와 자격 증명을 n8n으로 가져올 수 있습니다.

 

워크플로우 가져오기

n8n import:workflow [옵션]

예시

  • workflow_4.json 파일에서 워크플로우 가져오기
    n8n import:workflow --input=workflow_4.json
  • backups 디렉토리의 모든 워크플로우 JSON 파일 가져오기
    n8n import:workflow --separate --input=./backups/

자격 증명 가져오기

n8n import:credentials [옵션]

예시

  • credential_2.json 파일에서 자격 증명 가져오기
    n8n import:credentials --input=credential_2.json
  • backups 디렉토리의 모든 자격 증명 JSON 파일 가져오기
    n8n import:credentials --separate --input=./backups/

가져오기 전에 기존 데이터베이스에 동일한 ID의 워크플로우나 자격 증명이 있는지 확인하세요.
중복될 경우 기존 데이터가 덮어쓰여질 수 있습니다.

5. 라이선스 관리

n8n의 라이선스 정보를 관리하고 확인할 수 있습니다.

 

라이선스 정보 보기

n8n license:info

라이선스 초기화

라이선스 정보를 제거하고 n8n을 기본 기능으로 재설정합니다.

n8n license:clear

6. 사용자 관리

사용자 관리 기능을 초기화하거나 MFA 설정을 변경할 수 있습니다.

 

사용자 관리 초기화

모든 사용자 계정을 삭제하고 사용자 관리를 초기 상태로 재설정합니다.

n8n user-management:reset

이 명령어를 실행하면 모든 사용자 계정이 삭제되므로, 반드시 필요한 경우에만 사용하세요.

 

특정 사용자의 MFA 비활성화

사용자가 MFA 복구 코드를 분실한 경우, 해당 사용자의 MFA를 비활성화할 수 있습니다.

n8n mfa:disable --email=사용자_이메일

7. LDAP 설정 초기화

LDAP 설정을 초기화하여 기본값으로 되돌립니다.

n8n ldap:reset

8. 보안 감사 실행

n8n 인스턴스에서 일반적인 보안 문제를 감지하기 위한 보안 감사를 실행할 수 있습니다.

n8n audit

추가 정보 및 주의사항

  • 명령어 도움말 보기: 각 명령어에 --help 옵션을 추가하여 사용 가능한 옵션과 사용법을 확인할 수 있습니다.
  • 백업 및 복원: 워크플로우와 자격 증명을 정기적으로 내보내어 백업해두는 것을 권장합니다.
  • 보안 고려사항: 내보낸 파일에는 민감한 정보가 포함될 수 있으므로, 파일의 저장 위치와 권한 설정에 주의하세요.
  • 서버 재시작 필요: 일부 명령어는 n8n 서버가 실행 중일 때는 적용되지 않을 수 있으므로, 변경 사항을 적용하려면 서버를 재시작해야 합니다.

 

n8n의 CLI 명령어는 워크플로우 실행, 내보내기 및 가져오기, 사용자 관리 등 다양한 기능을 제공합니다. 이를 통해 n8n을 보다 효율적으로 관리하고 자동화할 수 있습니다. n8n에서 비밀번호 같은 민감한 데이터를 워크플로우에 사용하기 위해 암호화하여 저장하고, 필요한 시점에 복호화하여 사용할 수 있습니다. 이 방법을 통해 데이터를 안전하게 다루면서도 워크플로우에서 활용할 수 있게 됩니다.

1. 암호화 라이브러리 설치

Node.js 환경에서는 crypto-js와 같은 암호화 라이브러리를 사용할 수 있습니다. 먼저 n8n이 설치된 환경에서 해당 라이브러리를 설치합니다.

npm install crypto-js

2. 암호화 및 복호화 함수 생성

crypto-js 라이브러리를 사용하여 암호화 및 복호화 함수를 작성할 수 있습니다. 비밀번호를 암호화한 값을 n8n의 크리덴셜에 저장하고, 워크플로우에서는 복호화하여 사용합니다.

 

암호화 예제

const CryptoJS = require("crypto-js");

// 암호화 함수
function encrypt(text, secretKey) {
    return CryptoJS.AES.encrypt(text, secretKey).toString();
}

// 복호화 함수
function decrypt(cipherText, secretKey) {
    const bytes = CryptoJS.AES.decrypt(cipherText, secretKey);
    return bytes.toString(CryptoJS.enc.Utf8);
}

여기서 secretKey는 복호화를 위해 사용되는 키이며, 안전하게 보관해야 합니다.

3. 암호화된 값 크리덴셜에 저장하기

n8n의 크리덴셜에 직접 비밀번호를 입력하기 전에, 암호화 함수를 사용하여 암호화된 문자열을 저장합니다. 예를 들어, 비밀번호가 myPassword이고 시크릿 키가 mySecretKey라면 다음과 같이 암호화된 값을 얻을 수 있습니다.

const encryptedPassword = encrypt("myPassword", "mySecretKey");
console.log(encryptedPassword); // 암호화된 비밀번호

이 값을 n8n의 크리덴셜에 저장합니다.

4. n8n 워크플로우에서 복호화하여 사용하기

워크플로우에서 복호화된 비밀번호를 사용하려면 Function 노드를 추가하여 복호화 코드를 실행한 후 필요한 곳에 입력합니다.

 

Function 노드 예제

  1. 워크플로우에서 Function 노드를 추가합니다.
  2. 다음 코드를 입력하여 크리덴셜에서 암호화된 비밀번호를 가져와 복호화합니다.
    const CryptoJS = require("crypto-js");
    
    // 복호화 함수
    function decrypt(cipherText, secretKey) {
        const bytes = CryptoJS.AES.decrypt(cipherText, secretKey);
        return bytes.toString(CryptoJS.enc.Utf8);
    }
    
    // 크리덴셜에서 암호화된 비밀번호 가져오기
    const encryptedPassword = $credentials.encryptedPassword; // 암호화된 비밀번호 크리덴셜 키
    const secretKey = "mySecretKey"; // 복호화 키 설정
    
    // 복호화된 비밀번호 반환
    return {
        decryptedPassword: decrypt(encryptedPassword, secretKey)
    };
  3. Function 노드의 결과를 필요에 따라 다른 노드에서 decryptedPassword로 참조하여 사용합니다.

주의 사항

  • 시크릿 키 보안: 시크릿 키는 민감한 정보이므로 안전하게 관리해야 합니다. 가능하면 환경 변수나 n8n의 크리덴셜에 별도로 저장하여 관리하는 것이 좋습니다.
  • 암호화 알고리즘: 필요에 따라 AES 이외의 암호화 알고리즘을 사용할 수 있습니다.

 

이 방식으로 n8n에서 비밀번호를 안전하게 관리할 수 있으며, 필요할 때 복호화하여 워크플로우에서 사용할 수 있습니다. n8n의 기본 기능만을 이용하여 크리덴셜에 비밀번호를 암호화한 상태로 저장하고, 워크플로우에서 복호화하여 사용하는 방법입니다. 외부 모듈이나 패키지 없이 JavaScript와 Base64 인코딩을 활용하는 방법입니다. Base64 인코딩은 완전한 보안 암호화는 아니지만, 단순한 데이터 은닉에는 유용합니다.

1. 비밀번호를 Base64로 인코딩하여 저장

비밀번호를 Base64로 인코딩하여 크리덴셜에 저장합니다. 예를 들어, 비밀번호가 myPassword라면 아래처럼 인코딩할 수 있습니다.

 

JavaScript 인코딩 예제

Buffer.from("myPassword").toString("base64");

위 코드를 실행하면 bXlQYXNzd29yZA==와 같은 문자열이 나옵니다. 이 값을 n8n의 크리덴셜에 비밀번호로 저장하세요.

2. n8n 워크플로우에서 Base64 디코딩하여 비밀번호 사용하기

워크플로우에서 Base64로 인코딩된 비밀번호를 디코딩하여 사용할 수 있습니다.

  1. Function 노드 추가: 워크플로우에서 Function 노드를 추가하여 Base64 디코딩을 수행합니다.
  2. Function 노드에 아래 코드 입력
    // 크리덴셜에서 Base64로 인코딩된 비밀번호 가져오기 const encodedPassword = $credentials.encodedPassword; // 크리덴셜 키 입력 // Base64 디코딩 const decodedPassword = Buffer.from(encodedPassword, "base64").toString("utf-8"); return { password: decodedPassword };
  3. Function 노드의 결과를 다른 노드에서 참조하여 사용할 수 있습니다. 여기서는 password라는 이름으로 디코딩된 비밀번호가 반환됩니다.

주의 사항

  • Base64 인코딩은 단순한 인코딩이므로, 강력한 암호화는 아닙니다. n8n에서 기본적으로 지원되는 방법으로는 Base64 정도의 방법을 사용할 수 있습니다.
  • 높은 보안이 필요한 환경이라면 추가적으로 외부 암호화 방식이나, 시크릿 키를 활용하는 방안을 고려하는 것이 좋습니다.

 

이 방법을 통해 기본 기능만으로도 비밀번호를 평문으로 직접 저장하지 않고, 디코딩하여 사용하는 워크플로우를 구성할 수 있습니다. n8n에서 {{ }} 표현식만으로 문자열을 변환하고 다시 원래 상태로 복원할 수 있는 방법으로 단순한 치환 방식을 사용할 수 있습니다. 다음은 기본 문자열 변환을 위해 JavaScript의 splitjoin을 활용하는 방법입니다. 예를 들어, 특정 문자 또는 패턴을 치환하여 문자열을 인코딩한 후, 다시 원래 상태로 복원할 수 있습니다.

문자 치환 방식으로 변환 및 복원하기

여기서는 예를 들어 모든 알파벳을 숫자로 변환하고, 다시 원본으로 복원하는 방법을 사용하겠습니다.

1. 문자 치환 변환 방식 (암호화)

  • 특정 문자를 다른 문자로 치환하여 {{ }} 표현식에서 문자열을 변경할 수 있습니다.
  • 예를 들어, "a""1"로, "b""2"로 치환하는 방식입니다.이 표현식은 각 문자의 유니코드에 10을 더해 숫자로 변환한 후, -로 연결하는 방식입니다. 예를 들어 "myPassword""119-121-80-97-115-115-119-111-114-100"으로 변환됩니다.
    {{ "myPassword".split('').map(char => char.charCodeAt(0) + 10).join('-') }}

2. 원본 복원 (복호화)

  • 반대로, 해당 치환된 값을 다시 복원할 때도 비슷한 map 방식으로 복호화할 수 있습니다.
  • 변환된 값 "119-121-80-97-115-115-119-111-114-100"을 복원하는 코드 예제는 다음과 같습니다.이 코드는 splitmap을 사용하여 -로 분리된 숫자에서 10을 빼고, 다시 문자를 결합하여 원본 문자열인 "myPassword"로 복원합니다.
    {{ "119-121-80-97-115-115-119-111-114-100".split('-').map(num => String.fromCharCode(num - 10)).join('') }}

 

이 방법을 통해 n8n에서 외부 패키지 없이 {{ }} 표현식만으로 문자열을 안전하게 변환하고, 다시 복원하여 사용할 수 있습니다.

728x90

댓글