AWS Machine Learning

Amazon Quick를 엔터프라이즈 대비 수준으로 만들기: 자동화되고 감사 가능한 교차 계정 리소스 승격

Amazon Quick 리소스(에이전트, 액션 커넥터, 지식 베이스, 플로우, 스페이스)를 개발 AWS 계정에서 프로덕션 AWS 계정으로 승격하는 작업은 지금까지 수동으로 진행해야 하는 오류가 발생하기 쉬운 번거로운 일이었습니다. 이 게시물에서는 Amazon Bedrock AgentCore에서 멱등성 있고 감사 가능한 MCP 서버를 통해 계정 간 승격을 자동화하는 방법을 보여줍니다.

Three-account architecture: a runner account hosts the MCP server on Amazon Bedrock AgentCore and assumes roles into the source and target accounts
이미지 출처 · AWS Machine Learning

Amazon Quick는 업무용으로 구축된 Amazon의 애자틱(에이전트형) AI 컴패니언입니다. 사용자는 자신의 데이터를 기반으로 추론하고, 액션 커넥터를 호출하며, 다단계 작업을 완료까지 수행하는 에이전트를 만들 수 있습니다. 이러한 리소스(챗 에이전트, 액션 커넥터, 지식 베이스, 플로우, 스페이스)를 다른 애플리케이션과 마찬가지로 개발 AWS 계정에서 프로덕션 AWS 계정으로 승격하는 작업은 지금까지 수동으로 처리해야 하는 오류가 발생하기 쉬운 번거로운 작업이었습니다. 이 게시물에서는 Amazon Bedrock AgentCore에서 멱등성과 감사 가능성을 갖춘 Model Context Protocol(MCP) 서버를 사용하여 이를 자동화하는 방법을 보여줍니다.

에이전틱 솔루션의 구성 요소는 그것의 에이전트, 액션 커넥터, 지식 베이스, 스페이스: 사용자 지정 지침으로 구성된 채팅 에이전트, Slack, Jira 및 기타 통합을 위한 커넥터, 자체 문서에 기반한 지식 베이스, 그리고 이들을 하나로 묶는 Space입니다. 팀은 개발 계정에서 이를 신속하게 조립하고 반복적으로 개선합니다.

대부분의 기업은 개발과 프로덕션을 위해 별도의 AWS 계정을 운영하며, 그 사이에 품질 보증(QA) 계정을 두는 경우도 있습니다. 에이전트, 액션 커넥터, 지식 베이스가 개발 계정에서 검증된 후, 이를 다음 계정으로 승격하는 네이티브 원클릭 방식은 없습니다. 팀은 각 리소스를 수동으로 다시 구축해야 합니다. 동일한 지침과 스타터 프롬프트로 각 에이전트를 재생성하고, 각 에이전트의 액션 커넥터를 다시 연결하고, 리소스 권한을 다시 부여하고, 각 지식 베이스 뒤에 있는 Amazon Simple Storage Service(Amazon S3) 버킷, 버킷 정책, 데이터 소스를 다시 프로비저닝합니다. 이 작업은 느리고, 감사하기 어렵고, 미묘하게 잘못되기 쉬우며, 이는 기업이 필요로 하는 거버넌스 스토리를 훼손합니다.

API를 통해 Amazon Quick 리소스 관리

Amazon Quick 리소스는 프로그래밍 가능합니다. Space, 에이전트, 액션 커넥터, 지식 베이스, 플로우는 Amazon Quick API(다음의 일부)를 통해 관리됩니다. Amazon Quick Sight API 서피스이 API는 전체 리소스 수명 주기, 즉 생성, 읽기, 업데이트, 삭제, 목록 조회를 제공합니다. 비즈니스 사용자가 Amazon Quick에서 구성하는 모든 것, 즉 지침과 스타터 프롬프트를 갖춘 에이전트, 커넥터, 지식 베이스 또는 플로우를 프로그래밍 방식으로 검사, 재생성, 업데이트, 거버넌스할 수 있으며, 여기에는 권한도 포함됩니다.

이 프로그래밍 가능한 서피스가 바로 거버넌스가 적용된 승격을 가능하게 하는 요소입니다. 각 리소스를 수동으로 재생성하는 대신, API를 통해 리소스와 그 권한을 읽어 들여 다른 계정에 원래 그대로 다시 적용합니다. 이 글의 마이그레이터는 생성, 읽기, 업데이트, 목록 조회 작업을 하나의 반복 가능한 워크플로로 구성하며, 대상에 대해 삭제(delete)를 절대 수행하지 않으므로 실행은 추가 또는 업데이트만 수행합니다.

