使用舊日誌文件上的匿名 IP 配置 NGINX 以實現 GDPR(= RGPD、DSGVO)合規性
歐洲通用數據保護條例(GDPR) 旨在保護最終使用者的隱私。在許多其他後果中,系統管理員因此有義務以一種方式配置他們的系統,即他們不會在不必要的長時間內儲存 IP 地址,而不是未經同意等。這是因為 IP 地址被視為個人數據。
然而,根據 GDRP,有充分的理由不從一開始就匿名 IP 地址。例如,需要保護系統免受攻擊的手段(例如,為了保護數據庫中許多使用者的個人數據)。例如,如果您的系統目前受到攻擊,並且該攻擊源自一個特定的 IP 地址,您需要能夠阻止該 IP(可能只是暫時的)。您可能還希望能夠檢查攻擊何時開始,即來自該 IP 的那些錯誤請求何時開始。此外,您通常希望將日誌文件保留更長的時間,以便您可以分析它們(如果它們不包含個人數據,這完全可以)。
所以這些是相互競爭的利益。一個簡單的折衷辦法是在日誌文件中僅將原始 IP 地址儲存一小段時間,將舊日誌文件中的 IP 地址匿名化,並且——當然——將這些事實告知您的使用者/訪問者(在您的網站中)隱私聲明)。
**如何為這種符合 GDPR 的設置配置 NGINX,它不會從一開始就匿名所有 IP 地址?**有即時/直接匿名 IP 的討論和解決方案(例如這裡);但是我怎樣才能只為舊日誌文件設置匿名化?
警告:IANAL
人們可以輕鬆地設置這樣一種混合設置,以獲得非匿名的短期日誌和匿名的長期日誌。訣竅是讓 logrotate 輪換你的 NGINX 日誌,並在輪換過程中匿名化它們。這也將匿名化的(小)性能負擔從繁忙的網路伺服器轉移到了 logrotate 程序。
首先,您需要一個用於匿名訪問日誌文件的腳本。一種選擇是來自 Digitale Gesellschaft(前身為瑞士隱私基金會)的anonip.py 。使用這樣一個專用的外部工具比一個可以處理例如 IPv6 和 IPv4 地址等的 quick-n-dirty 自製腳本具有優勢。但是您當然也可以另外使用自己的腳本,例如也可以匿名化日誌文件中的其他部分(例如
userId
,您的 Web 應用程序的 URL 參數)。所以下載並安裝腳本:
cd /usr/local/bin wget https://raw.githubusercontent.com/DigitaleGesellschaft/Anonip/master/anonip.py chmod 755 anonip.py
然後創建或編輯您的
/etc/logrotate.d/nginx
文件,使其類似於以下內容:/var/log/nginx/*.log { weekly missingok rotate 52 maxage 365 compress delaycompress notifempty create 0640 www-data adm prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate /usr/sbin/invoke-rc.d nginx rotate >/dev/null 2>&1 ; /usr/local/bin/anonip.py < "$1".1 --output "$1".1.anon ; /bin/mv "$1".1.anon "$1".1 ; endscript }
這基本上所做的就是將匿名訪問日誌保留一周。每週一次,文件被輪換和匿名化。假設是,旋轉文件具有後綴
.1
. 它基本上保留了一年的匿名數據。當然,可以調整此設置以執行例如每日輪換等…