nordabiz/docs/architecture/diagrams/b6-data-security.drawio

164 lines
15 KiB
Plaintext

<mxfile host="draw.io" modified="2026-02-12" agent="Claude Code" type="device">
<diagram id="b6-security" name="Bezpieczeństwo Danych">
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="NordaBiz — Bezpieczeństwo Danych" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=22;fontStyle=1;fontColor=#1a1a2e;" vertex="1" parent="1">
<mxGeometry x="460" y="15" width="460" height="36" as="geometry"/>
</mxCell>
<mxCell id="subtitle" value="Jak chronimy dane firm i użytkowników platformy" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#888;" vertex="1" parent="1">
<mxGeometry x="510" y="48" width="340" height="20" as="geometry"/>
</mxCell>
<!-- WARSTWA 1: SZYFROWANIE -->
<mxCell id="layer1_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;shadow=1;" vertex="1" parent="1">
<mxGeometry x="40" y="90" width="340" height="180" as="geometry"/>
</mxCell>
<mxCell id="layer1_icon" value="&#x1F512;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=36;" vertex="1" parent="1">
<mxGeometry x="175" y="92" width="50" height="48" as="geometry"/>
</mxCell>
<mxCell id="layer1_title" value="&lt;b style=&quot;font-size:15px&quot;&gt;Szyfrowanie&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="145" y="136" width="120" height="24" as="geometry"/>
</mxCell>
<mxCell id="l1_d1" value="&#x2705; SSL/TLS (Let's Encrypt)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="60" y="165" width="190" height="22" as="geometry"/>
</mxCell>
<mxCell id="l1_d2" value="&#x2705; HTTPS na wszystkich stronach" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="60" y="190" width="240" height="22" as="geometry"/>
</mxCell>
<mxCell id="l1_d3" value="&#x2705; Hasła hashowane (bcrypt)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="60" y="215" width="210" height="22" as="geometry"/>
</mxCell>
<!-- WARSTWA 2: OCHRONA PRZED ATAKAMI -->
<mxCell id="layer2_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;shadow=1;" vertex="1" parent="1">
<mxGeometry x="420" y="90" width="340" height="180" as="geometry"/>
</mxCell>
<mxCell id="layer2_icon" value="&#x1F6E1;&#xFE0F;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=36;" vertex="1" parent="1">
<mxGeometry x="555" y="92" width="50" height="48" as="geometry"/>
</mxCell>
<mxCell id="layer2_title" value="&lt;b style=&quot;font-size:15px&quot;&gt;Ochrona przed atakami&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="480" y="136" width="210" height="24" as="geometry"/>
</mxCell>
<mxCell id="l2_d1" value="&#x2705; Zapora sieciowa (FortiGate-500D)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="440" y="165" width="260" height="22" as="geometry"/>
</mxCell>
<mxCell id="l2_d2" value="&#x2705; Ochrona CSRF (Cross-Site Request Forgery)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="440" y="190" width="310" height="22" as="geometry"/>
</mxCell>
<mxCell id="l2_d3" value="&#x2705; Limit zapytań: 200/dzień, 50/godz." style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="440" y="215" width="260" height="22" as="geometry"/>
</mxCell>
<!-- WARSTWA 3: KONTROLA DOSTĘPU -->
<mxCell id="layer3_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;shadow=1;" vertex="1" parent="1">
<mxGeometry x="800" y="90" width="340" height="180" as="geometry"/>
</mxCell>
<mxCell id="layer3_icon" value="&#x1F511;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=36;" vertex="1" parent="1">
<mxGeometry x="935" y="92" width="50" height="48" as="geometry"/>
</mxCell>
<mxCell id="layer3_title" value="&lt;b style=&quot;font-size:15px&quot;&gt;Kontrola dostępu&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="880" y="136" width="170" height="24" as="geometry"/>
</mxCell>
<mxCell id="l3_d1" value="&#x2705; System logowania (Flask-Login)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="820" y="165" width="250" height="22" as="geometry"/>
</mxCell>
<mxCell id="l3_d2" value="&#x2705; Role i uprawnienia (RBAC)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="820" y="190" width="220" height="22" as="geometry"/>
</mxCell>
<mxCell id="l3_d3" value="&#x2705; OAuth 2.0 (Google, Meta)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="820" y="215" width="210" height="22" as="geometry"/>
</mxCell>
<!-- WARSTWA 4: KOPIE ZAPASOWE -->
<mxCell id="layer4_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;shadow=1;" vertex="1" parent="1">
<mxGeometry x="1180" y="90" width="340" height="180" as="geometry"/>
</mxCell>
<mxCell id="layer4_icon" value="&#x1F4BE;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=36;" vertex="1" parent="1">
<mxGeometry x="1315" y="92" width="50" height="48" as="geometry"/>
</mxCell>
<mxCell id="layer4_title" value="&lt;b style=&quot;font-size:15px&quot;&gt;Kopie zapasowe&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="1270" y="136" width="150" height="24" as="geometry"/>
</mxCell>
<mxCell id="l4_d1" value="&#x2705; Backup bazy co godzinę" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="1200" y="165" width="200" height="22" as="geometry"/>
</mxCell>
<mxCell id="l4_d2" value="&#x2705; Pełny backup codziennie" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="1200" y="190" width="200" height="22" as="geometry"/>
</mxCell>
<mxCell id="l4_d3" value="&#x2705; Synchronizacja z Proxmox Backup" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="1200" y="215" width="270" height="22" as="geometry"/>
</mxCell>
<!-- WARSTWA 5: PRYWATNOŚĆ -->
<mxCell id="layer5_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;shadow=1;" vertex="1" parent="1">
<mxGeometry x="230" y="310" width="340" height="180" as="geometry"/>
</mxCell>
<mxCell id="layer5_icon" value="&#x1F464;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=36;" vertex="1" parent="1">
<mxGeometry x="365" y="312" width="50" height="48" as="geometry"/>
</mxCell>
<mxCell id="layer5_title" value="&lt;b style=&quot;font-size:15px&quot;&gt;Prywatność (RODO)&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#9673a6;" vertex="1" parent="1">
<mxGeometry x="310" y="356" width="190" height="24" as="geometry"/>
</mxCell>
<mxCell id="l5_d1" value="&#x2705; Maskowanie danych osobowych (PII)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="250" y="385" width="270" height="22" as="geometry"/>
</mxCell>
<mxCell id="l5_d2" value="&#x2705; Dane wrażliwe tylko dla zalogowanych" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="250" y="410" width="280" height="22" as="geometry"/>
</mxCell>
<mxCell id="l5_d3" value="&#x2705; Klucze API w zmiennych środowiskowych" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="250" y="435" width="290" height="22" as="geometry"/>
</mxCell>
<!-- WARSTWA 6: INFRASTRUKTURA -->
<mxCell id="layer6_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;shadow=1;" vertex="1" parent="1">
<mxGeometry x="610" y="310" width="340" height="180" as="geometry"/>
</mxCell>
<mxCell id="layer6_icon" value="&#x1F3D7;&#xFE0F;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=36;" vertex="1" parent="1">
<mxGeometry x="745" y="312" width="50" height="48" as="geometry"/>
</mxCell>
<mxCell id="layer6_title" value="&lt;b style=&quot;font-size:15px&quot;&gt;Infrastruktura&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#1565C0;" vertex="1" parent="1">
<mxGeometry x="710" y="356" width="140" height="24" as="geometry"/>
</mxCell>
<mxCell id="l6_d1" value="&#x2705; Serwer w Polsce (prywatna serwerownia)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="630" y="385" width="290" height="22" as="geometry"/>
</mxCell>
<mxCell id="l6_d2" value="&#x2705; Reverse proxy z SSL terminacją" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="630" y="410" width="250" height="22" as="geometry"/>
</mxCell>
<mxCell id="l6_d3" value="&#x2705; Środowisko testowe (staging)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="630" y="435" width="240" height="22" as="geometry"/>
</mxCell>
<!-- WARSTWA 7: MONITORING -->
<mxCell id="layer7_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF8E1;strokeColor=#F57F17;shadow=1;" vertex="1" parent="1">
<mxGeometry x="990" y="310" width="340" height="180" as="geometry"/>
</mxCell>
<mxCell id="layer7_icon" value="&#x1F440;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=36;" vertex="1" parent="1">
<mxGeometry x="1125" y="312" width="50" height="48" as="geometry"/>
</mxCell>
<mxCell id="layer7_title" value="&lt;b style=&quot;font-size:15px&quot;&gt;Monitoring&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F57F17;" vertex="1" parent="1">
<mxGeometry x="1100" y="356" width="110" height="24" as="geometry"/>
</mxCell>
<mxCell id="l7_d1" value="&#x2705; Panel bezpieczeństwa (/admin/security)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="1010" y="385" width="290" height="22" as="geometry"/>
</mxCell>
<mxCell id="l7_d2" value="&#x2705; Logi aktywności i logowań" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="1010" y="410" width="210" height="22" as="geometry"/>
</mxCell>
<mxCell id="l7_d3" value="&#x2705; Health check automatyczny" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
<mxGeometry x="1010" y="435" width="220" height="22" as="geometry"/>
</mxCell>
<!-- PODSUMOWANIE -->
<mxCell id="summary" value="&lt;font style=&quot;font-size:12px&quot;&gt;&lt;b&gt;7 warstw ochrony&lt;/b&gt; — od szyfrowania komunikacji, przez kontrolę dostępu, po codzienne kopie zapasowe i monitoring&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a1a2e;strokeColor=#1a1a2e;fontColor=#fff;shadow=1;align=center;" vertex="1" parent="1">
<mxGeometry x="350" y="530" width="680" height="40" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>