完全指南:賬號與組織的審計、事件記錄與合規(guī)實踐)
后端文檔【免費下載鏈接】readthedocs.orgThe source code that powers readthedocs.org項目地址https://gitcode.com/gh_mirrors/re/readthedocs.org點擊查看免費下載安全日志Security Logs是 readthedocs.org 為賬號與組織提供的審計能力用于回顧最近發(fā)生在賬戶或組織內(nèi)的敏感操作例如登錄、登出、邀請發(fā)送與接受等是安全合規(guī)項目與日常賬戶自查的重要依據(jù)。本篇基于官方文檔 docs/user/security-log.rst 展開并結(jié)合 readthedocs.org 倉庫中的審計模塊源碼readthedocs/audit/深入講解其底層數(shù)據(jù)模型、事件觸發(fā)鏈路、過濾檢索與日志保留策略幫助讀者理解安全日志記什么、在哪看、如何查、保留多久同時掌握將該機制部署到自建實例時的關(guān)鍵配置項。安全日志是什么為賬號與組織建立的審計記錄安全日志允許你審計最近發(fā)生在個人組織或賬號中的活動。這一功能對許多安全合規(guī)項目來說相當(dāng)重要同時也能讓你隨時掌握自己賬號上正在發(fā)生的事情——這正是知道賬戶在發(fā)生什么所帶來的安心感。每條安全日志都會記錄發(fā)起事件的 IP 地址與所使用的瀏覽器User-Agent因此你可以據(jù)此確認某次訪問是否來自預(yù)期的人員與設(shè)備。在 readthedocs/audit/models.py 的模型文檔注釋中可以看到日志可以同時掛接到用戶user、項目project與組織organization三層對象上即便用戶、項目或組織后續(xù)被刪除日志本身仍會被保留并且可以通過log_user_*、log_project_*、log_organization_*等快照字段繼續(xù)追溯到被刪除對象的信息見 readthedocs/audit/models.py。誰能查看安全日志安全日志僅對**組織所有者organization owners**可見。如果你希望其他團隊成員也能查看可以通過邀請的方式將他們提升為組織所有者相關(guān)入口與權(quán)限模型可參考 readthedocs/organizations/views/private.py 中的 Owner 管理視圖。在權(quán)限實現(xiàn)層面用戶級與組織級的日志視圖都繼承自PrivateViewMixin見 readthedocs/profiles/views.py 與 readthedocs/organizations/views/private.py即只有登錄用戶才能訪問而組織級視圖通過OrganizationMixin與產(chǎn)品功能feature開關(guān)進一步約束可見性未啟用對應(yīng)功能時組織日志查詢會直接返回空集AuditLog.objects.none()見 readthedocs/organizations/views/private.py。用戶安全日志90 天內(nèi)的個人活動回溯平臺會為用戶保存最近 90 天的安全日志。這一日志有助于驗證近期是否發(fā)生過未經(jīng)授權(quán)的事件。關(guān)于90 天這個數(shù)值可以在源碼配置中找到依據(jù)RTD_AUDITLOGS_DEFAULT_RETENTION_DAYS 30 * 3即 90 天定義于 readthedocs/settings/base.py用戶日志視圖UserSecurityLogView直接使用該設(shè)置作為days_limit見 readthedocs/profiles/views.py頁面模板也會顯示 Showing logs from the last {{ days_limit }} days 的提示見 readthedocs/templates/profiles/private/security_log.html。此外視圖在計算起始日期時會取當(dāng)前時間減去 90 天與用戶注冊日期兩者中較晚者即日志回溯范圍不會早于用戶注冊時間見 readthedocs/profiles/views.py。用戶安全日志記錄以下事件在儀表盤dashboard上的身份認證在文檔頁面上的身份認證僅 Read the Docs Commercial 平臺即托管商業(yè)版發(fā)送、接受、撤銷或拒絕管理項目的邀請。其中認證失敗與認證成功都會被記錄。在界面中日志入口位于用戶名下拉菜單 -- Settings設(shè)置 -- Security Log安全日志組織安全日志面向企業(yè)計劃的組織級審計組織安全日志僅在Read the Docs Business計劃中可用見 docs/user/shared/admonition-rtd-business.rst 的說明。日志的存儲時長隨你的訂閱計劃而變化具體請以官方定價頁為準。組織安全日志是定期檢查組織是否發(fā)生未授權(quán)訪問的絕佳場所。組織日志記錄以下事件來自你組織的文檔頁面身份認證用戶訪問來自你組織的文檔頁面僅Enterprise 企業(yè)版計劃用戶下載來自你組織的文檔的可下載格式文件僅Enterprise 企業(yè)版計劃發(fā)送、撤銷或接受組織團隊成員team的邀請。同樣認證失敗與認證成功都會被記錄。在源碼中組織日志的頁面訪問PAGEVIEW與下載DOWNLOAD兩類動作被明確列入OrganizationSecurityLogFilter.allowed_actions而用戶級過濾器則不包含它們見 readthedocs/audit/filters.py這與文檔頁面訪問/下載僅出現(xiàn)在組織日志的描述完全一致。同時值得注意組織日志的過濾器中刻意排除了拒絕邀請INVITATION_DECLINED事件因為被拒絕邀請的用戶尚未真正成為組織成員組織所有者不應(yīng)看到這類信息代碼注釋見 readthedocs/audit/filters.py。在界面中組織日志入口位于用戶名下拉菜單 -- Organizations組織 -- 組織名稱 -- Settings設(shè)置 -- Security Log安全日志日志背后的數(shù)據(jù)模型AuditLog 記錄了哪些字段要真正理解安全日志的能力邊界有必要了解其底層存儲模型。核心模型AuditLog定義在 readthedocs/audit/models.py除了時間戳外主要字段包括字段類型/說明含義userForeignKey → UserSET_NULL觸發(fā)事件的用戶匿名用戶不記錄projectForeignKey → ProjectSET_NULL關(guān)聯(lián)的項目如頁面訪問、下載organizationForeignKey → OrganizationSET_NULL關(guān)聯(lián)的組織log_user_id/log_user_usernameIntegerField / CharField用戶被刪除后仍可追溯的用戶快照log_project_id/log_project_slugIntegerField / CharField項目被刪除后仍可追溯的項目快照log_organization_id/log_organization_slugIntegerField / CharField組織被刪除后仍可追溯的組織快照actionCharFieldchoices事件類型見下方動作清單auth_backendCharField認證后端標識如臨時訪問令牌等ipCharField事件來源 IP 地址browserCharField最長 250超長自動截斷瀏覽器 User-Agent 字符串resourceCharField最長 5500資源路徑如被訪問/下載的文檔路徑dataJSONField額外事件數(shù)據(jù)結(jié)構(gòu)隨日志類型而異AuditLog.save()會在保存時自動填充log_*快照字段并自動將project所屬的組織關(guān)聯(lián)到該日志見 readthedocs/audit/models.pybrowser字段若超過 250 字符會被截斷并追加- Truncated后綴見 readthedocs/audit/models.py。模型支持的動作類型CHOICES見 readthedocs/audit/models.py包括pageview頁面訪問download下載authentication認證成功authentication-failure認證失敗log-out登出invitation-sent邀請已發(fā)送invitation-revoked邀請已撤銷invitation-accepted邀請已接受invitation-declined邀請已拒絕日志如何自動采集 IP 與瀏覽器信息當(dāng)事件攜帶request對象時AuditLogManager.new()會自動從請求中提取并填充ip通過get_client_ip(request)、browserrequest.headers.get(User-Agent)、resourcerequest.path_info以及auth_backend通過get_auth_backend(request)見 readthedocs/audit/models.py。對于在子域名如文檔域名上產(chǎn)生的事件還會嘗試從request.unresolved_domain推斷并關(guān)聯(lián)項目。事件觸發(fā)鏈路登錄、登出與邀請是如何被記錄下來的登錄/登出/認證失敗Django 信號驅(qū)動認證類事件并非在各視圖內(nèi)手工編碼而是通過 Django 的信號機制統(tǒng)一捕獲user_logged_in→ 記錄authentication成功登錄見 readthedocs/audit/signals.pyuser_logged_out→ 記錄log-out登出僅在存在用戶時記錄見 readthedocs/audit/signals.pyuser_login_failed→ 記錄authentication-failure認證失敗并嘗試通過用戶名/郵箱匹配對應(yīng)用戶見 readthedocs/audit/signals.py。值得注意的是匿名用戶不會被寫入日志user.is_anonymous時置為None見 readthedocs/audit/models.py而認證失敗事件即使匹配不到具體用戶也會以log_user_username記錄嘗試使用的用戶名。邀請事件模型與視圖協(xié)同寫入邀請相關(guān)的四類事件發(fā)送/接受/撤銷/拒絕由邀請模塊生成邀請創(chuàng)建成功時記錄invitation-sent見 readthedocs/invitations/models.py邀請接受時記錄invitation-accepted見 readthedocs/invitations/models.py邀請撤銷時記錄invitation-revoked見 readthedocs/invitations/views.py邀請拒絕時記錄invitation-declined見 readthedocs/invitations/views.py。對應(yīng)行為在 readthedocs/invitations/tests/test_views.py 中有著大量測試用例覆蓋例如斷言發(fā)送、接受、拒絕等動作后AuditLog中相應(yīng) action 的記錄數(shù)量。過濾與檢索如何在海量日志中快速定位問題安全日志頁面支持按多個維度過濾底層由django-filter的FilterSet實現(xiàn)。用戶級過濾器UserSecurityLogFilterreadthedocs/audit/filters.py支持IP?ipaddress精確匹配項目?projectslug按項目 slug 精確匹配對應(yīng)log_project_slug動作類型?actionaction可選值限定在用戶日志允許的動作集合內(nèi)非法值會被忽略日期范圍?dateyyyy-mm-dd或?date_after...date_before...形式DateFromToRangeFilter。組織級過濾器OrganizationSecurityLogFilterreadthedocs/audit/filters.py在用戶級基礎(chǔ)上額外支持?userusername按log_user_username精確匹配并加入pageview與download兩類動作。測試用例 readthedocs/rtd_tests/tests/test_profile_views.py 驗證了這些過濾行為例如默認只顯示當(dāng)前用戶的authentication/authentication-failure/log-out等事件按?project與?ip過濾可得到對應(yīng)子集非法的 IP/項目值返回空結(jié)果非法的 action 值則被忽略。日志保留策略與自動清理個人用戶的日志默認保留 90 天清理工作由一個 Celery 定時任務(wù)完成delete_old_personal_audit_logsreadthedocs/audit/tasks.py運行在web隊列上刪除所有滿足以下條件的日志log_organization_id為空即與組織無關(guān)的個人日志created時間早于當(dāng)前時間 - RTD_AUDITLOGS_DEFAULT_RETENTION_DAYS默認 90 天。從代碼注釋可以確認readthedocs/audit/tasks.py組織相關(guān)的日志刪除由商業(yè)版.com按訂閱計劃另行處理因此組織日志的實際保留長度由你的訂閱計劃決定這與文檔中的描述一致。導(dǎo)出與自助服務(wù)將安全日志下載為 CSV用戶級與組織級的日志頁面都提供 CSV 導(dǎo)出能力頁面上的 Download 按鈕以?downloadtrue觸發(fā)視圖的_get_csv_data()方法見 readthedocs/profiles/views.py 與 readthedocs/organizations/views/private.py。導(dǎo)出的 CSV 包含以下列組織日志額外多出Resource列Date (時區(qū))、User、Project、Organization、Action、Resource僅組織、IP、Browser、Extra data文件名會按導(dǎo)出主體與時間范圍自動生成例如readthedocs_user_security_logs_username_start_end.csv與readthedocs_organization_security_logs_organization_start_end.csv見 readthedocs/profiles/views.py 與 readthedocs/organizations/views/private.py。若當(dāng)前篩選器指定了日期范圍導(dǎo)出區(qū)間也會隨之調(diào)整。這對于安全審計留檔、合規(guī)取證非常實用。使用建議與延伸閱讀綜合官方文檔與源碼實現(xiàn)給出以下實踐建議定期自查個人用戶可每月進入Settings -- Security Log檢查是否存在陌生 IP 或異常時段的登錄記錄組織所有者則應(yīng)定期查看組織日志確認文檔訪問與邀請操作均來自預(yù)期人員。善用過濾與導(dǎo)出在調(diào)查具體事件時優(yōu)先使用 IP、項目、用戶與日期范圍組合過濾需要歸檔時使用 CSV 導(dǎo)出注意導(dǎo)出文件遵循當(dāng)前篩選的日期區(qū)間。留意計劃差異個人用戶日志固定 90 天組織日志保留時長取決于訂閱計劃頁面訪問與下載類事件僅出現(xiàn)在 Enterprise 企業(yè)版計劃中。自建實例調(diào)整保留期部署 readthedocs.org 源碼時可通過設(shè)置RTD_AUDITLOGS_DEFAULT_RETENTION_DAYS默認30 * 3見 readthedocs/settings/base.py調(diào)整個人日志的保留天數(shù)并由delete_old_personal_audit_logs定時任務(wù)執(zhí)行清理。如果你有希望安全日志額外捕獲的信息可以隨時聯(lián)系官方支持團隊反饋docs/user/support.rst。延伸閱讀平臺安全策略Security policyRead the Docs 如何處理安全的總體信息安全說明Security平臺自身安全信息、個人數(shù)據(jù)處理方式以及如何報告安全問題商業(yè)組織功能Commercial商業(yè)版組織的相關(guān)能力說明。贊分享后端文檔【免費下載鏈接】readthedocs.orgThe source code that powers readthedocs.org項目地址https://gitcode.com/gh_mirrors/re/readthedocs.org點擊查看免費下載相關(guān)推薦pingora審計日志安全事件記錄與合規(guī)性要求pingora審計日志安全事件記錄與合規(guī)性要求 引言為什么審計日志對現(xiàn)代網(wǎng)絡(luò)服務(wù)至關(guān)重要 在當(dāng)今數(shù)字化時代網(wǎng)絡(luò)服務(wù)面臨著日益復(fù)雜的安全威脅和嚴格的合規(guī)要求后端網(wǎng)絡(luò)負載均衡API網(wǎng)關(guān)RDCMan專業(yè)級遠程桌面連接管理器的深度技術(shù)解析RDCMan專業(yè)級遠程桌面連接管理器的深度技術(shù)解析 RDCMan作為微軟官方推出的遠程桌面連接管理器為IT專業(yè)人員提供了集中管理多個RDP會話的高效解決方案后端認證鑒權(quán)終極Python艦船配裝工具5分鐘掌握Pyfa高效配裝技巧終極Python艦船配裝工具5分鐘掌握Pyfa高效配裝技巧 Pyfa是一款專為EVE Online玩家設(shè)計的開源Python艦船配裝助手讓您無需登錄游戲即可桌面應(yīng)用上一篇從入門到精通nvim-luapad命令與API完全手冊下一篇KindleEar故障排除常見問題及解決方案大全創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考