이 글에서는 Amazon Bedrock AgentCore 런타임(Amazon Bedrock AgentCore의 기능)에서 호스팅되는 샘플 MCP 서버인 Quick Resource Migrator를 살펴보며, 이는 단일 도구 호출로 Amazon Quick 리소스의 교차 계정 승격을 자동화합니다. 이 도구는 리소스 기반입니다. 리소스 유형(에이전트, 커넥터, 지식 베이스, 플로우 또는 space)을 선택하고 id별, 이름별 또는 전체로 선택할 수 있습니다. 멱등적(재실행해도 안전)이며, 소스를 조회하고 대상에서 동일한 액션을 재현하여 권한을 충실히 복사합니다. 전체 소스 코드는 다음에서 확인할 수 있습니다. aws-samples 저장소.

솔루션 개요

마이그레이터는 단일 호출로 선택된 리소스 집합을 승격합니다. 이는 업서트(upsert) 방식입니다. 대상에 아직 존재하지 않는 리소스는 생성되고, 이미 존재하는 리소스는 그 자리에서 업데이트됩니다. 모든 업데이트는 변경 전에 Amazon S3에 기록되는 버전 관리된 백업으로 보호되므로, 각 리소스는 검토하고 롤백할 수 있는 전체 이력을 유지합니다. 읽기 전용 미리 보기는 커밋하기 전에 실행 시 정확히 무엇을 생성하거나 업데이트할지 보고하며, 마이그레이션 자체는 Amazon Bedrock AgentCore에서 실행되므로 Amazon Quick 또는 MCP 호환 클라이언트에서 구동할 수 있습니다.

마이그레이션 대상

  1. 선택 모델: 리소스 유형(에이전트, 커넥터, 지식 베이스, 플로우 또는 space)을 선택하고 id별, 이름별 또는 전체로 리소스를 선택합니다. 선택은 리소스 기반입니다. 리소스 유형을 직접 마이그레이션하거나, space를 마이그레이션하여 연결된 리소스를 함께 가져올 수 있습니다.
  2. 채팅 에이전트: 사용자 지정 지침, 정체성, 어조, 스타터 프롬프트, 환영 메시지와 함께 재생성되며, 액션 커넥터가 다시 연결됩니다(대상 계정으로 리매핑). space가 마이그레이션되면 해당 에이전트는 자동으로 다시 연결됩니다.
  3. 액션 커넥터: 구성과 함께 재생성됩니다. 시크릿 값은 소스에서 절대 읽지 않습니다. 커넥터는 자리표시자(placeholder) 자격 증명으로 생성되며 대상에서 재인증됩니다.
  4. 지식 베이스: 지식 베이스는 대상 계정에 등록되고, 데이터 소스가 재생성되며, 권한이 복사됩니다. S3 기반 지식 베이스의 경우 마이그레이터가 대상 버킷과 버킷 정책(마이그레이션의 별도 출력물)도 프로비저닝합니다. 문서(S3 객체) 자체는 복사되지 않습니다.
  5. 플로우: 정의를 기반으로 대상 계정에서 재생성됩니다. 플로우 ID는 계정마다 다르기 때문에 플로우는 이름으로 매칭됩니다. 동일한 이름의 대상 플로우가 있으면 업데이트되고, 그렇지 않으면 새로 생성됩니다. 플로우 권한은 복사됩니다.
  6. 스페이스: 대상 계정에서 다시 생성되고 에이전트, 커넥터, 지식 기반에 다시 연결됩니다(리소스 Amazon Resource Name(ARN)이 대상에 맞게 재매핑됨). 대상 ARN이 확인되도록 연결된 리소스를 먼저 마이그레이션하십시오. 스페이스 권한은 복사됩니다.

