본문으로 건너뛰기
hs-sql-agent
3.0.0
문서 3.0.0
문서 운영

설정 레퍼런스

독립 Docker, 표준 HsSqlAgent.Hosting 또는 모듈형 HsSqlAgent.Server Host를 구성합니다.

필수 비밀 정보 보호 설정

Docker를 시작하거나 런타임을 등록하기 전에 서로 독립적인 무작위 32바이트 Base64 비밀 값 세 개를 설정하세요. 모든 노드가 같은 키를 사용하고 재시작 후에도 유지해야 합니다. HMAC_KEY와 JWT_KEY는 별도의 서명 비밀 값입니다. openssl rand -base64 32를 각각 세 번 실행하세요.

Docker 환경 변수ASP.NET Core 설정
DB_ENCRYPTION_KEYSecretProtection:DatabasePasswords:Keys:db-1
DML_ENCRYPTION_KEYSecretProtection:DmlPayloads:Keys:dml-1
DML_FINGERPRINT_KEYSecretProtection:DmlFingerprintKey

SecretProtection:DatabasePasswords:ActiveKeyId는 db-1, SecretProtection:DmlPayloads:ActiveKeyId는 dml-1로 설정합니다. 누락되거나 잘못되거나 재사용된 키는 시작 실패를 일으킵니다. 예제의 자리표시자는 의도적으로 유효하지 않습니다.

HsSqlAgent.Hosting은 SecretProtection을 자동 바인딩합니다. 모듈형 호스트에서는 명시적으로 바인딩해야 합니다.

hs.AddHsSqlAgentRuntime(options =>
{
    builder.Configuration.GetSection("SecretProtection").Bind(options.SecretProtection);
});

새 bootstrap MCP 키에는 Bootstrap:Databases:*:McpKeys:*:Key 값을 명시하세요. 시작 시 키를 생성하거나 로그에 기록하지 않습니다. 기존 암호화 DB 비밀번호는 다시 입력해야 합니다. 기존 배포를 변경하기 전에 업그레이드 가이드를 읽으세요.

자격 증명 저장 및 키 교체

DB 비밀번호는 AES-256-GCM으로 암호화되며 용도와 신뢰할 수 있는 레코드의 SecretBindingId에 결합됩니다. 영속 실행 페이로드는 RequestId에 결합됩니다. 이전 형식 복호화 대체 경로는 없습니다. ICryptoService는 호출자가 전달하는 키 바이트 대신 컨텍스트 문자열을 받습니다.

암호화 키 링을 교체하려면 이전 키와 새 키를 서로 다른 ID로 모든 노드에 배포하고 ActiveKeyId를 변경한 뒤 비밀번호를 다시 저장하세요. 대기 또는 과거 페이로드를 조사해야 하는 동안에는 이전 DML 키를 유지하세요. 독립된 fingerprint key는 버전 관리되지 않습니다. 교체 전 승인을 모두 처리하고 과거 witness 조사를 위해 이전 비밀 값을 보관하세요.

ExtraSettings는 JSON 불리언 Encrypt와 TrustServerCertificate만 허용합니다. 알 수 없거나 중복된 필드, 문자열 값, 잘못된 JSON은 거부됩니다. 연결 테스트와 상태 점검은 드라이버 세부 정보 대신 일반적인 DB_CONNECTION_FAILED 메시지를 반환합니다.

Doctor의 security.secret-protection은 비밀 값을 반환하지 않고 키 ID, Base64 형식, 길이와 독립성을 검사합니다. 공개 예제 키는 Production 이외에서는 경고, Production에서는 오류이며 비활성 보관 키도 포함합니다. 잘못된 자리표시자는 모든 환경에서 오류입니다. 잘못된 설정은 Doctor가 준비되기 전 시작 검증에서 실패할 수 있습니다.

hs-sql-agent에는 세 가지 사용 방식이 있지만 보안 경계는 같습니다.

방식설정 모델
Docker / ToolBox.env.example의 완전한 독립 서비스 환경 설정
HsSqlAgent.HostingASP.NET Core configuration을 통한 동일한 표준 공식 구성
HsSqlAgent.ServerHost가 Capability별 Options를 명시적으로 선택

DML 승인

기본 공식 Provider는 MCP Elicitation입니다. 독립 Docker와 HsSqlAgent.Hosting은 SQL 실행 primitive를 바꾸지 않고 공식 범용 Webhook adapter로 전환할 수 있습니다.

환경 변수용도
DML_APPROVAL_PROVIDERMcpElicitation 또는 Webhook
DML_APPROVAL_WEBHOOK_ENDPOINT외부 승인 서비스 endpoint
DML_APPROVAL_WEBHOOK_CALLBACK_URLpending approval을 완료하는 공개 callback URL
DML_APPROVAL_WEBHOOK_SIGNING_SECRETWebhook signing secret, 최소 32 UTF-8 bytes
{
  "DmlApproval": {
    "Provider": "Webhook",
    "Webhook": {
      "Endpoint": "https://approval.example.com/hssqlagent/requests",
      "CallbackUrl": "https://sql-agent.example.com/api/hs-sql-agent/approvals/webhook",
      "SigningSecret": "replace-with-a-unique-secret-at-least-32-bytes"
    }
  }
}

알 수 없는 Provider 이름은 시작 시 실패합니다. 비동기 Provider는 Pending을 반환할 수 있으며 Durable Resume에는 보호된 Resume Intent와 Approval Fingerprint를 저장할 Admin Store가 필요합니다.

모듈형 HsSqlAgent.Server는 HsSqlAgent.Approvals.Webhook 또는 자체 IDmlApprovalProvider를 등록할 수 있습니다. 승인 Provider는 Database Connection, Transaction, 검증된 Plan, commit primitive를 받지 않습니다.

Application과 Control Plane

독립 서비스 설정에는 Application Hosting, Admin Database, MCP HMAC/Public Endpoint, 내장 Admin JWT, SMTP/Password Reset, OIDC/MFA, Bootstrap, Audit, Health, Delivery, Cache, Rate Limit, Policy Sync, Outbound Delivery Sync, SQL Concurrency, Prometheus, OTLP가 포함됩니다.

HMAC_KEY와 JWT_KEY는 서로 다른 32 bytes 이상의 secrets를 사용하세요. 보호된 Identity State를 사용할 때는 DATA_PROTECTION_KEY_PATH를 영속화합니다.

단일 Instance와 분산 Provider

단일 Instance는 SQLite Admin Database와 process-local Memory Provider를 사용할 수 있습니다. 여러 Instance에서는 공유 Admin Database와 Cache, Rate Limiting, Security Policy Sync, Outbound Delivery Sync, SQL Concurrency용 Redis-backed Provider를 사용합니다.

Observability

Prometheus는 PROMETHEUS_ENABLED, PROMETHEUS_HOST, PROMETHEUS_PORT의 별도 Listener를 사용하고 OTLP는 OTLP_ENDPOINT, OTEL_SERVICE_NAME으로 설정합니다.

Embedded .NET Host

HsSqlAgent.Hosting은 완전한 표준 구성을 소유합니다. HsSqlAgent.Server는 AddHsSqlAgentCore()에서 시작하고 선택된 Capability의 Options만 검증합니다. Host Authorization은 내장 Identity를 대체할 수 있고 DML 승인 Provider도 독립적으로 교체할 수 있습니다.

배포, ASP.NET Core 통합, Safe DML을 참고하세요.