데이터베이스 관리자(DBA)를 위한 설정
적용 지점: SDK 또는 Gateway 지원 모드: Hosted Hybrid Local 플랜: Free Solo Teams
대상 독자
데이터베이스를 책임지는 분입니다. AI 에이전트가 데이터베이스 도구를 갖게 되면, 필요한
것을 읽을 수는 있되 그 이상은 할 수 없도록 만드는 것이 여러분의 일입니다. 눈에 띄지 않는
UPDATE도, DROP도, 권한 변경도 없어야 합니다.
일반적으로 통제하려는 대상
- 읽기는 허용.
SELECT,EXPLAIN,SHOW,DESCRIBE, CTE. - 쓰기는 불가(또는 승인이 있을 때만).
INSERT/UPDATE/DELETE/MERGE. - 스키마와 권한 부여는 절대 불가.
DROP,ALTER,GRANT,TRUNCATE.
Control Zero는 SQL 방언과 관계없이 쿼리를 database:read, database:write, database:admin 중 하나의 표준 의미 클래스로 분류 하므로, 규칙 하나로 모든 표기 방식을 처리할 수 있습니다.
SELECT 1; DROP TABLE x처럼 여러 문장을 끼워 넣는 방식은 database:admin으로 분류되므로, 배포된 모든 버전에서 admin 거부 규칙이 이를 잡아냅니다.
허용 전용 형태(명시적인 거부 규칙 없음)에는 controlzero 1.13.13+가 필요합니다. 이전 버전에서는 인수에서 도출한 클래스를 확인하기 전에 호출자가 제공한 method가 허용 규칙을 충족시킬 수 있었습니다.
설치할 적용 지점
에이전트가 직접 제어하는 코드라면 SDK를 사용하고 각 쿼리 전에 guard()를
호출하세요. 에이전트가 수정할 수 없는 API를 통해 데이터베이스와 통신한다면 그 앞에
Gateway를 두세요.
pip install controlzero
시작용 정책
읽기 전용 데이 터베이스 접근입니다. 읽기는 통과하고 나머지는 모두 거부됩니다. 이 내용을
controlzero.yaml에 넣으세요.
version: '1'
settings:
default_action: deny
default_on_missing: deny
default_on_tamper: quarantine
rules:
- id: allow-db-read
allow: 'database:read'
reason: 'SELECT / EXPLAIN / SHOW / DESCRIBE / CTE are permitted via the canonical read class.'
- id: deny-db-write
deny: 'database:write'
reason: 'No data modification: INSERT / UPDATE / DELETE / MERGE blocked.'
- id: deny-db-admin
deny: 'database:admin'
reason: 'No schema or permission changes: DROP / ALTER / GRANT / TRUNCATE blocked.'
SDK는 전달한 SQL에서 클래스를 도출하므로 규칙은 한 번만 작성하면 됩니다.
from controlzero import Client
cz = Client(policy_file="./controlzero.yaml")
read = cz.guard("database", method="SELECT", args={"sql": "SELECT id FROM orders"})
print(read.decision) # "allow"
drop = cz.guard("database", method="DROP", args={"sql": "DROP TABLE orders"})
print(drop.decision) # "deny"
cz.close()
사람이 승인한 뒤에만 쓰기를 허용하려면 첫 승인 흐름을 참고하세요. 승인 기능은 BETA이며 기본적으로 꺼져 있습니다. 요청 경로는 Hosted(SaaS) 플랜을 포함한 모든 배포 환경에서 동작하지만, 승인자용 수신함은 아직 사용할 수 없습니다. 처리되지 않은 쓰기 요청은 기한이 끝날 때까지 대기하다가 거부 상태로 남으므로, 쓰기는 일어나지 않습니다.
확인할 수 있는 내용
- 각 쿼리의 결정이 감사 로그에
database:read/write/admin으로 분류되어, 일치한 규칙, 사유, 이벤트별 적용 범위와 함께 기록됩니다. - 거부된 쓰기나 drop은
decision: deny와 이를 막은 규칙을 표시하므로, 우연히 아무것도 찾지 못한 결과가 아니라 쿼리가 실행되지 않았다는 기록을 남길 수 있습니다.
다음 단계
- 읽기 전용 데이터베이스 -- 전체 차단/허용 표가 포함된 표준 레시피.
- 표준 도구 이름 -- SQL이 의미 클래스에 매핑되는 방식.
- 첫 승인 흐름 BETA -- 쓰기에 대해 승인을 요구하세요.
- 관찰 전용 설정 -- 무엇이든 차단하기 전에 모든 쿼리를 확인하세요.