Zarządzanie Credentialami w N8N

Spis treści

1. Czym są credentiale w N8N?

2. Jak N8N przechowuje i szyfruje credentiale?

3. Typy credentiali — kompletny przegląd

4. Pierwsze kroki: tworzenie i edycja credentiali

5. OAuth2 — konfiguracja krok po kroku

6. Klucze API, tokeny Bearer i Basic Auth

7. Credentiale przez zmienne środowiskowe

8. Udostępnianie credentiali między użytkownikami

9. Bezpieczeństwo — najlepsze praktyki

10. Integracja z zewnętrznymi Vault

11. Debugowanie i rozwiązywanie problemów

12. Migracja credentiali między instancjami

13. FAQ — najczęściej zadawane pytania

14. Słownik pojęć

1. Czym są credentiale w N8N?

Credentiale w N8N to zaszyfrowane zestawy danych uwierzytelniających, które umożliwiają węzłom (nodes) bezpieczne łączenie się z zewnętrznymi usługami, API i systemami. Są fundamentem każdej automatyzacji — bez nich żaden workflow nie może komunikować się ze światem zewnętrznym.

N8N obsługuje ponad 400 predefiniowanych typów credentiali dla różnorodnych usług: od Google Workspace i Microsoft 365, przez Slack i Notion, po bazy danych PostgreSQL, systemy CRM jak Salesforce i HubSpot, bramki płatności, serwisy AI jak OpenAI i Anthropic, aż po własne REST API budowane przez programistów.

Bezpłatne warsztaty: Kali Linux od podstaw - fundament pracy pentestera

Naucz się instalacji i konfiguracji Kali Linux, pracy w terminalu, zarządzania uprawnieniami, budowy własnego laboratorium pentestowego oraz korzystania z narzędzi używanych przez specjalistów cyberbezpieczeństwa.

Odbierz dostęp do 13 maja do 23:59

Sprawdź szczegóły: https://asdevops.pl/warsztaty/

 

 

Kluczowe właściwości systemu credentiali N8N

  • Szyfrowanie AES-256-CBC — każdy credential jest szyfrowany przed zapisem do bazy danych. Bez klucza szyfrowania dane są niemożliwe do odczytania.
  • Maskowanie wartości — po zapisaniu credentiala N8N nigdy nie wyświetla jego wartości w postaci jawnej w interfejsie użytkownika.
  • Izolacja od logów — wartości credentiali nie pojawiają się w historii wykonań workflowu ani w logach systemowych.
  • Automatyczny refresh tokenów OAuth2 — N8N automatycznie odnawia wygasające tokeny bez interwencji użytkownika.
  • Współdzielenie z kontrolą dostępu — w trybie multi-user można precyzyjnie przydzielać dostęp do credentiali konkretnym użytkownikom lub projektom.
  • Reużywalność — jeden credential może być używany przez dowolną liczbę workflowów i węzłów jednocześnie.
Definicja. Credential w N8N to zaszyfrowany, bezpiecznie przechowywany zestaw danych autoryzacyjnych (klucz API, token OAuth2, login/hasło, connection string), który pozwala węzłom workflow łączyć się z zewnętrznymi usługami bez eksponowania wrażliwych danych w kodzie lub interfejsie. Credentials są centralnie zarządzane, mogą być współdzielone między użytkownikami i projektami, a ich bezpieczeństwo zapewnia szyfrowanie AES-256-CBC z kluczem przechowywanym w zmiennej środowiskowej N8N_ENCRYPTION_KEY.

Co może zawierać credential?

Zależnie od typu usługi, credential może przechowywać różne rodzaje danych:

Typ danychPrzykładyTypowe zastosowanie
Klucze APIsk-proj-…, Bearer tokenOpenAI, Stripe, Twilio, Airtable
OAuth2 tokenyaccess_token + refresh_tokenGoogle, Microsoft, Slack, GitHub
Login i hasłoadmin / P@ssw0rd!WordPress REST, Jenkins, JIRA Basic
Connection stringpostgresql://user:pass@host:5432/dbPostgreSQL, MySQL, MongoDB
Klucze SSHRSA/Ed25519 private keySSH do serwerów, SFTP, Git
Certyfikaty TLSPEM cert + private keyMutual TLS, własne PKI
Klucze AWSAccess Key ID + SecretS3, Lambda, SES, DynamoDB
Tokeny JWTeyJhbGci…Customowe API, wewnętrzne systemy

2. Jak N8N przechowuje i szyfruje credentiale?

Zrozumienie mechanizmu szyfrowania jest niezbędne dla każdego, kto zarządza N8N w środowisku produkcyjnym. N8N stosuje szyfrowanie symetryczne AES-256-CBC — standard bezpieczeństwa używany m.in. przez banki, rządy i największe firmy technologiczne na świecie.

