# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2026, XINFERENCE HOLDINGS PTE. LTD.
# This file is distributed under the same license as the Xinference package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: Xinference \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-17 15:37+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: ko\n"
"Language-Team: ko <LL@li.org>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"

#: ../../source/user_guide/audit_security.rst:5
msgid "Audit Logging and Security"
msgstr "감사 로깅 및 보안"

#: ../../source/user_guide/audit_security.rst:7
msgid ""
"When the database-backed authentication system is enabled (the default, "
"see :ref:`user_guide_auth_system`), Xinference records an audit trail of "
"API activity and protects the API against brute-force attacks. "
"Administrators can inspect both from the web UI."
msgstr ""
"데이터베이스 기반 인증 시스템이 활성화되어 있으면(기본값, :ref:`user_guide_auth_system` 참조) "
"Xinference는 API 활동의 감사 추적을 기록하고 무차별 대입 공격으로부터 API를 보호합니다. 관리자는 웹 UI에서 두 "
"가지 모두 확인할 수 있습니다."

#: ../../source/user_guide/audit_security.rst:13
msgid "Audit logging"
msgstr "감사 로깅"

#: ../../source/user_guide/audit_security.rst:15
msgid ""
"Protected and authenticated API activity is recorded as JSON lines in "
"``<XINFERENCE_LOG_DIR>/audit.log`` (``<XINFERENCE_HOME>/logs`` by "
"default). Files rotate daily (and by size) and are kept for "
"``XINFERENCE_AUDIT_LOG_RETENTION_DAYS`` days (default 90)."
msgstr ""
"보호되고 인증된 API 활동은 ``<XINFERENCE_LOG_DIR>/audit.log``(기본값: "
"``<XINFERENCE_HOME>/logs``)에 JSON Lines 형식으로 기록됩니다. 파일은 매일 그리고 크기에 따라 "
"순환되며 ``XINFERENCE_AUDIT_LOG_RETENTION_DAYS`` 일 동안 보관됩니다(기본값: 90)."

msgid ""
"This is an authentication and security audit trail, not a complete HTTP "
"access log. Xinference intentionally excludes ``/v1/audit/*``, "
"``/v1/cluster/auth``, ``/v1/cluster/ui_config``, ``/status``, and "
"``/v1/address``; public or bootstrap routes that do not pass through the "
"authenticated audit path may also be absent."
msgstr ""
"이는 인증 및 보안 감사 추적이며 완전한 HTTP 액세스 로그가 아닙니다. Xinference는 의도적으로 "
"``/v1/audit/*``, ``/v1/cluster/auth``, ``/v1/cluster/ui_config``, "
"``/status`` 및 ``/v1/address`` 를 제외합니다. 인증된 감사 경로를 거치지 않는 공개 또는 부트스트랩 경로도 "
"기록되지 않을 수 있습니다."

#: ../../source/user_guide/audit_security.rst:20
msgid "Each entry contains, among others:"
msgstr "각 항목에는 특히 다음 필드가 포함됩니다:"

#: ../../source/user_guide/audit_security.rst:22
msgid ""
"``category``: ``inference`` (model calls such as ``/v1/chat/...``, "
"``/v1/embeddings``), ``auth`` (login/token endpoints), or ``admin`` "
"(everything else)."
msgstr ""
"``category``: ``inference``\\ (``/v1/chat/...``, ``/v1/embeddings`` 등 모델 "
"호출), ``auth``\\ (로그인/토큰 엔드포인트) 또는 ``admin``\\ (그 외 전부)."

#: ../../source/user_guide/audit_security.rst:25
msgid ""
"``user``, ``auth_type``, ``api_key_name`` / ``api_key_prefix``: who made "
"the call and how it was authenticated."
msgstr ""
"``user``, ``auth_type``, ``api_key_name`` / ``api_key_prefix``: 누가 호출했고 "
"어떻게 인증되었는지."

#: ../../source/user_guide/audit_security.rst:27
msgid ""
"``model_id`` / ``model_name`` / ``model_type``: the model involved, if "
"any."
msgstr "``model_id`` / ``model_name`` / ``model_type``: 관련된 모델(있는 경우)."

#: ../../source/user_guide/audit_security.rst:28
msgid ""
"``endpoint``, ``status``, ``latency_ms``, ``client_ip``, ``node``, "
"``address``: what was called, the outcome, and where it ran."
msgstr ""
"``endpoint``, ``status``, ``latency_ms``, ``client_ip``, ``node``, "
"``address``: 무엇이 호출되었는지, 결과가 어땠는지, 어디에서 실행되었는지."

#: ../../source/user_guide/audit_security.rst:32
msgid "Audit Center"
msgstr "감사 센터"

#: ../../source/user_guide/audit_security.rst:34
msgid ""
"The **Audit Center** page of the web UI lets administrators search and "
"filter the audit trail (by time range, user, API key, model, category, "
"status, and client IP). It is backed by ``GET /v1/audit/search``, which "
"requires the ``admin`` permission."
msgstr ""
"웹 UI의 **감사 센터** 페이지에서 관리자는 감사 추적을 검색하고 필터링할 수 있습니다(시간 범위, 사용자, API 키, 모델,"
" 카테고리, 상태, 클라이언트 IP 기준). 이 페이지는 ``admin`` 권한이 필요한 ``GET "
"/v1/audit/search`` 엔드포인트를 기반으로 동작합니다."