주요 설계 원칙

  1. 리소스 기반 선택. 한 번에 한 가지 리소스 유형(에이전트, 커넥터, 지식 기반, 플로우 또는 스페이스)씩 마이그레이션하며, id로 선택하거나 이름으로 선택하거나 전체를 선택할 수 있습니다. 에이전트는 액션 커넥터가 다시 연결된 상태로 재생성됩니다. 스페이스는 재생성되어 에이전트, 커넥터, 지식 기반에 다시 연결되며, ARN은 대상 계정에 맞게 재매핑됩니다.
  2. 권한 충실도. 권한은 하드코딩되지 않습니다. 서버는 각 소스 리소스에서 관련 Describe*Permissions API를 호출하고 동일한 액션 목록을 대상에서 재현하며, 보안 주체(principal)를 대상 계정에 등록된 사용자로 재매핑합니다.
  3. 멱등성. 모든 리소스는 생성-또는-업데이트 방식입니다. 서버는 먼저 대상을 조회(describe)하여 생성할지 업데이트할지 결정하므로, 마이그레이션을 다시 실행해도 중복이 생기거나 실패하지 않고 동일한 상태로 수렴합니다.
  4. 최소 권한 및 격리. 소스 역할은 읽기 전용입니다. 대상 역할은 마이그레이션에 필요한 액션만 보유합니다. 런타임은 Cognito JSON Web Token(JWT)으로 호출자를 인증하며 가상 사설 클라우드(VPC) 네트워크 모드로 실행될 수 있습니다.
  5. 안전하고 되돌릴 수 있는 업데이트. 마이그레이터가 기존 대상 리소스를 업데이트하기 전에 해당 리소스와 그 종속 항목의 버전 관리된 스냅샷을 전용 백업 버킷에 기록합니다. 해당 백업을 기록할 수 없으면 업데이트가 중단됩니다. 생성되거나 업데이트된 모든 리소스도 스냅샷이 저장되며, 복원 도구로 어떤 리소스든 이전 버전으로 롤백할 수 있습니다.

아키텍처

이 솔루션은 3계정 모델을 사용합니다. 중앙 러너 계정이 Amazon Bedrock AgentCore 런타임에 MCP 서버를 호스팅합니다. 서버는 AWS Security Token Service(AWS STS)를 사용하여 소스 계정의 읽기 전용 역할과 대상 계정의 읽기-쓰기 역할을 수임하므로, 장기 자격 증명은 어디에도 저장되지 않습니다.

Three-account architecture: a runner account hosts the MCP server on Amazon Bedrock AgentCore and assumes roles into the source and target accounts

그림 1: Amazon Quick Resource Migrator MCP 서버의 아키텍처

구성 요소 책임

구성 요소 책임
AgentCore 런타임(러너 계정) MCP 서버(server.py)를 호스팅합니다. 소스 및 대상 계정으로 역할을 수임하고 마이그레이션을 오케스트레이션합니다. Cognito JWT 권한 부여자와 함께 VPC 네트워크 모드로 실행됩니다.
Amazon Cognito(러너 계정) 사용자 풀, 리소스 서버, 그리고 머신 대 머신 앱 클라이언트. 호출자가 AgentCore에 제시하는 JWT(클라이언트 자격 증명 그랜트, 범위 invoke)를 발급합니다.
러너 실행 역할 AgentCore 실행 역할: Amazon CloudWatch Logs, 텔레메트리, 그리고 소스 및 대상 역할에 대한 sts:AssumeRole 권한.
마이그레이터 역할(소스 계정) Quick Sight describe/list 권한(읽기 전용) 및 지식 기반 읽기 권한.
마이그레이터 역할(대상 계정) 읽기-쓰기 Quick Sight 생성/업데이트 권한, 지식 베이스 및 S3 쓰기 권한, 그리고 ListUsers 주체(principal) 해석을 위한 권한.
백업 버킷 (러너 계정) 대상 리소스의 버전 관리된 업데이트 전 및 마이그레이션 후 스냅샷을 저장하는 암호화된 S3 버킷입니다. 런타임이 직접 이 버킷에 기록하며, 복원 시 이 버킷에서 읽습니다. 선택 사항입니다(설정하지 않으면 비활성화됨).

표 1: 아키텍처 구성 요소