Architektura szyfrowania krok po kroku

  1. Generowanie klucza szyfrowania — przy pierwszym uruchomieniu N8N automatycznie generuje 256-bitowy klucz losowy i zapisuje go jako zmienną środowiskową N8N_ENCRYPTION_KEY. W instalacjach self-hosted wartość ta jest widoczna w pliku .env lub konfiguracji Docker.
  2. Szyfrowanie przy zapisie — gdy użytkownik zapisuje credential (np. wpisuje klucz API), N8N szyfruje całość danych algorytmem AES-256-CBC używając N8N_ENCRYPTION_KEY jako klucza. Zaszyfrowany blob zapisywany jest do kolumny data w tabeli credentials_entity w bazie danych.
  3. Przechowywanie metadanych w jawnej postaci — nazwa credentiala (np. 'My Slack API’), typ (np. 'slackApi’) oraz lista węzłów mających dostęp są przechowywane w postaci jawnej. Tylko wartości sekretne są szyfrowane.
  4. Odszyfrowanie w pamięci RAM — podczas wykonywania workflowu N8N odszyfrowuje credential tymczasowo w pamięci RAM na czas wykonania węzła. Wartość nigdy nie trafia do logów ani historii.
  5. Automatyczne czyszczenie — po zakończeniu wykonywania węzła odszyfrowane wartości są usuwane z pamięci. N8N nie przechowuje odszyfrowanych secretów dłużej niż to konieczne.
KRYTYCZNE: Backup klucza szyfrowania N8N_ENCRYPTION_KEY to najważniejszy sekret w całej instalacji N8N. Utrata tego klucza oznacza TRWAŁĄ utratę dostępu do wszystkich zapisanych credentiali — nie ma możliwości ich odczytania bez oryginalnego klucza. Obowiązkowe działania:• Zapisz N8N_ENCRYPTION_KEY w bezpiecznym menedżerze haseł (1Password, Bitwarden, KeePass)• Przechowuj kopię w zewnętrznym Vault (HashiCorp Vault, AWS Secrets Manager)• Nigdy nie commituj klucza do repozytorium Git• Dokumentuj procedurę odtworzenia w Runbooku zespołu

Gdzie fizycznie przechowywane są credentiale?

Credentiale zapisywane są w bazie danych N8N w tabeli credentials_entity. N8N wspiera trzy silniki bazodanowe:

Silnik bazodanowyLokalizacja domyślnaŚrodowisko
SQLite (domyślny)~/.n8n/database.sqliteLokalny dev, małe instalacje
PostgreSQLKonfiguracja przez zmienne envProdukcja — rekomendowane
MySQL / MariaDBKonfiguracja przez zmienne envProdukcja — alternatywa

Struktura tabeli credentials_entity (schemat)

— Uproszczony schemat tabeli credentiali N8N

CREATE TABLE credentials_entity (

  id          VARCHAR(36)   PRIMARY KEY,   — UUID credentiala

  name        VARCHAR(128)  NOT NULL,       — np. 'My OpenAI API’ (jawne)

  type        VARCHAR(128)  NOT NULL,       — np. 'openAiApi’ (jawne)

  data        TEXT          NOT NULL,       — ZASZYFROWANY JSON (AES-256)

  nodesAccess JSON,                         — węzły z dostępem (jawne)

  createdAt   DATETIME      NOT NULL,

  updatedAt   DATETIME      NOT NULL

);

— Przykładowa zawartość kolumny 'data’ (po szyfrowaniu):

— 'U2FsdGVkX1+Abc123…XYZ==’ — nie da się odczytać bez klucza

3. Typy credentiali — kompletny przegląd

N8N oferuje bogaty ekosystem typów credentiali. Poniżej przedstawiamy kompletną systematyzację, która pomoże wybrać właściwy typ dla każdej integracji.

3.1 Typy generyczne (do użytku z dowolnym API)


Typ N8NGdzie klucz jest wysyłanyKiedy używać
 Niestandardowy nagłówek HTTP (np. X-API-Key)Większość REST API z kluczem w nagłówku
 Parametr URL (?api_key=…)Starsze API przekazujące klucz w URL
 Authorization: Bearer TOKENTokeny JWT, tokeny sesji, PAT
 Authorization: Basic base64(user:pass)WordPress, Jenkins, JIRA Basic Auth
 Nagłówek Digest AuthRzadkie; systemy wymagające Digest
 Bearer + automatyczny refreshDowolne API OAuth2 bez dedykowanego node
 Podpisane żądania OAuth1Twitter API v1, stare API OAuth

3.2 Popularne dedykowane typy credentiali


UsługaTyp credentialaWymagane daneUwagi
Google (Gmail, Drive, Sheets)googleOAuth2ApiClient ID, Client SecretOAuth2; wymaga aplikacji w Google Cloud Console
OpenAI / ChatGPTopenAiApiAPI KeyKlucz z platform.openai.com
Anthropic ClaudeanthropicApiAPI KeyKlucz z console.anthropic.com
SlackslackApi / slackOAuth2ApiBot Token lub OAuth2Bot token zaczyna się od xoxb-
GitHubgithubApiPersonal Access TokenPAT z odpowiednimi scope’ami
AirtableairtableTokenApiPersonal Access TokenZastąpił stary API Key
StripestripeApiSecret Key (sk_…)NIGDY nie używaj klucza publishable!
AWSawsAccess Key ID + SecretRekomendowane: dedykowane IAM user/role
PostgreSQLpostgresHost, Port, DB, User, PasswordUżywaj SSL dla połączeń prod
NotionnotionApiIntegration TokenToken zaczyna się od secret_
HubSpothubspotAppTokenPrivate App TokenBearer token z HubSpot Developer portal
SalesforcesalesforceOAuth2ApiConsumer Key + SecretOAuth2; Connected App w Salesforce

4. Pierwsze kroki: tworzenie i edycja credentiali

N8N oferuje trzy główne sposoby tworzenia credentiali, każdy dopasowany do innego scenariusza użycia.

Metoda 1: Bezpośrednio z węzła (najczęstsza)

