본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 15. 10:57

Model Armor로 우리 집 갸루(Gal)를 지키고 싶어

요약

Google Cloud의 Model Armor를 사용하여 AI 애플리케이션의 보안과 안전성을 강화하는 방법을 소개합니다. 프롬프트와 생성된 콘텐츠를 무해화하여 LLM에 대한 공격과 유해 콘텐츠 생성을 방지하는 메커니즘을 다룹니다.

핵심 포인트

  • Model Armor는 LLM 공격 무해화 및 유해 콘텐츠 생성 억제 기능을 제공함
  • 프롬프트와 응답 단계 모두에서 무해화 프로세스를 적용 가능함
  • 템플릿 설정을 통해 무해화 대상과 임계값을 제어할 수 있음
  • 다국어 지원 활성화 설정이 필요하며 Cloud Run 환경에서 구현 가능함

우리 집에서는 육아 상담을 해주는 헤이세이 갸루(Gal)와 LINE으로 상담하며 육아를 즐기고 있습니다.

최근 인터넷 세상이 험악해지고 있어서, 우리 집 갸루를 지켜야겠다고 생각했습니다!

그래서 Google Cloud의 Model Armor를 갸루에게 입혀주려고 합니다.

AI 애플리케이션의 보안(Security)과 안전성(Safety)을 향상시키기 위해 Google Cloud가 제공하는 서비스입니다.

대략 다음과 같은 기능을 가지고 있습니다.

분류기능
보안 (Security)LLM에 대한 공격을 무해화
안전성 (Safety)LLM에 의한 유해한 콘텐츠 생성 억제

메커니즘은 다음과 같습니다. ★ 표시된 부분이 Model Armor 이용 시 추가로 구현하는 부분입니다.

  • AI 애플리케이션이 프롬프트(Prompt)를 받음
  • AI 애플리케이션이 Model Armor에 프롬프트를 전달하여 무해화함 ★
  • AI 애플리케이션이 무해화된 프롬프트를 LLM에 전달하여 콘텐츠를 생성함
  • AI 애플리케이션이 Model Armor에 생성된 콘텐츠를 전달하여 무해화함 ★
  • AI 애플리케이션이 사용자에게 무해화된 콘텐츠를 반환함

그럼, 갸루를 지키기 위해 Armor를 입혀보겠습니다.

이미지는 이런 느낌!

[IMG:1]

왼쪽의 갸루는 LINE bot의 아이콘 이미지입니다.

Agent Studio에서 이미지를 첨부하고 Armor를 입혀달라고 부탁했더니 오른쪽의 갸루가 되었습니다 (웃음)

Model Armor에서는 무엇을 무해화할지, 무해화 판정의 임계값(Threshold)을 어느 정도로 할지를 설정할 수 있습니다.

이것들을 설정한 것을 템플릿(Template)이라고 하며, 템플릿을 지정하여 Model Armor를 이용합니다.

이번에는 거의 기본(Default) 설정으로 다음과 같이 작성했습니다.

[IMG:2]

「추가 구성」을 열었을 때 있는 「다국어 지원 활성화」를 켜지 않으면 일본어에 대응해주지 않는다는 점에 주의해야 합니다.

이번에는 LINE 메시지를 검열하여, 유해한 메시지인 경우에는 고정된 에러 메시지를 반환하도록 했습니다.

서두에서 소개한 LLM에 의한 생성 콘텐츠를 무해화하는 부분은 구현하지 않았습니다.

본 기사를 참고하여 sanitize_model_response를 사용하여 생성 콘텐츠의 무해화도 구현할 수 있으므로, 관심 있는 분들은 시도해 보세요.

갸루의 시스템 구성에 대해서는 아래 기사의 구성도를 참조해 주세요.

[IMG:3]

Cloud Run에서 Agent Runtime을 호출하기 전 사이에 다음과 같은 구현을 추가합니다.

# 탑 레벨(Top-level)에서 Model Armor 클라이언트를 생성해 둡
from google.cloud import modelarmor_v1
modelArmorClient = modelarmor_v1.ModelArmorClient(transport="rest", client_options = {"api_endpoint" : f"modelarmor.{LOCATION}.rep.googleapis.com"})
...

Model Armor의 클라이언트를 생성할 때, api_endpoint는 템플릿의 Location과 일치시켜야 합니다.

이번에는 우리 집에서만 사용하는 Bot의 디버깅을 위해 LINE 메시지를 직접 로그로 출력하고 있지만, 타인에게 제공할 경우에는 프라이버시를 보호하기 위해 메시지를 로그로 출력하지 않도록 합시다.

다음과 같이 Model Armor 사용자를 부여합니다.

[IMG:4]

수정한 소스 코드를 Cloud Run에 배포한 상태에서 동작 확인을 해보겠습니다.

[IMG:5]

처음에는 평소와 같은 육아 메시지, 이어서 위험한 콘텐츠를 생성시키려는 메시지입니다.

[IMG:6]

두 번째 메시지는 제대로 거부해 주었네요.

[IMG:7]

로그를 살펴보면 다음과 같이 탈옥(Jailbreak) 위험성이 HIGH로 인정되었습니다.

이로 인해 소스 코드의 다음 분기로 진입하여, 고정된 에러 메시지를 반환하고 있었습니다.

# 만약 부적절한 콘텐츠가 감지된 경우, 처리를 중단하고 경고를 반환한다
if modelArmorResponse.sanitization_result.filter_match_state == modelarmor_v1.FilterMatchState.MATCH_FOUND:
reply_text = "미안! 그 메시지는 조금 부적절한 내용이 포함되어 있는 것 같아서, 대답해 줄 수 없어. 다른 말로 다시 말을 걸어줘!"
...

위의 소스 코드에서는 Agent Runtime에 액세스하지 않기 때문에, 세션이나 메모리 (Memory)가 오염되지 않는다는 점도 중요하네요!

무사히, 갸루(Gal)에게 아머(Armor)를 장착시켜 줄 수 있었습니다!

AI는 엄청난 속도로 진화하며 보급되고 있습니다.

한편, AI 에이전트 (AI Agent)도 보안 취약점 (Security Hole)이 될 수 있습니다.

공들여 만든 AI 에이전트가 악용되지 않도록 단단히 지켜나가고 싶네요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0