Authoring Dogwood policies from natural language in Amazon Bedrock AgentCore
Quick Summary
정책 작성 기능은 자연어로 정리된 조직 규칙을 도구 스키마와 실행 이력에 연결된 Dogwood 정책으로 변환해 에이전트의 현재 호출과 시간에 걸친 행동을 실시간으로 통제한다.
🖼️ 인포그래픽

🖼️ 4컷 인포그래픽

💡 한 줄 요약
정책 작성 기능은 자연어로 정리된 조직 규칙을 도구 스키마와 실행 이력에 연결된 Dogwood 정책으로 변환해 에이전트의 현재 호출과 시간에 걸친 행동을 실시간으로 통제한다.
📌 핵심 요약
- Amazon Bedrock AgentCore의 Policy는 오픈 소스 거버넌스 언어인 Dogwood와 AgentCore Gateway 내 모니터를 이용해 에이전트의 도구 호출을 실시간으로 제한한다.
- 확장된 Policy Authoring은 자연어 정책 문서를 구문적·의미적으로 올바른 Dogwood 명세로 변환하며, 도구 입력 제한뿐 아니라 선행 조건, 순서, 빈도 제한, 누적 효과 같은 시간·궤적 제약도 생성한다.
- 정책 작성에는 자연어 규칙과 함께 MCP 도구 매니페스트에서 생성된 스키마가 제공되므로, 결과 정책은 에이전트가 실제로 호출하는 도구명과 입력·출력 필드를 참조한다.
- 은행 고객 서비스 사례에서는 환불의 시간·금액 제한, 동일 계좌의 최근 본인 확인, 12시간 이체 누적 한도, 계좌별 환불 시도 횟수, 분쟁 설명의 사회보장번호 탐지, 고액 환불의 승인 요건을 정책으로 변환했다.
- 예측 가능한 변환을 위해서는 시도와 성공 결과를 구분하고, 상대적인 표현 대신 구체적인 시간 범위를 명시하며, 규칙과 배경 설명을 분리해 정책 문서를 작성해야 한다.
🧩 주요 포인트
- 자연어 규칙과 실제 도구 스키마를 함께 입력한다 → 생성된 정책이 도구명, 인수, 반환값을 실행 환경과 동일한 기준으로 참조할 수 있다.
- 현재 호출의 입력값뿐 아니라 같은 세션의 과거 요청과 응답을 검사한다 → 단일 호출 제한을 넘어 본인 확인, 승인, 누적 한도, 호출 순서 같은 연속 행동을 통제할 수 있다.
- 시도·성공 여부와 시간 창을 문서에 명시한다 → 요청 이벤트와 응답 이벤트 중 무엇을 계산할지 분명해져 자연어의 모호성이 정책 의미를 바꾸는 문제를 줄일 수 있다.
🧠 상세 정리
1. 에이전트 행동 통제가 필요한 배경
AI 에이전트는 복잡한 업무 흐름을 자동화할 수 있지만, 적절한 통제가 없으면 조직 정책이나 규제 제약에 맞지 않는 행동을 할 수 있다. 이를 다루기 위해 Amazon Bedrock AgentCore의 Policy는 여러 에이전트에 공통으로 적용할 수 있는 행동 통제 수단을 제공한다. 이번 확장에서는 단일 도구 호출의 입력값만 검사하는 수준을 넘어, 일정 시간 동안의 행동과 호출 궤적을 제약하는 기능이 추가됐다. 여기에는 빈도 제한, 필수 선행 단계, 도구 호출의 순차적 순서, 여러 호출이 쌓여 발생하는 누적 효과가 포함된다. 정책은 오픈 소스 거버넌스 언어인 Dogwood로 표현되며, AgentCore Gateway에 내장된 Dogwood 모니터가 실제 에이전트 행동에 실시간으로 적용한다.
2. 자연어 정책을 Dogwood로 변환하는 작성 기능
확장된 Policy Authoring은 자연어로 작성된 정책 명세 문서를 구문적·의미적으로 올바른 Dogwood 형식 명세로 바꾸는 AI 기반 도구다. 새 기능은 시간 및 행동 궤적 제약, 자유 형식 텍스트의 부적절한 내용을 탐지하는 Amazon Bedrock Guardrails 호출, 도구 입력 인수 제한을 정책으로 생성할 수 있다. Dogwood 정책을 직접 작성하는 것도 가능하며, 통제 규칙이 적을 때는 수작업이 합리적인 출발점이 될 수 있다. 다만 Policy Authoring은 정책을 새로 설계하거나 긴 문서를 요약하는 도구가 아니라, 이미 산문으로 정리된 규칙을 형식 언어로 옮기는 번역기에 가깝다. 따라서 정책 목록이나 운영 절차의 규칙 부분처럼 명확한 규칙 집합을 제공하고, 배경·근거·해설이 섞여 있다면 실제 규칙만 먼저 분리하는 편이 적합하다.
3. 은행 고객 서비스 사례와 정책 입력 구조
사례의 대상은 소매은행 고객 서비스 에이전트로, 발신자 본인 확인, 분쟁 접수, 분쟁 거래 환불, 고객 본인 계좌 간 이체, 감독자 승인 요청을 수행한다. 이에 대응하는 도구는 verify_identity, initiate_transfer, issue_refund, file_dispute, request_approval이며, 각 도구에는 계좌·금액·거래 식별자·설명 같은 입력과 확인 여부·사례 번호·승인 여부 같은 출력이 정의돼 있다. Policy Authoring에는 자연어 정책 문서와 함께 이러한 도구명, 입력 인수, 반환값을 정확히 담은 스키마가 제공된다. 이 스키마는 에이전트의 MCP 도구 매니페스트에서 생성되므로, 생성된 정책의 context.input.amount 같은 표현은 실제 issue_refund 등의 도구가 받는 amount 인수와 연결된다. 작성 기능에는 사용 가능한 Guardrails 검사와 정책이 참조할 수 있는 신원 클레임도 함께 제공되어, 자연어 규칙이 실제 실행 문맥에서 사용할 수 있는 이름과 기능 안에서 형식화된다.
4. 현재 호출의 시간과 입력값을 함께 제한하는 정책
첫 번째 예시는 환불을 UTC 기준 오전 9시부터 오후 5시 사이에만 허용하고, 금액을 2,500달러 이하로 제한하는 규칙이다. 자연어 한 문장에 담긴 두 독립 요건은 issue_refund 작업을 허용하는 하나의 permit 정책과 두 개의 when 조건으로 변환되며, 환불이 허용되려면 두 조건이 모두 참이어야 한다. 시간 조건은 호출을 판단하는 순간의 시스템 시각을 읽고, 금액 조건은 에이전트가 보낸 현재 호출의 context.input.amount를 검사한다. 이 정책은 이전에 에이전트가 수행한 행동을 참조하지 않고, 오직 현재 판단 대상인 호출의 시각과 인수만으로 결정된다. 또한 문서의 2,500달러와 도구가 선언한 amount의 단위가 서로 일치해야 하므로, 자연어 금액 표현과 도구 스키마 사이의 단위 정합성이 전제된다.
5. 최근의 성공한 본인 확인을 요구하는 선행 조건
계좌 이체 사례에서는 같은 계좌에 대해 최근 15분 안에 발신자의 본인 확인이 성공하지 않았다면 이체를 시작할 수 없도록 규정한다. 이 조건은 현재 initiate_transfer 요청만 살펴봐서는 판단할 수 없으므로, 생성된 시간 정책은 같은 세션에서 앞서 발생한 verify_identity의 응답 이력을 검색한다. 단순히 본인 확인 도구가 호출된 사실이 아니라 응답의 verified 값이 true인 완료 결과가 있어야 하며, 실패하거나 미확인으로 끝난 호출은 선행 조건을 충족하지 않는다. 과거 이벤트의 input.account와 현재 호출의 context.input.account를 같게 묶어야 하므로, 다른 계좌에서 성공한 본인 확인도 현재 이체를 허가하지 않는다. 이력의 범위가 현재 세션으로 한정되기 때문에 사례의 도구 구조에서는 별도의 발신자 식별자 없이 계좌 필드를 이용해 동일 대상을 정확히 연결한다.
6. 누적 금액 상한과 계좌별 환불 빈도 제한
12시간 동안 이체한 총액이 50,000달러를 넘으면 차단한다는 규칙은 개별 호출이 아니라 여러 요청의 누적 효과를 검사한다. 생성된 정책은 과거 12시간에 발생한 initiate_transfer 요청 이벤트에서 amount 값을 모아 합산하고, 누적 총액이 기준을 초과하면 현재 이체 호출을 거부한다. 원문 규칙의 ‘이체된 금액’은 차단되거나 실패한 시도를 포함하는지 명확하지 않지만, 변환 결과는 요청 이벤트를 사용해 에이전트가 시도한 모든 이체를 합산하는 더 안전한 해석을 택한다. 환불 제한 사례는 합산 대신 이벤트 수를 세어, 같은 계좌에 대한 issue_refund 시도를 한 시간 안에 세 번까지만 허용하고 현재 호출을 포함한 네 번째 시도를 거부한다. 이 환불 규칙은 ‘시도’라고 명시했으므로 거부되거나 실패한 환불도 횟수에 포함된다는 의미가 분명하며, 누적 정책을 작성할 때 어떤 이벤트를 계산할지 명시해야 하는 이유를 보여준다.
7. 자유 형식 텍스트 검사와 감독자 승인 예외
분쟁 접수 설명에 미국 사회보장번호가 포함되면 거부하는 규칙은 숫자형 인수의 단순 비교만으로 처리할 수 없는 자유 형식 텍스트의 의미를 다룬다. 생성된 정책은 file_dispute의 description 필드를 Amazon Bedrock Guardrails의 민감정보 검사에 전달하고, 미국 사회보장번호 탐지 신뢰도가 기준 이상이면 호출을 금지한다. 자연어 규칙에 별도의 신뢰도 기준이 없기 때문에 예시에서는 해당 검사의 기본 임계값을 사용하며, 문서가 높은 신뢰도나 구체적인 수치를 지정하면 그 값이 정책에 반영된다. 또 다른 규칙은 500달러를 초과하는 환불을 기본적으로 금지하되, 같은 charge_id에 대해 최근 30분 안에 approved가 true인 감독자 승인 응답이 있으면 금지를 해제한다. 이처럼 하나의 정책은 현재 호출의 금액 조건과 과거 승인 결과라는 서로 다른 종류의 조건을 결합할 수 있고, 거래 식별자를 연결함으로써 다른 거래의 승인이 현재 환불에 잘못 사용되는 것을 막는다.
8. 명확한 자연어 정책을 작성하는 원칙
자연어 규칙이 명확하고 모호하지 않을수록 사람이나 자율 에이전트가 구현할 때의 행동을 예측하기 쉬워지고 오류도 줄어들며, 자연어를 Dogwood로 변환하는 작성 기능의 성능에도 도움이 된다. 특히 ‘이체 후’처럼 호출 시도와 성공 결과를 구분하지 않는 표현 대신, ‘이체가 성공한 후’처럼 어떤 이벤트를 뜻하는지 명시해야 한다. 시도는 에이전트가 발행한 모든 호출을 의미하므로 거부되거나 실패한 호출도 포함하지만, 완료된 호출의 응답 이벤트만 도구가 반환한 값을 가진다. 원문은 일반적으로 빈도 제한과 누적 상한은 시도를 대상으로 하고, 선행 조건과 순서 규칙은 결과를 대상으로 한다고 설명한다. 또한 ‘최근’처럼 변환 기준이 없는 표현을 피하고 ‘지난 30분 이내’처럼 구체적인 시간 창을 써야 하며, 이러한 창은 현재 판단 중인 호출을 기준으로 과거 방향으로 계산된다.
🧾 핵심 주장 / 시사점
- Dogwood 정책의 핵심은 개별 호출 허용 여부만 결정하는 것이 아니라, 같은 세션의 요청·응답 이력을 현재 호출과 연결해 에이전트의 행동 궤적 전체에 조직 규칙을 적용하는 데 있다.
- 정책의 정확성은 자연어 문장뿐 아니라 MCP 도구 스키마의 필드명·자료형·금액 단위와 과거 이벤트를 연결하는 계좌·거래 식별자의 일치에도 좌우된다.
- 기본 거부와 forbid 우선 원칙 아래에서는 허용 능력은 조건부 permit으로, 상한이나 제한은 forbid로 표현되므로 자연어 문서에서도 허용 조건과 금지 예외를 분명하게 구분하는 것이 중요하다.
✅ 액션 아이템
- 자연어 규칙과 MCP 도구 매니페스트 스키마를 함께 넣어 Dogwood 정책이 실제 도구명·입력·출력 필드를 참조하는지 점검한다.
- 은행 고객 서비스 정책 문서에서 환불·이체의 시도·성공을 구분하고 12시간 같은 구체적 시간 범위를 명시해 작성한다.
- Policy Authoring 결과에 선행 조건, 호출 순서, 빈도 제한, 누적 효과 같은 시간·궤적 제약이 포함되는지 비교한다.
❓ 열린 질문
- AgentCore Gateway 모니터가 같은 세션의 과거 요청·응답을 검사할 때 본인 확인과 승인 순서의 판단 기준은 무엇인가?
- 사회보장번호 탐지와 고액 환불 승인 요건을 Dogwood 명세로 변환할 때 어떤 입력·출력 필드가 필수인가?
- 상대적 시간 표현 대신 구체적 시간 범위를 쓸 때 누적 한도 계산이 요청 이벤트와 응답 이벤트 중 어디에 묶이는가?