마이그레이션 흐름

  1. 리소스 해석: 리소스 유형과 셀렉터(id, name 또는 all)로부터 소스 계정에서 구체적인 리소스 ID를 해석합니다.
  2. 소스 조회: 선택된 각 리소스를 describe하여 해당 구성과 권한을 캡처합니다.
  3. 커넥터: 각 커넥터를 다시 생성합니다. 인증 구성은 플레이스홀더 시크릿을 사용해 create(write) 모델로 정리(sanitize)된 후, 대상에서 재인증됩니다. 권한을 복사합니다.
  4. 지식 베이스: 대상 버킷(knowledge-base-<env>-<account>)과 버킷 정책, 데이터 소스, 지식 베이스를 생성한 후, 지식 베이스 권한을 복사합니다. S3 객체는 복사되지 않습니다.
  5. 에이전트: 액션 커넥터가 연결된(대상 계정으로 재매핑됨) 각 에이전트를 다시 생성한 후, 에이전트 권한을 복사합니다. 에이전트-스페이스 연결은 스페이스 자체가 마이그레이션될 때 복원됩니다(스페이스 단계 참조).
  6. Flows: 플로우 정의를 기준으로 각 플로우를 이름으로 매칭하여 재생성합니다(플로우 ID는 계정마다 다릅니다): 동일한 이름의 대상 플로우를 업데이트하거나 새로 생성한 후, 플로우 권한을 복사합니다.
  7. Spaces: 각 스페이스를 재생성하고, ARN을 대상 계정에 맞게 재매핑하여 해당 스페이스의 에이전트, 커넥터, 지식 기반을 다시 연결합니다(해당 리소스를 먼저 마이그레이션해야 함), 이후 스페이스 권한을 복사합니다.
  8. Report: 생성되거나 업데이트된 리소스, 버킷, 백업, 건너뛴 권한 및 발생한 오류에 대한 JSON 보고서를 반환합니다.

MCP 서버가 노출하는 도구

서버는 다음에 정의된 다섯 가지 도구를 노출합니다: server.py.

preview_migration (읽기 전용)

preview_migration 은(는) 소스 계정 ID, 리소스 유형(agent, connector, knowledge base, flow, space 또는 all), 셀렉터(id, name 또는 all), AWS 리전을 입력받습니다. 마이그레이션될 에이전트, 액션 커넥터, 지식 기반, 플로우의 목록을 이름과 유형과 함께 반환하며, 어떠한 변경도 수행하지 않습니다. 드라이 런으로 사용하여 범위를 확인하고, 승격 전에 변경 관리 승인 단계를 지원할 수 있습니다. 대상 계정 ID도 함께 전달하면, 응답에 각 리소스를 CREATE 또는 UPDATE로 표시하는 소스-대상 매핑이 추가되어, 실행 전에 마이그레이션이 정확히 무엇을 변경할지 확인할 수 있습니다.

migrate_resources (전체 마이그레이션)

migrate_resources 은(는) 소스 및 대상 계정 ID, 리소스 유형(agent, connector, knowledge base, flow 또는 space), 셀렉터(id, name 또는 all), 리전, 소스 및 대상 환경 이름(지식 기반 버킷 이름에 사용됨), Quick Sight 서비스 역할 이름을 입력받습니다. 앞서 설명한 전체 생성-또는-업데이트 마이그레이션을 수행하고, 생성, 업데이트, 권한 부여된 모든 항목과 오류에 대한 구조화된 보고서를 반환합니다. 멱등(idempotent)하기 때문에 예를 들어 매 릴리스마다 반복해서 실행할 수 있으며, 항상 동일한 대상 상태로 수렴합니다.

list_backups (읽기 전용)

list_backups 은(는) 백업 카탈로그를 검색하고 각 자산에 대해 사용 가능한 버전을 나열합니다. 백업은 마이그레이터가 백업 버킷에 기록하는 업데이트 전 스냅샷으로, 업데이트당 버전 관리된 객체 하나씩 생성되므로 마이그레이션된 모든 리소스의 전체 이력을 확인할 수 있습니다.

get_backup (읽기 전용)

get_backup 은(는) 지정된 자산과 버전(기본값은 최신 버전)에 대해 저장된 전체 백업을 반환하며, 캡처된 리소스 구성과 그 종속성을 포함합니다.

restore_backup

restore_backup 은(는) 저장된 백업 버전을 대상 리소스에 다시 적용하여 제자리에서 업데이트하거나, 리소스가 더 이상 존재하지 않는 경우 재생성합니다. 복원 전에 새로운 사전 복원 백업을 먼저 수행하므로, 이 되돌리기 자체도 되돌릴 수 있습니다.

솔루션 배포

전체 소스와 단계별 배포 지침은 aws-samples 저장소 README에 있습니다. 개요를 설명하면, 세 개의 AWS CloudFormation 스택, 크로스 계정 AWS Identity and Access Management (IAM) 역할, VPC 네트워크, 그리고 MCP 서버를 호스팅하는 Cognito 인증 AgentCore 런타임을 배포한 후, 해당 런타임을 Amazon Quick에서 액션 커넥터로 등록합니다.

