✨ 稽核記錄
身為 Proxy 管理員,您可以檢查某個實體(金鑰、團隊、使用者、模型)是否以及何時被建立、更新、刪除或重新產生,以及是誰執行了該動作。這對於稽核與法規遵循很有用。
LiteLLM 會追蹤以下實體與動作的變更:
- 實體: 金鑰、團隊、使用者、模型
- 動作: 建立、更新、刪除、重新產生
用法
1. 開啟稽核記錄
使用企業授權時,稽核記錄預設為開啟,因此無須設定。其他方案,或如果您想明確指定,請將 store_audit_logs 加入您的 litellm config.yaml,然後啟動 proxy
litellm_settings:
store_audit_logs: true
若要在企業授權上關閉稽核記錄,請將其明確設定為 false,這會優先於預設值。LITELLM_STORE_AUDIT_LOGS 的作用方式與設定值相同,且會在 config 保持 store_audit_logs 未設定時讀取
litellm_settings:
store_audit_logs: false
2. 對某個實體進行變更
在此範例中,我們將刪除一個金鑰。
curl -X POST 'http://0.0.0.0:4000/key/delete' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"key": "d5265fc73296c8fea819b4525590c99beab8c707e465afdf60dab57e1fa145e4"
}'
3. 在 LiteLLM UI 上檢視稽核記錄
在 LiteLLM UI 中,前往 Logs -> Audit Logs。您應該會看到該金鑰刪除的稽核記錄。
將稽核記錄匯出到外部儲存體
除了將稽核記錄儲存在資料庫中之外,您也可以將其匯出到外部儲存後端(例如 S3)。記錄會批次處理並非同步上傳,因此不會阻塞您的 proxy 請求。
S3 範例
將 audit_log_callbacks 和 s3_callback_params 加到您的 litellm_settings:
litellm_settings:
store_audit_logs: true
audit_log_callbacks: ["s3_v2"]
s3_callback_params:
s3_bucket_name: my-audit-logs-bucket # AWS Bucket Name
s3_region_name: us-west-2 # AWS Region
s3_aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
s3_aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
s3_path: litellm-audit # [OPTIONAL] prefix path in the bucket
稽核記錄會以 JSON 檔案寫入至:
s3://<bucket>/audit_logs/<YYYY-MM-DD>/<HH-MM-SS>_<audit-log-id>.json
# or, when s3_path is set:
s3://<bucket>/<s3_path>/audit_logs/<YYYY-MM-DD>/<HH-MM-SS>_<audit-log-id>.json
audit_log_callbacks 只有在啟用稽核記錄時才會觸發,而這在企業授權下是預設值,否則需要 store_audit_logs: true。
將稽核記錄傳送到不同的 S3 儲存桶
如果您也透過 callbacks: ["s3_v2"] 將一般請求/回應記錄傳送到 S3,預設情況下兩個串流會共用 s3_callback_params 並落在同一個儲存桶中。若要將稽核記錄傳送到不同的儲存桶(例如僅供法遵使用、具有更嚴格存取控制或更長保留期限的儲存桶),請新增一個 s3_audit_callback_params 區塊。它接受與 s3_callback_params 相同的欄位,且只適用於稽核記錄。
litellm_settings:
store_audit_logs: true
callbacks: ["s3_v2"] # normal request logs
audit_log_callbacks: ["s3_v2"] # audit logs
s3_callback_params: # used for normal logs
s3_bucket_name: my-llm-logs-bucket
s3_region_name: us-west-2
s3_aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
s3_aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
s3_path: litellm-logs
s3_audit_callback_params: # used for audit logs only
s3_bucket_name: my-audit-logs-bucket
s3_region_name: us-east-1 # different region OK
s3_aws_access_key_id: os.environ/AWS_AUDIT_ACCESS_KEY_ID # different creds OK
s3_aws_secret_access_key: os.environ/AWS_AUDIT_SECRET_ACCESS_KEY
s3_path: litellm-audit
進階
對使用者的屬性管理變更
代表某位使用者呼叫管理端點,並讓稽核記錄將變更歸屬於該使用者,而不是呼叫 key 的 user_id。(在將 proxy 連接到您的開發平台時很有用)。
在 v1.84.0 之前,LiteLLM-Changed-By 標頭會無條件生效,任何呼叫者都能重寫稽核歸屬。自 v1.84.0 起,除非呼叫 key,或其 team,的 metadata 中有 allow_litellm_changed_by_header: true,否則 proxy 會忽略該標頭;若未選擇加入,changed_by 會回退到呼叫 key 的 user_id。master key 無法選擇加入,因為它沒有儲存的 metadata,因此請搭配 admin virtual key 傳送該標頭
1. 允許您的 admin key 設定標頭
在將傳送該標頭之 admin virtual key 的 metadata 中設定 allow_litellm_changed_by_header: true。改為在該 key 的 team metadata 上設定,則會讓該 team 上的每個 key 都選擇加入
curl -X POST 'http://0.0.0.0:4000/key/update' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"key": "sk-my-admin-key",
"metadata": {"allow_litellm_changed_by_header": true}
}'
2. 在請求標頭中設定 LiteLLM-Changed-By
在呼叫管理端點時,請在請求標頭中設定 'user_id'。檢視完整清單。
- 使用已選擇加入的 admin key 更新 Team 預算。
- 將變更歸屬於 'krrish@berri.ai'。
Key 變更: 傳遞 -H 'LiteLLM-Changed-By: krrish@berri.ai'
curl -X POST 'http://0.0.0.0:4000/team/update' \
-H 'Authorization: Bearer sk-my-admin-key' \
-H 'LiteLLM-Changed-By: krrish@berri.ai' \
-H 'Content-Type: application/json' \
-d '{
"team_id" : "8bf18b11-7f52-4717-8e1f-7c65f9d01e52",
"max_budget": 2000
}'
3. 產生的稽核記錄
{
"id": "bd136c28-edd0-4cb6-b963-f35464cf6f5a",
"updated_at": "2024-06-08 23:41:14.793",
"changed_by": "krrish@berri.ai", # 👈 CHANGED BY
"changed_by_api_key": "example-api-key-123",
"action": "updated",
"table_name": "LiteLLM_TeamTable",
"object_id": "8bf18b11-7f52-4717-8e1f-7c65f9d01e52",
"before_value": {
"spend": 0,
"max_budget": 0,
},
"updated_values": {
"team_id": "8bf18b11-7f52-4717-8e1f-7c65f9d01e52",
"max_budget": 2000 # 👈 CHANGED TO
},
}
稽核記錄的 API 規格
id
- 型別:
String - 說明: 這是每個稽核記錄項目的唯一識別碼。預設會自動產生為 UUID(Universally Unique Identifier)。
updated_at
- 型別:
DateTime - 說明: 此欄位儲存稽核記錄項目建立或更新時的時間戳記。預設會自動設為目前的日期與時間。
changed_by
- Type:
String - Description: 執行受稽核動作的
user_id。如果傳入LiteLLM-Changed-By標頭,且呼叫 key 或其 team 的 metadata 中有allow_litellm_changed_by_header: true,則changed_by=<value passed for LiteLLM-Changed-By header>
changed_by_api_key
- 型別:
String - 說明: 此欄位儲存用來執行被稽核動作的雜湊 API 金鑰。若留白,預設為空字串。
action
- 型別:
String - 說明: 執行的動作類型。為 "create"、"update" 或 "delete" 其中之一。
table_name
- 型別:
String - 說明: 此欄位儲存受被稽核動作影響的資料表名稱。可為下列值之一:
LiteLLM_TeamTable、LiteLLM_UserTable、LiteLLM_VerificationToken
object_id
- 型別:
String - 說明: 此欄位儲存受被稽核動作影響的物件 ID。可以是 key ID、team ID、user ID
before_value
- 型別:
Json? - 說明: 此欄位儲存執行被稽核動作前該資料列的值。此欄位為選用,可為 null。
updated_values
- 型別:
Json? - 說明: 此欄位儲存執行被稽核動作後已更新的資料列值