#: ../../source/user_guide/audit_security.rst:39
msgid ""
"By default the search reads the local ``audit.log``. If the "
"``XINFERENCE_ES_URL`` environment variable points at an Elasticsearch "
"cluster (e.g. with the audit log shipped by Filebeat), the search queries"
" Elasticsearch instead, using the index pattern from "
"``XINFERENCE_AUDIT_ES_INDEX`` (default ``xinference-audit-*``)."
msgstr ""
"기본적으로 검색은 로컬 ``audit.log`` 파일을 읽습니다. ``XINFERENCE_ES_URL`` 환경 변수가 "
"Elasticsearch 클러스터를 가리키면(예: Filebeat로 감사 로그를 전송하는 경우) 검색은 대신 "
"Elasticsearch를 조회하며, ``XINFERENCE_AUDIT_ES_INDEX``\\ (기본값 ``xinference-"
"audit-*``)의 인덱스 패턴을 사용합니다."

#: ../../source/user_guide/audit_security.rst:46
msgid "Brute-force protection"
msgstr "무차별 대입 공격 방어"

#: ../../source/user_guide/audit_security.rst:48
msgid "Failed API-key authentication attempts are rate-limited on two levels:"
msgstr "실패한 API 키 인증 시도는 두 가지 수준에서 속도가 제한됩니다:"

#: ../../source/user_guide/audit_security.rst:50
msgid ""
"**Per IP**: an IP presenting invalid API keys is banned after "
"``XINFERENCE_RATE_LIMIT_IP_MAX_FAILURES`` failures (default 10) within "
"``XINFERENCE_RATE_LIMIT_IP_WINDOW_SECONDS`` (default 300), for "
"``XINFERENCE_RATE_LIMIT_IP_BAN_SECONDS`` (default 3600). Requests from a "
"banned IP are rejected with ``429 Too Many Requests``."
msgstr ""
"**IP별**: 잘못된 API 키를 제시한 IP는 ``XINFERENCE_RATE_LIMIT_IP_WINDOW_SECONDS``\\"
" (기본 300) 초 안에 ``XINFERENCE_RATE_LIMIT_IP_MAX_FAILURES``\\ (기본 10) 회 실패하면"
" ``XINFERENCE_RATE_LIMIT_IP_BAN_SECONDS``\\ (기본 3600) 초 동안 차단됩니다. 차단된 IP의"
" 요청은 ``429 Too Many Requests`` 오류로 거부됩니다."

#: ../../source/user_guide/audit_security.rst:55
msgid ""
"**Per (IP, API key)**: repeated failures with one specific key from one "
"IP ban that combination after ``XINFERENCE_RATE_LIMIT_KEY_MAX_FAILURES`` "
"failures (default 5) within ``XINFERENCE_RATE_LIMIT_KEY_WINDOW_SECONDS`` "
"(default 300), for ``XINFERENCE_RATE_LIMIT_KEY_BAN_SECONDS`` (default "
"3600)."
msgstr ""
"**(IP, API 키)별**: 하나의 IP에서 특정 키로 "
"``XINFERENCE_RATE_LIMIT_KEY_WINDOW_SECONDS``\\ (기본 300) 초 안에 "
"``XINFERENCE_RATE_LIMIT_KEY_MAX_FAILURES``\\ (기본 5) 회 실패를 반복하면 해당 조합이 "
"``XINFERENCE_RATE_LIMIT_KEY_BAN_SECONDS``\\ (기본 3600) 초 동안 차단됩니다."

#: ../../source/user_guide/audit_security.rst:61
msgid ""
"Individual API keys can override the key-level limits with the "
"``rate_limit_max_failures`` / ``rate_limit_window_seconds`` / "
"``rate_limit_ban_seconds`` fields when creating or updating the key."
msgstr ""
"개별 API 키는 키를 생성하거나 수정할 때 ``rate_limit_max_failures`` / "
"``rate_limit_window_seconds`` / ``rate_limit_ban_seconds`` 필드로 키 수준 제한을 "
"재정의할 수 있습니다."

#: ../../source/user_guide/audit_security.rst:66
msgid "Security Settings"
msgstr "보안 설정"

#: ../../source/user_guide/audit_security.rst:68
msgid "The **Security Settings** page of the web UI lets administrators:"
msgstr "웹 UI의 **보안 설정** 페이지에서 관리자는 다음을 수행할 수 있습니다:"

#: ../../source/user_guide/audit_security.rst:70
msgid "view and tune the rate-limit configuration at runtime,"
msgstr "런타임에 속도 제한 구성을 조회하고 조정,"

#: ../../source/user_guide/audit_security.rst:71
msgid "list currently banned IPs and (IP, key) pairs,"
msgstr "현재 차단된 IP 및 (IP, 키) 조합 목록 확인,"

#: ../../source/user_guide/audit_security.rst:72
msgid "lift bans individually or all at once."
msgstr "차단을 개별적으로 또는 한꺼번에 해제."

#: ../../source/user_guide/audit_security.rst:74
msgid ""
"The equivalent REST endpoints live under ``/v1/admin/security/*`` (e.g. "
"``GET``/``PUT /v1/admin/security/rate-limit``, ``GET /v1/admin/security"
"/banned-ips``, ``POST /v1/admin/security/unban-ip``) and require the "
"``admin`` permission."
msgstr ""
"동등한 REST 엔드포인트는 ``/v1/admin/security/*`` 아래에 있으며(예: ``GET``/``PUT "
"/v1/admin/security/rate-limit``, ``GET /v1/admin/security/banned-ips``, "
"``POST /v1/admin/security/unban-ip``) ``admin`` 권한이 필요합니다."