Quick App을 통해 마이그레이터 사용

런타임을 액션 커넥터로 등록하면 Amazon Quick에서 자연어로 마이그레이터를 구동할 수 있으며, 동일한 MCP 도구 위에 구축된 클릭 방식의 웹 경험인 Quick App을 만들 수도 있습니다. 이 UI를 직접 만들 필요는 없습니다. 저장소에는 바로 사용 가능한 app-builder 프롬프트 가 포함되어 있으며, 이를 Amazon Quick 앱 빌더에 붙여넣고 자리 표시자 커넥터 및 액션 ID를 자신의 ID로 교체하여 앱을 생성할 수 있습니다. 앱은 워크플로를 안내형 흐름으로 전환합니다: 소스 및 대상 계정과 승격할 리소스를 선택하고, 생성 또는 업데이트될 내용을 미리 보고, 마이그레이션을 실행한 후, 서버가 기록하는 버전 관리된 S3 스냅샷으로 뒷받침되는 모든 과거 마이그레이션의 이력을 검토합니다. 다음 화면들이 그 경험을 보여줍니다.

Quick App 예시

  1. 앱은 프롬프트에서 생성되기 때문에 빌드할 때마다 다릅니다. 다음 화면은 그러한 예시 중 하나를 보여줍니다. 이 예시에서 랜딩 페이지는 Source Account ID, Target Account ID, 리소스 유형(agent, connector, knowledge base, flow 또는 space), 셀렉터(id, name 또는 all)를 입력받으며, 필요에 따라 추가 옵션을 사용할 수 있습니다.

Quick App landing page with fields for source and target account IDs, resource type, and selector

Additional migration options on the Quick App landing page

그림 3: 랜딩 페이지에서 사용 가능한 추가 마이그레이션 옵션

  1. 선택한 후 Confirm & migrate를 누르면 다음과 같은 응답이 표시됩니다:
Confirmation view shown after choosing Confirm and migrate

그림 4: Confirm and migrate를 선택한 후의 확인 응답

  1. 확인 후 마이그레이션을 실행하면, MCP 서버가 생성/업데이트된 리소스를 반환하는 응답을 볼 수 있습니다.
MCP server response listing the resources that were created or updated

그림 5: 생성 또는 업데이트된 리소스를 나열하는 MCP 서버 응답

  1. History 탭을 열면 이전의 모든 마이그레이션 기록을 볼 수 있습니다. 각 항목은 마이그레이터가 Amazon S3에 기록한 버전 관리된 스냅샷을 기반으로 하므로, 무엇이 언제 승격되었는지에 대한 완전하고 감사 가능한 기록을 얻을 수 있으며 이전 버전을 검사할 수도 있습니다.
History tab showing a record of past migrations

Figure 6: 과거 마이그레이션의 감사 가능한 기록을 보여주는 History 탭

  1. 롤백하려면 리소스의 백업 버전을 선택하고 Restore를 선택합니다. 앱은 해당 저장된 버전을 대상에 다시 적용합니다. 복원 전에 먼저 새 백업을 캡처하기 때문에, 이 되돌리기 자체도 되돌릴 수 있습니다.
Restoring a resource to an earlier backup version

Figure 7: 리소스를 이전 백업 버전으로 롤백하기

결론

교차 계정 프로모션은 엔터프라이즈 소프트웨어의 기본적인 기대 사항이며, 지금까지는 Amazon Quick에서 빠져 있던 부분이었습니다. Quick Resource Migrator는 느리고 수동으로 진행하기 어려운 감사 작업을 빠르고, 반복 가능하며, 거버넌스가 적용된 작업으로 바꿔줍니다. 단 한 번의 도구 호출로 대상 계정에 에이전트, 커넥터, 지식 베이스를 재현하고 권한을 그대로 복사하며, 모두 멱등성(idempotent)을 갖추고 있어 매 릴리스마다 실행할 수 있습니다.

샘플 리포지토리를 복제하고, 러너 계정에 배포한 다음, 개발 환경에서 프로덕션으로 에이전트 또는 지식 베이스를 승격해 보세요. 그런 다음 이 패턴을 자신의 거버넌스 및 강화(hardening) 요구 사항에 맞게 조정하세요.


저자 소개

원문 출처

AWS Machine Learning

내용 안내

원문 발행 및 권리는 출처에 있습니다.

기계 번역 · 원문을 참고하세요