Podczas konfigurowania nowego węzła N8N automatycznie pyta o credential. W rozwijalnym menu przy polu 'Credential to connect with’ wybierz '+ Create new credential’. N8N otworzy formularz dopasowany do wybranego węzła — np. dla węzła Gmail pojawi się formularz Google OAuth2.

Metoda 2: Panel Credentials (rekomendowana dla przygotowania)

W lewym menu bocznym kliknij Credentials Create credential. Wyszukaj usługę w pasku wyszukiwania (ponad 400 opcji) lub przewiń listę. Ta metoda jest zalecana, gdy chcesz przygotować credentiale zanim zaczniesz budować workflow — np. skonfigurować wszystkie połączenia z systemami klienta przed importem gotowych workflowów.


Metoda 3: API N8N (dla DevOps i CI/CD)

N8N udostępnia REST API pozwalające programistycznie zarządzać credentialami. Jest to niezbędne w środowiskach, gdzie wdrożenia są zautomatyzowane:

# Tworzenie credentiala przez REST API N8N

curl -X POST 'https://n8n.twojadomena.pl/api/v1/credentials’ \

  -H 'X-N8N-API-KEY: twoj-klucz-api-n8n’ \

  -H 'Content-Type: application/json’ \

  -d '{

    „name”: „OpenAI – Prod – Content”,

    „type”: „openAiApi”,

    „data”: {

      „apiKey”: „sk-proj-…”

    }

  }’

# Pobranie listy wszystkich credentiali

curl -X GET 'https://n8n.twojadomena.pl/api/v1/credentials’ \

  -H 'X-N8N-API-KEY: twoj-klucz-api-n8n’

Best Practice: Konwencja nazewnictwa credentiali. Dobra konwencja nazw credentiali ratuje czas przy zarządzaniu dziesiątkami integracji. Rekomendowany format:  [USŁUGA] – [ŚRODOWISKO] – [CEL/KONTEKST] Przykłady:  • OpenAI – Prod – Article Generation  • Google OAuth2 – Dev – Drive Backup  • PostgreSQL – Staging – Analytics DB  • Slack – Prod – Customer Alerts Bot Unikaj ogólnych nazw: 'API’, 'test’, 'nowy’ — po roku nie wiadomo, co kryją.

Testowanie credentiala

