보안 AI 에이전트 빌드는 에이전트 프레임워크와 애플리케이션 개발자 간의 공동 책임입니다. 에이전트 프레임워크는 추상화, 공급자 및 오케스트레이션과 같은 구성 요소를 제공하지만 개발자는 입력의 유효성을 검사하고 데이터 흐름을 보호하며 시나리오에 적합한 도구를 구성할 책임이 있습니다.
이 문서에서는 Agent Framework를 사용하여 안전하고 안전한 에이전트를 빌드하기 위한 모범 사례를 간략하게 설명합니다.
신뢰 경계 이해
에이전트가 실행되면 사용자 입력, 채팅 기록 공급자, 컨텍스트 공급자, LLM 서비스 및 함수 도구와 같은 여러 구성 요소를 통해 데이터가 흐릅니다. 데이터가 애플리케이션에 들어오거나 종료되는 각 경계는 잠재적인 공격 표면을 나타냅니다.
고려할 주요 신뢰 경계:
- AI 서비스 - 채팅 메시지(PII 및 시스템 지침을 포함할 수 있음)를 수신하고 LLM에서 생성된 출력을 반환합니다.
- 채팅 기록 스토리지 - 공급자는 외부 스토리지를 통해 대화 메시지를 로드하고 유지할 수 있습니다.
- 컨텍스트 서비스 - 컨텍스트 공급자는 외부 서비스(메모리, 사용자 프로필, RAG 결과)에서 데이터를 검색하거나 저장할 수 있습니다.
- 도구 액세스 서비스 - 함수 도구는 외부 API 또는 데이터베이스를 호출할 수 있는 개발자 제공 코드를 실행합니다.
모든 외부 서비스 통신은 개발자가 선택한 클라이언트 SDK에 의해 처리됩니다. 에이전트 프레임워크는 이러한 서비스에 대한 인증, 암호화 또는 연결 세부 정보를 관리하지 않습니다.
모범 사례
함수 입력 유효성 검사
AI는 도구로 제공하는 모든 함수를 호출하고 인수를 선택할 수 있습니다. LLM 제공 인수를 웹 API의 사용자 입력과 비슷하게 신뢰할 수 없는 입력으로 처리합니다.
-
허용 목록 사용 - 알려진 잘못된 패턴을 필터링하는 대신 알려진 양수 값에 대해 입력의 유효성을 검사합니다. 예를 들어, 경로 이동 시퀀스를 확인하는 대신
..파일 경로가 허용된 디렉터리 내에 있는지 확인합니다. - 형식 및 범위 제약 조건 적용 - 인수가 예상 형식이고 허용되는 범위(숫자 범위, 문자열 길이 제한, 날짜 범위) 내에 있는지 확인합니다.
- 문자열 길이 제한 - 리소스 소모 또는 삽입 공격을 방지하기 위해 문자열 인수에 최대 길이를 적용합니다.
- 경로 통과 방지 - 함수가 파일 경로를 수락하는 경우 절대 경로로 확인하고 허용되는 디렉터리에 속하는지 확인합니다.
- 매개 변수가 있는 쿼리를 사용합니다. SQL 쿼리, 셸 명령 또는 기타 해석된 컨텍스트에서 인수를 사용하는 경우 매개 변수가 있는 쿼리 또는 이스케이프를 사용하며 문자열 연결은 사용하지 않습니다.
고위험 도구에 대한 승인 필요
기본적으로 에이전트에 제공된 모든 도구는 사용자 승인 없이 호출됩니다. 도구 승인 메커니즘을 사용하여 사람의 확인 뒤에 고위험 작업을 제어합니다.
승인이 필요한 도구를 결정할 때 다음을 고려합니다.
- 부작용 - 데이터를 수정하거나, 통신을 보내거나, 구매하거나, 다른 부작용이 있는 도구는 일반적으로 승인이 필요합니다.
- 데이터 민감도 - 중요한 데이터(PII, 재무 데이터, 자격 증명)에 액세스하거나 반환하는 도구는 승인을 보증합니다.
- 가역성 - 되돌릴 수 없는 작업(삭제, 전자 메일 보내기)은 읽기 전용 쿼리보다 위험이 높습니다.
- 영향 범위 - 광범위한 영향을 미치는 도구(대량 작업)는 범위가 좁은 도구보다 더 면밀한 조사가 필요합니다.
개발자가 제어하는 시스템 메시지 유지
채팅 메시지는 AI 서비스에서 해석하는 방법을 결정하는 역할(system, user, assistant, tool)을 전달합니다. 이러한 역할을 이해하는 것은 매우 중요합니다.
| 역할 | 신뢰 수준 |
|---|---|
system |
가장 높은 신뢰 - LLM 동작을 직접 셰이프합니다. 신뢰할 수 없는 입력을 포함해서는 안됩니다. |
user |
신뢰할 수 없는 — 프롬프트 삽입 시도 또는 악성 콘텐츠를 포함할 수 있습니다. |
assistant |
신뢰할 수 없는 — 외부 시스템인 LLM에 의해 생성됩니다. |
tool |
신뢰할 수 없는 경우 - 외부 시스템 또는 사용자의 영향을 받는 콘텐츠의 데이터를 포함할 수 있습니다. |
최종 사용자 입력을 system-역할 메시지에 배치하지 마세요. Agent Framework는 기본적으로 형식화되지 않은 텍스트를 역할로 user 설정하지만 프로그래밍 방식으로 메시지를 생성할 때는 주의해야 합니다.
수의사 서비스 확장 제공자
컨텍스트 공급자 및기록 공급자는 을 비롯한 system모든 역할로 메시지를 삽입할 수 있습니다. 신뢰할 수 있는 공급자만 연결합니다.
간접 프롬프트 주입에 유의하세요. 기본 데이터 저장소가 손상되면 악의적인 콘텐츠가 LLM 동작에 영향을 줄 수 있습니다. 예를 들어 RAG를 통해 검색된 문서에는 LLM이 의도한 동작에서 벗어나거나 도구 호출을 통해 데이터를 유출하는 숨겨진 명령이 포함될 수 있습니다.
LLM 출력 유효성 검사 및 정화
LLM 응답은 신뢰할 수 없는 출력으로 처리되어야 합니다. AI 서비스는 에이전트 프레임워크가 제어하지 않는 외부 엔드포인트입니다. 다음을 알고 있어야 합니다.
- 환각 - LLM은 그럴듯하게 들리지만 실제로는 잘못된 정보를 생성할 수 있습니다. 확인 없이는 LLM 출력을 신뢰할 수 있는 것으로 취급하지 마세요.
- 간접 프롬프트 주입 - 도구, 컨텍스트 공급자 또는 채팅 기록 공급자가 검색한 데이터에 LLM에 영향을 주도록 설계된 악의적인 콘텐츠가 포함될 수 있습니다.
- 악의적인 페이로드 - LLM 출력에는 삭제 없이 렌더링되거나 실행되는 경우 유해한 콘텐츠가 포함될 수 있습니다(XSS의 경우 HTML/JavaScript, 삽입용 SQL, 셸 명령).
HTML에서 렌더링하거나, 코드로 실행하거나, 데이터베이스 쿼리에서 사용하거나, 보안에 민감한 컨텍스트에 전달하기 전에 항상 LLM 출력의 유효성을 검사하고 삭제합니다.
로그에서 중요한 데이터 보호
Agent Framework는 OpenTelemetry를 통한 로깅 및 원격 분석을 지원합니다. 중요한 데이터는 명시적으로 사용하도록 설정된 경우에만 기록됩니다.
-
로깅 - 로그 수준에서
Trace전체ChatMessages컬렉션이 기록됩니다. 여기에는 PII가 포함될 수 있습니다.Trace레벨은 프로덕션 환경에서 절대 활성화되어서는 안 됩니다. -
원격 분석 - 설정된 경우
EnableSensitiveData원격 분석에는 함수 호출 및 결과를 포함한 채팅 메시지의 전체 텍스트가 포함됩니다. 프로덕션 환경에서는 사용하도록 설정하지 마세요.
세션 데이터 보호
세션(AgentSession)은 대화 컨텍스트를 나타내며 지속성을 위해 serialize할 수 있습니다. 직렬화된 세션을 중요한 데이터로 처리합니다.
- 세션은 대화 콘텐츠 또는 세션 식별자를 참조할 수 있습니다.
- 신뢰할 수 없는 원본에서 세션을 복원하는 것은 신뢰할 수 없는 입력을 수락하는 것과 같습니다. 손상된 스토리지 백 엔드는 역할을 변경하여 신뢰를 에스컬레이션할 수 있습니다.
- 적절한 액세스 제어 및 암호화를 사용하여 세션을 보안 스토리지에 저장합니다.
리소스 제한 구현
에이전트 프레임워크는 시나리오에 적합한 것이 무엇인지 모르기 때문에 입력/출력 길이 또는 요청 속도에 제약 조건을 적용하지 않습니다. 귀하는 다음과 같은 사항에 책임이 있습니다.
- 입력 길이 제한 - 컨텍스트 오버플로 또는 DoS 공격을 방지하기 위해 입력 길이를 제한합니다.
-
출력 길이 제한 - 서비스 제공 제한(예
MaxOutputTokens: 채팅 옵션)을 사용합니다. - 속도 제한 - 속도 제한 기능을 사용하여 비용 초과 및 남용이 동시 요청에서 발생하지 않도록 방지합니다.