Większość typów credentiali zawiera przycisk ’Retry’ (lub 'Connect my account’ dla OAuth2). N8N wykonuje testowe zapytanie do API (np. listę dysków Google Drive, profil GitHub, listę workspace’ów Slack) i informuje o powodzeniu lub komunikacie błędu.



Zawsze testuj credential bezpośrednio po utworzeniu i po każdej rotacji klucza — zanim workflow zacznie używać go w produkcji.

Edycja istniejącego credentiala

Wejdź w Credentials → kliknij nazwę credentiala. Formularz edycji otwiera się z ukrytymi (zamaskowanymi) wartościami. Wpisz nowe wartości tylko w polach, które chcesz zmienić — pozostałe pola możesz zostawić puste, N8N zachowa ich poprzednie zaszyfrowane wartości.

Uwaga: pola haseł i kluczy API pokazują placeholder (np. '••••••••’), ale nie wyświetlają aktualnej wartości. Jest to celowe zachowanie bezpieczeństwa.

5. OAuth2 — konfiguracja krok po kroku

OAuth2 to najczęściej używany protokół autoryzacji w nowoczesnych API (Google, Microsoft 365, Slack, GitHub, Salesforce, Notion i setki innych). N8N implementuje pełny Authorization Code Flow z PKCE — najbezpieczniejszy wariant standardu.

Jak działa OAuth2 w N8N — przepływ autoryzacji

Rejestracja aplikacji OAuth u dostawcy — wejdź w panel deweloperski usługi (Google Cloud Console, Azure App Registration, Slack API, GitHub Developer Settings) i stwórz nową aplikację OAuth. Zapisz Client ID (Identyfikator klienta) i Client Secret (Tajny klucz klienta).


Ustawienie Redirect URI — w ustawieniach aplikacji OAuth wpisz dokładnie: https://twoja-instancja.n8n.io/rest/oauth2-credential/callback. URI musi być identyczny po obu stronach — każda różnica (nawet trailing slash) spowoduje błąd.


Konfiguracja credentiala w N8N — wybierz typ credentiala (np. 'Google OAuth2 API’), wpisz Client ID, Client Secret i zaznacz wymagane zakresy (scopes). Zapisz.


Autoryzacja jednorazowa — kliknij 'Connect my account’ / 'Sign in with Google’. N8N otworzy okno przeglądarki z ekranem zgody dostawcy. Zaloguj się i zatwierdź uprawnienia.


Automatyczne zarządzanie tokenami — N8N otrzymuje access token (krótkotrwały, np. 1h) i refresh token (długotrwały). Automatycznie monitoruje czas wygaśnięcia access tokenu i pobiera nowy za pomocą refresh tokenu — bez interwencji użytkownika.

Zasada minimalnych uprawnień dla OAuth2 (Principle of Least Privilege). Zawsze wybieraj tylko te zakresy (scopes), które są niezbędne dla konkretnego workflowu:   Zamiast:   https://www.googleapis.com/auth/gmail (pełny dostęp)  Użyj:      https://www.googleapis.com/auth/gmail.readonly (tylko odczyt)   Zamiast:   repo (pełny dostęp do repozytoriów GitHub)  Użyj:      repo:status, read:user (tylko to, co potrzebne) Zmniejsza to ryzyko w przypadku wycieku tokenu lub kompromitacji konta.

Przykład: Pełna konfiguracja Google OAuth2

// Konfiguracja credentiala Google OAuth2 API w N8N

// (reprezentacja JSON — eksport/import przez API)

{

  „name”: „Google OAuth2 – Prod – Workspace”,

  „type”: „googleOAuth2Api”,

  „data”: {

    „clientId”:     „123456789-abc.apps.googleusercontent.com”,

    „clientSecret”: „GOCSPX-twoj-secret”,  // zaszyfrowane po zapisie

    „scope”: [

      „https://www.googleapis.com/auth/gmail.readonly”,

      „https://www.googleapis.com/auth/drive”,

      „https://www.googleapis.com/auth/spreadsheets”

    ],

    „authUrl”:        „https://accounts.google.com/o/oauth2/v2/auth”,

    „accessTokenUrl”: „https://oauth2.googleapis.com/token”,

    „authentication”: „body”,

    „grantType”:      „authorizationCode”

  }

}

Generic OAuth2 — dla nieobsługiwanych usług

Gdy N8N nie posiada wbudowanego credentiala dla danej usługi, możesz użyć typu ’OAuth2 API’ (Generic). Wymaga ręcznego podania wszystkich parametrów:

  • Authorization URL — endpoint autoryzacji dostawcy
  • Access Token URL — endpoint wymiany kodu na token
  • Client ID i Client Secret — z aplikacji OAuth dostawcy
  • Scope — zakresy oddzielone spacją lub przecinkami
  • Auth URI Query Parameters — dodatkowe parametry (np. response_type=code, access_type=offline)

Rozwiązywanie problemów OAuth2

BłądPrzyczynaRozwiązanie
redirect_uri_mismatchRedirect URI w N8N ≠ URI w aplikacji OAuthSkopiuj URI z N8N (Settings > Credentials) i wklej dokładnie w aplikacji
invalid_clientBłędny Client ID lub Client SecretSprawdź czy Client Secret nie zawiera spacji na początku/końcu
invalid_grantWygasły refresh token lub zmienione hasłoKliknij 'Reconnect’ i przejdź ponownie przez OAuth flow
access_deniedUżytkownik odrzucił uprawnienia lub scope za szerokiSprawdź czy konto ma dostęp do żądanych zasobów
invalid_scopeNieprawidłowy lub niedostępny scopeSprawdź dokumentację API dostawcy dla właściwych wartości scope

6. Klucze API, tokeny Bearer i Basic Auth

Klucze API i tokeny są najprostszym i najszerzej stosowanym typem autoryzacji. W N8N obsługiwane są przez kilka generycznych typów credentiali oraz przez setki dedykowanych integracji.

Kiedy używać którego typu?

SytuacjaRekomendowany typPrzykład
API wymaga klucza w nagłówku X-API-KeyhttpHeaderAuthWiele SaaS API (Airtable legacy, Mailgun)
API wymaga klucza jako ?api_key= w URLhttpQueryAuthStarsze API, Google Maps (nie rekomendowane)
API używa Bearer tokenów JWThttpBearerAuthWewnętrzne API, Keycloak, Auth0
API używa loginu i hasła (Base64)httpBasicAuthWordPress /wp-json, Jenkins, Prometheus
Dedykowane API, np. OpenAIopenAiApi (dedykowany)Lepsze UX i walidacja pól

Konfiguracja HTTP Header Auth — przykład

// HTTP Header Auth — klucz API w niestandardowym nagłówku

{

  „name”: „My Custom API – Prod”,

  „type”: „httpHeaderAuth”,

  „data”: {

    „name”:  „X-API-Key”,        // nazwa nagłówka

    „value”: „my-secret-key-…” // wartość (AES-256 po zapisie)

  }

}

// Wynikowy nagłówek HTTP:

// X-API-Key: my-secret-key-…

KRYTYCZNY BŁĄD BEZPIECZEŃSTWA: Klucze w polach wyrażeń. NIGDY nie wpisuj kluczy API bezpośrednio w polach wyrażeń (expressions) węzłów! Złe podejście (NIEBEZPIECZNE):  Pole 'API Key’ > Expression: {{ „sk-proj-abc123xyz” }} Dlaczego to niebezpieczne:  • Klucz trafia do historii wykonań workflowu w postaci jawnej  • Klucz pojawia się w eksportach workflowu (JSON)  • Klucz może trafić do logów systemowych  • Klucz jest widoczny w debuggerze N8N Zawsze używaj mechanizmu Credentials lub zmiennych środowiskowych ($env)!

7. Credentiale przez zmienne środowiskowe

Zmienne środowiskowe to kluczowy mechanizm bezpiecznego wstrzykiwania sekretów do N8N z zewnątrz — bez twardego kodowania wartości. Są szczególnie ważne w środowiskach zarządzanych przez DevOps: Docker, Kubernetes, CI/CD pipeline.

N8N_ENCRYPTION_KEY — najważniejsza zmienna

# Generowanie bezpiecznego 32-bajtowego klucza (Linux/macOS)

openssl rand -hex 32

# Przykład: a1b2c3d4e5f6789012345678901234567890abcdef12345678abcdef12345678

# Plik .env (NIGDY nie commituj do Git!)

N8N_ENCRYPTION_KEY=a1b2c3d4e5f6789012345678901234567890abcdef12345678

# docker-compose.yml

services:

  n8n:

    image: n8nio/n8n:latest

    environment:

      – N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}

      – DB_TYPE=postgresdb

      – DB_POSTGRESDB_HOST=postgres

      – DB_POSTGRESDB_DATABASE=n8n

      – DB_POSTGRESDB_USER=${DB_USER}

      – DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}

    env_file:

      – .env

Używanie zmiennych środowiskowych w wyrażeniach

N8N pozwala odczytywać zmienne środowiskowe w wyrażeniach za pomocą obiektu $env. Wymaga to ustawienia N8N_BLOCK_ENV_ACCESS_IN_NODE=false (domyślna wartość dla self-hosted).

// W polach wyrażeń (expressions) węzłów:

{{ $env.OPENAI_API_KEY }}

{{ $env.DATABASE_URL }}

{{ $env.WEBHOOK_SECRET }}

// Przykład użycia w węźle HTTP Request:

// Header: Authorization

// Value: Bearer {{ $env.MY_SERVICE_TOKEN }}

Ważne: bezpieczeństwo $env w trybie multi-user. W instancjach N8N ze wspólnymi użytkownikami (tryb multi-user) dostęp do $env oznacza, że WSZYSCY użytkownicy z dostępem do edycji workflowów mogą odczytywać zmienne środowiskowe przez wyrażenia. Jeśli różni użytkownicy nie powinni widzieć Twoich sekretów:  • Ustaw N8N_BLOCK_ENV_ACCESS_IN_NODE=true  • Użyj dedykowanego Vault (sekcja 10)  • Stosuj oddzielne instancje N8N na środowisko (dev/prod)

Kubernetes Secrets — produkcyjna konfiguracja

# 1. Tworzenie Kubernetes Secret

kubectl create secret generic n8n-credentials \

  –from-literal=encryption-key=’TWOJ_KLUCZ_AES256′ \

  –from-literal=openai-api-key=’sk-proj-…’ \

  –from-literal=db-password=’super-secure-password’

# 2. Deployment manifest — przekazanie secretów jako ENV

apiVersion: apps/v1

kind: Deployment

spec:

  template:

    spec:

      containers:

      – name: n8n

        image: n8nio/n8n:latest

        env:

        – name: N8N_ENCRYPTION_KEY

          valueFrom:

            secretKeyRef:

              name: n8n-credentials

              key:  encryption-key

        – name: OPENAI_API_KEY

          valueFrom:

            secretKeyRef:

              name: n8n-credentials

              key:  openai-api-key

8. Udostępnianie credentiali między użytkownikami

W N8N w trybie multi-user (dostępnym w wersji Cloud i Enterprise, a od wersji 0.227+ w self-hosted) możliwe jest granularne zarządzanie dostępem do credentiali. To kluczowa funkcja dla zespołów.

Model uprawnień

RolaWidzi credentialEdytuje wartościUdostępniaUsuwa
Owner instancjiWszystkieWszystkieTakTak
AdminW swojej przestrzeniWłasne + udostępnioneTakWłasne
Member (właściciel credentiala)Własne + udostępnione jemuWłasneTak (własne)Własne
Member (dostęp współdzielony)Nazwa (nie wartości)NieNieNie

Jak udostępnić credential — instrukcja krok po kroku

  1. Otwórz panel Credentials w lewym menu.
  2. Kliknij w nazwę credentiala, który chcesz udostępnić.
  3. Przejdź do zakładki Sharing.
  4. Kliknij Add users i zacznij wpisywać adres e-mail użytkownika lub nazwę projektu.
  5. Zatwierdź przyciskiem Save. Użytkownik zobaczy credential na swojej liście (z zamaskowanymi wartościami).
Projekty N8N — rekomendowane podejście dla zespołów. Od N8N 1.0 dostępna jest funkcja Projektów. Credentiale można przypisywać do projektu zamiast do indywidualnych użytkowników:   • Utwórz projekt dla każdego klienta lub domeny biznesowej    (np. 'Klient ABC’, 'Automatyzacja Marketingu’, 'Finance Team’)  • Przypisz credentiale do projektu  • Wszyscy członkowie projektu automatycznie mają dostęp  • Zarządzanie uprawnieniami na poziomie projektu, nie per-użytkownik Jest to znacznie skalowalniejsze niż udostępnianie credential-po-credentialu.

9. Bezpieczeństwo — najlepsze praktyki

Bezpieczeństwo credentiali to nie tylko szyfrowanie w bazie danych — to cały zestaw praktyk obejmujący zarządzanie cyklem życia kluczy, kontrolę dostępu, monitoring i procedury awaryjne.

9.1 Zasada minimalnych uprawnień (Principle of Least Privilege)

Każdy credential powinien mieć absolutne minimum uprawnień. Konkretne zalecenia:

  • Bazy danych: twórz dedykowanych użytkowników DB z uprawnieniami tylko do konkretnych tabel i operacji (SELECT, INSERT — bez DROP, ALTER, CREATE)
  • AWS IAM: twórz dedykowane role IAM z politykami ograniczonymi do konkretnych zasobów (ARN) i akcji. Nigdy nie używaj root credentials lub AdministratorAccess
  • Google Service Accounts: twórz oddzielne Service Accounts dla różnych celów, nadawaj im minimalne role (np. roles/storage.objectViewer zamiast roles/storage.admin)
  • GitHub PAT: używaj fine-grained Personal Access Tokens (nie classic) z dostępem tylko do konkretnych repozytoriów i operacji
  • Slack Bot: podczas tworzenia aplikacji Slack zaznaczaj tylko te uprawnienia, które są niezbędne

9.2 Rotacja kluczy API

Regularna rotacja kluczy API jest najlepszą praktyką bezpieczeństwa. Rekomendowany harmonogram:

Kategoria ryzykaPrzykładyCzęstotliwość rotacji
Krytyczny (produkcja, dane wrażliwe)Klucze płatności, DB produkcyjne, PIICo 30–90 dni
Wysoki (produkcja, dane biznesowe)CRM, ERP, wewnętrzne API prodCo 90–180 dni
Średni (narzędzia, komunikacja)Slack, GitHub, NotionCo 6–12 miesięcy
Niski (dev/staging)Środowiska testowe, sandbox APICo rok lub przy zmianie zespołu
Natychmiastowa rotacja zawsze gdy:Podejrzenie wycieku, odejście pracownika, exploit APINatychmiast

9.3 Procedura rotacji klucza API w N8N

  1. Wygeneruj nowy klucz API w panelu usługi (np. OpenAI Platform, Stripe Dashboard)
  2. W N8N wejdź w Credentials → edytuj credential → wpisz nowy klucz
  3. Kliknij 'Test credential’ — upewnij się, że nowy klucz działa poprawnie
  4. Zapisz credential
  5. W panelu usługi unieważnij (revoke) stary klucz
  6. Sprawdź czy żaden działający workflow nie zgłasza błędów autoryzacji

9.4 Audyt credentiali — checklist

Przeprowadzaj audyt co najmniej raz na kwartał:

  • Sprawdź listę wszystkich credentiali — usuń nieużywane i zduplikowane
  • Zweryfikuj kto ma dostęp do których credentiali (panel Sharing)
  • Sprawdź daty ostatniej modyfikacji — stare credentiale mogą wymagać rotacji
  • Upewnij się, że każdy credential ma opisową nazwę (środowisko, usługa, cel)
  • Sprawdź czy odeszli pracownicy nie mają nadal dostępu do credentiali
  • Zweryfikuj logi N8N pod kątem błędów 401/403 — mogą wskazywać wygasłe klucze
  • Sprawdź czy N8N_ENCRYPTION_KEY jest bezpiecznie przechowywany i zbackupowany

9.5 Konfiguracja sieciowa dla bezpieczeństwa

# Zmienne środowiskowe wzmacniające bezpieczeństwo N8N

# Wymuszenie HTTPS (wymagane dla OAuth2 callback)

N8N_PROTOCOL=https

N8N_EDITOR_BASE_URL=https://n8n.twojadomena.pl

# Wyłączenie telemetrii i diagnostyki

N8N_DIAGNOSTICS_ENABLED=false

N8N_VERSION_NOTIFICATIONS_ENABLED=false

# Blokada dostępu do $env w workflowach (multi-tenant)

N8N_BLOCK_ENV_ACCESS_IN_NODE=true

# Ograniczenie dostępu do API zewnętrznych (allowlist)

N8N_ALLOW_ORIGIN=https://n8n.twojadomena.pl

# Timeout dla połączeń (zapobiega zawieszeniu)

N8N_DEFAULT_HTTP_REQUEST_TIMEOUT=300000

10. Integracja z zewnętrznymi Vault

W zaawansowanych środowiskach produkcyjnych warto zintegrować N8N z dedykowanymi systemami zarządzania sekretami (Secret Management Systems). Zapewniają one centralne zarządzanie, audyt dostępu, automatyczną rotację i ścieżkę audytu (audit trail).

Dostępne rozwiązania Vault

RozwiązanieProviderNajlepsze dla
HashiCorp VaultOpen-source / EnterpriseSelf-hosted, duże organizacje, pełna kontrola
AWS Secrets ManagerAmazon Web ServicesŚrodowiska AWS, automatyczna rotacja RDS
Azure Key VaultMicrosoft AzureŚrodowiska Azure, integracja z AD
Google Secret ManagerGoogle CloudŚrodowiska GCP, proste API
InfisicalOpen-source / CloudMniejsze zespoły, łatwa konfiguracja
DopplerSaaSSzybkie wdrożenie, dobre DevEx

Podejście 1: Vault → Zmienne środowiskowe → N8N

Najprostsze i najbardziej rekomendowane podejście: system wdrożeń pobiera sekrety z Vault i przekazuje je jako zmienne środowiskowe do kontenera N8N.

# External Secrets Operator (Kubernetes) — synchronizacja z HashiCorp Vault

apiVersion: external-secrets.io/v1beta1

kind: ExternalSecret

metadata:

  name: n8n-credentials

  namespace: n8n

spec:

  refreshInterval: 1h

  secretStoreRef:

    name:  vault-cluster-store

    kind:  ClusterSecretStore

  target:

    name: n8n-env-secrets

  data:

    – secretKey: N8N_ENCRYPTION_KEY

      remoteRef:

        key:      secret/n8n/prod

        property: encryption_key

    – secretKey: OPENAI_API_KEY

      remoteRef:

        key:      secret/n8n/prod

        property: openai_api_key

Podejście 2: Dynamiczne pobieranie z Vault w workflow

N8N może sam pobierać sekrety z Vault API w czasie wykonywania workflow, co pozwala na bardziej granularne zarządzanie:

// Węzeł HTTP Request — pobieranie sekretu z HashiCorp Vault

{

  „method”: „GET”,

  „url”: „https://vault.internal:8200/v1/secret/data/n8n/{{ $env.N8N_ENV }}”,

  „headers”: {

    „X-Vault-Token”: „{{ $env.VAULT_TOKEN }}”

  }

}

// Dostęp do odczytanego sekretu w kolejnym węźle:

// {{ $json.data.data.openai_api_key }}

11. Debugowanie i rozwiązywanie problemów

Problemy z credentialami są jedną z najczęstszych przyczyn błędów w N8N. Poniższy przewodnik pomoże szybko zdiagnozować i rozwiązać każdy problem.

Tabela diagnozowania błędów

Komunikat błęduPrzyczynaRozwiązanie
401 UnauthorizedZły klucz, wygasły token, brak nagłówka authPrzetestuj credential, zaktualizuj token OAuth2
403 ForbiddenPoprawne credentiale, brak uprawnień do zasobuSprawdź scopes OAuth2, uprawnienia konta API
Could not decrypt dataZmieniony N8N_ENCRYPTION_KEYPrzywróć oryginalny klucz z backupu
invalid_grant (OAuth2)Wygasły refresh token, zmienione hasłoKliknij 'Reconnect’ w credentialu
Credential not foundCredential usunięty lub brak dostępuSprawdź panel Credentials lub skontaktuj z właścicielem
ECONNREFUSEDSerwer DB niedostępny, zły host/portSprawdź host, port i reguły firewalla
redirect_uri_mismatchURI OAuth2 nie zgadzają sięSkopiuj URI z N8N Settings i wklej w aplikacji OAuth
SSL/TLS errorBrak certyfikatu lub self-signed certDodaj certyfikat CA lub ustaw rejectUnauthorized: false (dev only)

Komendy diagnostyczne

# Sprawdzenie czy N8N_ENCRYPTION_KEY jest ustawiony

docker exec -it n8n sh -c 'echo $N8N_ENCRYPTION_KEY | wc -c’

# Powinno zwrócić 65 (64 znaki hex + newline)

# Lista credentiali w bazie danych (tylko metadane, bez wartości)

docker exec -it n8n-postgres psql -U n8n -d n8n \

  -c „SELECT id, name, type, \”createdAt\” FROM credentials_entity ORDER BY \”createdAt\” DESC;”

# Logi N8N — filtrowanie błędów autoryzacji

docker logs n8n 2>&1 | grep -iE 'credential|auth|401|403|decrypt’ | tail -50

# Test połączenia z URL OAuth2 callback

curl -I 'https://n8n.twojadomena.pl/rest/oauth2-credential/callback’

# Oczekiwany wynik: HTTP/1.1 4xx (N8N oczekuje parametrów — to normalne)

12. Migracja credentiali między instancjami

Migracja credentiali między instancjami N8N (np. z dev na prod, przy zmianie serwera lub przy przejściu z SQLite na PostgreSQL) wymaga szczególnej ostrożności.

KRYTYCZNE: Szyfrowanie jest powiązane z kluczem. Zaszyfrowane credentiale w bazie danych są nierozłącznie powiązane z konkretnym N8N_ENCRYPTION_KEY. Skopiowanie tylko bazy danych na nową instancję NIE wystarczy.Nowa instancja musi używać IDENTYCZNEGO N8N_ENCRYPTION_KEY co stara instancja,aby móc odszyfrować i poprawnie odczytać credentiale.

Scenariusz A: Migracja z zachowaniem klucza

  1. Zrób backup bazy danych starej instancji (pg_dump, mysqldump lub skopiuj plik .sqlite)
  2. Skopiuj wartość N8N_ENCRYPTION_KEY ze starej instancji
  3. Przywróć bazę danych na nowym serwerze
  4. Ustaw identyczny N8N_ENCRYPTION_KEY na nowej instancji
  5. Uruchom nową instancję i sprawdź czy credentiale działają (przycisk Test)

Scenariusz B: Reset credentiali (nowy klucz)

Gdy nie możesz lub nie chcesz przenosić starego klucza (np. po incydencie bezpieczeństwa):

  1. Zrób listę wszystkich credentiali ze starej instancji (nazwy, typy, których usług dotyczą)
  2. Przygotuj listę wartości do ponownego wprowadzenia (klucze API, Client ID/Secret itp.) — zbierz je z oryginalnych źródeł, nie z N8N
  3. Uruchom nową instancję N8N z nowym, wygenerowanym kluczem
  4. Utwórz wszystkie credentiale od nowa
  5. Importuj workflow — N8N powiąże je z nowymi credentialami po nazwie
  6. Przetestuj wszystkie kluczowe workflow przed ostatecznym przełączeniem ruchu

13. FAQ — najczęściej zadawane pytania

Jak N8N szyfruje credentiale?

N8N stosuje algorytm AES-256-CBC. Kluczem szyfrowania jest wartość zmiennej środowiskowej N8N_ENCRYPTION_KEY. Wszystkie pola credentiala (klucze API, hasła, tokeny) są szyfrowane jako jeden JSON blob przed zapisem do bazy danych. Metadane (nazwa, typ) są przechowywane jawnie.

Czy N8N Cloud jest bezpieczniejszy niż self-hosted pod względem credentiali?

N8N Cloud zarządza kluczami szyfrowania i infrastrukturą zgodnie z najlepszymi praktykami (SOC 2 Type II, szyfrowanie at-rest i in-transit). Self-hosted daje pełną kontrolę, ale odpowiedzialność za bezpieczeństwo spada na Twój zespół. Obydwa mogą być równie bezpieczne przy właściwej konfiguracji.

Co zrobić gdy zgubiłem N8N_ENCRYPTION_KEY?

Bez oryginalnego klucza nie ma możliwości odczytania zaszyfrowanych credentiali. Musisz uruchomić N8N z nowym kluczem i ręcznie ponownie wprowadzić wszystkie credentiale. Stara baza danych jest bezużyteczna bez klucza — co jest zamierzoną cechą systemu bezpieczeństwa. Dlatego backup klucza jest krytyczny.

Czy mogę używać jednego credentiala w wielu workflowach?

Tak, to zalecana praktyka. Jeden credential może być używany przez dowolną liczbę workflowów. Zmiana klucza API wymaga tylko jednej aktualizacji w panelu Credentials — wszystkie workflow automatycznie używają nowej wartości.

Jak sprawdzić, które workflowy używają konkretnego credentiala?

W panelu Credentials kliknij credential — zobaczysz sekcję 'Workflows using this credential’. Możesz też zapytać bazę danych: SELECT DISTINCT workflowId FROM workflow_entity WHERE nodes::text LIKE '%CredentialName%’.

Jak zaktualizować wygasły token OAuth2?

N8N automatycznie odświeża tokeny używając refresh tokenu. Jeśli token wygasł (zmienione hasło, odwołane uprawnienia): Credentials → kliknij credential → 'Reconnect’ lub 'Connect my account’ → przejdź ponownie przez OAuth flow.

Czy credentiale są eksportowane razem z workflowami?

Nie. Funkcja eksportu workflowu (JSON) nie zawiera wartości credentiali — są one celowo usuwane ze względów bezpieczeństwa. Eksportowany plik zawiera tylko nazwy i typy credentiali, dzięki czemu workflow można importować do innej instancji i przypisać tam nowe credentiale.

Czy N8N obsługuje rotację kluczy szyfrowania (key rotation)?

N8N nie ma natywnej funkcji rotacji klucza szyfrowania (re-encryption). Zmiana N8N_ENCRYPTION_KEY wymaga manualnego procesu: eksport credentiali (przez API), reset bazy, import z nowym kluczem. Jest to rzadka operacja — rotacja klucza szyfrowania jest inna niż rotacja kluczy API.

14. Słownik pojęć

Krótki słownik terminów używanych w kontekście zarządzania credentialami w N8N.

TerminDefinicja
Credential (N8N)Zaszyfrowany, bezpiecznie przechowywany zestaw danych uwierzytelniających (klucz API, token OAuth2, login/hasło) umożliwiający węzłom N8N komunikację z zewnętrznymi usługami.
N8N_ENCRYPTION_KEYZmienna środowiskowa przechowująca 256-bitowy klucz AES używany do szyfrowania i deszyfrowania credentiali w N8N. Jej utrata oznacza trwałą utratę dostępu do credentiali.
AES-256-CBCStandard szyfrowania symetrycznego używany przez N8N. AES-256 oznacza klucz 256-bitowy; CBC to tryb łańcuchowania bloków. Uznawany za bezpieczny przez NIST i NSA.
OAuth2Protokół autoryzacji umożliwiający aplikacjom (N8N) dostęp do zasobów użytkownika w usługach (Google, Slack) bez przekazywania hasła. N8N implementuje Authorization Code Flow z PKCE.
Access TokenKrótkotrwały token (zwykle 1h–24h) OAuth2 używany do autoryzacji zapytań API. N8N automatycznie odświeża access tokeny przed ich wygaśnięciem.
Refresh TokenDługotrwały token OAuth2 używany do pobierania nowych access tokenów. Przechowywany zaszyfrowany w N8N; nigdy nie jest wysyłany bezpośrednio do API.
API KeyStatyczny sekretny ciąg znaków służący jako uwierzytelnienie do API. Prostszy niż OAuth2, ale bez mechanizmu automatycznego wygasania.
Bearer TokenToken przesyłany w nagłówku HTTP 'Authorization: Bearer TOKEN’. Może być kluczem API, JWT lub tokenem sesji.
Client ID / Client SecretPara identyfikatorów aplikacji OAuth2. Client ID jest publiczny; Client Secret jest prywatny i musi być chroniony (szyfrowany w N8N).
Scope (OAuth2)Zbiór uprawnień żądanych od dostawcy OAuth2. Zgodnie z zasadą minimalnych uprawnień należy żądać tylko tych scope’ów, które są faktycznie potrzebne.
Principle of Least PrivilegeZasada bezpieczeństwa: każdy podmiot (credential, użytkownik, serwis) powinien mieć tylko te uprawnienia, które są niezbędne do wykonania swojego zadania — i nic więcej.
Secret Manager / VaultDedykowany system zarządzania sekretami (np. HashiCorp Vault, AWS Secrets Manager) zapewniający centralne przechowywanie, audyt i rotację sekretów.
Key RotationProces regularnej wymiany kluczy kryptograficznych lub kluczy API na nowe, minimalizujący ryzyko wynikające z potencjalnego wycieku.

Bezpłatne warsztaty: Kali Linux od podstaw - fundament pracy pentestera

Naucz się instalacji i konfiguracji Kali Linux, pracy w terminalu, zarządzania uprawnieniami, budowy własnego laboratorium pentestowego oraz korzystania z narzędzi używanych przez specjalistów cyberbezpieczeństwa.

Odbierz dostęp do 13 maja do 23:59

Sprawdź szczegóły: https://asdevops.pl/warsztaty/

 

 

 

 

Bezpłatne szkolenie "Kali Linux od podstaw - fundament pracy pentestera"

X