Home / AgentCore ๊ฐœ์š” / ๐ŸŽฏ AgentCore
Module

๐ŸŽฏ AgentCore

Runtime, Gateway, Memory, Identity, Policy โ€” ์—์ด์ „ํŠธ ํ”„๋กœ๋•์…˜ ํ”Œ๋žซํผ

โฑ 60๋ถ„ 175 / 189

Amazon Bedrock AgentCore

Runtime ยท Gateway ยท Memory ยท Identity ยท Policy

์—์ด์ „ํŠธ๋ฅผ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌํ•˜๋Š” ํ”Œ๋žซํผ

๋นŒ๋“œ๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€ โ€” ๊ด€๋ฆฌํ˜• ์—์ด์ „ํŠธ ์ธํ”„๋ผ

์™œ AgentCore์ธ๊ฐ€

ํ”„๋กœ๋•์…˜ ๊ฐญ ยท ํ†ตํ•ฉ ํ”Œ๋žซํผ ยท ํ”„๋ ˆ์ž„์›Œํฌ ์ž์œ  ยท ํ•™์Šต ์ง€๋„

PART 1 ยท ์™œ AgentCore์ธ๊ฐ€

์—์ด์ „ํŠธ๋ฅผ ํ”„๋กœ๋•์…˜์— ์˜ฌ๋ฆฌ๋ ค๋ฉด

๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ์šด์˜ํ•˜๋Š” ๊ฒƒ์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ โ€” ๋กœ์ปฌ 3์ค„ ์ฝ”๋“œ ์•ž์— ๋†“์ธ ๋„ค ๊ฐ€์ง€ ๊ฐญ

์‹คํ–‰ ๊ฒฉ๋ฆฌ

์„ธ์…˜๋งˆ๋‹ค ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ โ€” ์‚ฌ์šฉ์ž ๊ฐ„ ๋ฐ์ดํ„ฐ ์˜ค์—ผ ๋ฐฉ์ง€

์ธ์ฆยท๊ถŒํ•œ

๋„๊ตฌ๋งˆ๋‹ค ์ž๊ฒฉ ์ฆ๋ช… โ€” ํ‚ค ๋ณด๊ด€ยท๋กœํ…Œ์ด์…˜ยท์ ‘๊ทผ ์ œ์–ด

๊ธฐ์–ต

๋Œ€ํ™” ์ด๋ ฅ ์ €์žฅ์†Œ โ€” ์„ธ์…˜ ๋ณต์›๊ณผ ์žฅ๊ธฐ ๊ธฐ์–ต ํŒŒ์ดํ”„๋ผ์ธ

๊ด€์ธกยทํ‰๊ฐ€

์ถ”๋ก  ๊ฒฝ๋กœ ํŠธ๋ ˆ์ด์‹ฑ โ€” ํ’ˆ์งˆ ์ธก์ •๊ณผ ํšŒ๊ท€ ๊ฐ์ง€

takeaway

์—์ด์ „ํŠธ ์ฝ”๋“œ๋Š” 3์ค„์ด์ง€๋งŒ, ์šด์˜์—๋Š” ์ด ๊ฐญ์„ ๋ฉ”์šธ ์ธํ”„๋ผ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค โ€” ์ด ๊ฐญ์„ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค๊ตฐ์œผ๋กœ ๋ฉ”์šฐ๋Š” ํ”Œ๋žซํผ์ด AgentCore์ž…๋‹ˆ๋‹ค.

PART 1 ยท ์™œ AgentCore์ธ๊ฐ€

AgentCore = ํ†ตํ•ฉ ํ”Œ๋žซํผ

์‹คํ–‰ ยท ์—ฐ๊ฒฐ ยท ๊ธฐ์–ต ยท ํ†ต์ œ โ€” ํ”„๋กœ๋•์…˜ ๊ฐญ์„ ๋ฉ”์šฐ๋Š” ํ•ต์‹ฌ 4์ถ•

Runtime

์—์ด์ „ํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ โ€” MicroVM ๊ฒฉ๋ฆฌ

Gateway

๋„๊ตฌ ์—ฐ๊ฒฐ ์ค‘์•™ ๊ด€๋ฆฌ โ€” MCP ํ”„๋กœํ† ์ฝœ

Memory

๋Œ€ํ™” ๊ธฐ์–ต โ€” ๋‹จ๊ธฐ(STM) + ์žฅ๊ธฐ(LTM)

Identity & Policy

์ธ์ฆ + ๊ถŒํ•œ ์ œ์–ด โ€” Cedar

takeaway

๋ชจ๋“  ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ฑ„ํƒ ๊ฐ€๋Šฅ(Composable) โ€” ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์กฐํ•ฉํ•ด ์ ์ง„ ๋„์ž…ํ•˜๊ณ , ์‚ฌ์šฉํ•œ ๋งŒํผ๋งŒ ๊ณผ๊ธˆ๋ฉ๋‹ˆ๋‹ค.

PART 1 ยท ์™œ AgentCore์ธ๊ฐ€

ํ”„๋ ˆ์ž„์›Œํฌ ์ž์œ 

์–ด๋–ค SDK๋กœ ๋งŒ๋“ค์—ˆ๋“  AgentCore์— ๋ฐฐํฌ ๊ฐ€๋Šฅ

ํ”„๋ ˆ์ž„์›Œํฌ๋ฐฐํฌ ๊ฒฝ๋กœํ†ตํ•ฉ ์ˆ˜์ค€
StrandsBedrockAgentCoreApp ๋ž˜ํ•‘ โ€” ZIP ๋˜๋Š” Container๋„ค์ดํ‹ฐ๋ธŒ โ€” MemoryยทGateway ์—ฐ๋™ ๋ชจ๋“ˆ์ด SDK์— ๋‚ด์žฅ
LangGraphContainer(ECR) โ€” Docker ์ด๋ฏธ์ง€ ๋ฐฐํฌ๊ธฐ์กด ๊ทธ๋ž˜ํ”„ ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๋ฐฐํฌ
CrewAI ยท ์ปค์Šคํ…€ ์ฝ”๋“œZIP(Direct Code) ๋˜๋Š” Container@app.entrypoint ๊ณ„์•ฝ๋งŒ ์ง€ํ‚ค๋ฉด ์•„๋ฌด Python ์ฝ”๋“œ๋“  ๋ฐฐํฌ
takeaway

AgentCore๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹คํ–‰ยท์—ฐ๊ฒฐยท๊ธฐ์–ตยทํ†ต์ œ๋ฅผ ๋งก๋Š” ์ธํ”„๋ผ โ€” ๋งŒ๋“œ๋Š” ๋„๊ตฌ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์šด์˜๋งŒ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.

PART 1 ยท ์™œ AgentCore์ธ๊ฐ€

5๊ฐœ ๋ชจ๋“ˆ ํ•™์Šต ์ง€๋„

๋„ค ์ถ•์˜ ์ •์ฒด์„ฑ์„ ํ›‘๊ณ , ์ƒ์„ธ๋Š” ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ

  1. 1
    Runtime

    ์ปค์Šคํ…€ ์—์ด์ „ํŠธ ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ โ€” MicroVM ์„ธ์…˜ ๊ฒฉ๋ฆฌ, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ, ํ”„๋กœํ† ์ฝœ(HTTPยทMCPยทA2A)๊ณผ ์šด์˜์„ ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  2. 2
    Managed Harness

    ์ฝ”๋“œ 0์ค„ ์„ ์–ธ์  ๋ฐฐํฌ โ€” CreateHarnessยทInvokeHarness 2๊ฐœ API, Per-invocation Override, Runtime๊ณผ์˜ ์„ ํƒ ๊ธฐ์ค€์„ ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  3. 3
    Gateway

    ๋„๊ตฌ ํ—ˆ๋ธŒ โ€” Target ์œ ํ˜•๋ณ„ ๊ตฌ์„ฑ, ๋นŒํŠธ์ธ ์ปค๋„ฅํ„ฐ, Interceptor์™€ ์‹œ๋งจํ‹ฑ ๋„๊ตฌ ๊ฒ€์ƒ‰, Inbound/Outbound ์ธ์ฆ์„ ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  4. 4
    Memory

    STM/LTM 2๊ณ„์ธต ๊ธฐ์–ต โ€” ์ถ”์ถœ ์ „๋žต 4์ข…์˜ ๋™์ž‘, ๋„ค์ž„์ŠคํŽ˜์ด์Šค, Strands ํ†ตํ•ฉ ์ฝ”๋“œ๋ฅผ ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

takeaway

์ด๋ฒˆ ๋ชจ๋“ˆ์—์„œ๋Š” ๊ฐ ์ถ•์˜ ๋ง›๋ณด๊ธฐ์™€ CLI ์„ค์น˜ ์‹ค์Šต๊นŒ์ง€ โ€” ์ „๋‹ด ๋ชจ๋“ˆ์ด ๋”ฐ๋กœ ์—†๋Š” Identity & Policy๋Š” ์ด ๋ชจ๋“ˆ์—์„œ ๋ฐ”๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Runtime

MicroVM ๊ฒฉ๋ฆฌ ยท ๋ฐฐํฌ 2๋ฐฉ์‹ ยท CLI ์‚ฌ์ดํด

PART 2 ยท Runtime

Runtime

์ปค์Šคํ…€ ์—์ด์ „ํŠธ ์ฝ”๋“œ๋ฅผ ์„ธ์…˜๋งˆ๋‹ค ๊ฒฉ๋ฆฌ๋œ MicroVM์—์„œ ์‹คํ–‰ํ•˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ

AgentCore Runtime

์ง์ ‘ ์ž‘์„ฑํ•œ ์—์ด์ „ํŠธ ์ฝ”๋“œ(StrandsยทLangGraphยทCrewAIยท์ปค์Šคํ…€)์˜ ํ”„๋กœ๋•์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ

  • ์„ธ์…˜ 1๊ฐœ = MicroVM 1๊ฐœ โ€” 2vCPU/8GB ๊ณ ์ •
  • ๋ฐฐํฌ 2๋ฐฉ์‹ โ€” Direct Code(ZIP) ยท Container(ECR)
  • ๋ฐฐํฌ ๊ณ„์•ฝ โ€” @app.entrypoint ํ•จ์ˆ˜ ํ•˜๋‚˜
  • ์„ธ์…˜ ์ตœ๋Œ€ 8์‹œ๊ฐ„ ยท Idle ์ž๋™ ์ข…๋ฃŒ
takeaway

์ด ํŒŒํŠธ๋Š” ์ฒซ ๋ฐฐํฌ๊นŒ์ง€์˜ ๋ง›๋ณด๊ธฐ โ€” ์„ธ์…˜ ๋ผ์ดํ”„์‚ฌ์ดํดยทํ”„๋กœํ† ์ฝœยท์ฟผํ„ฐยท์šด์˜์€ Runtime ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๊นŠ๊ฒŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

PART 2 ยท Runtime

์ „์šฉ MicroVM ๊ฒฉ๋ฆฌ

VM ์ˆ˜์ค€ ๊ฒฉ๋ฆฌ + ์„œ๋ฒ„๋ฆฌ์Šค ์‹œ์ž‘ ์†๋„

MicroVM ์„ธ์…˜๋งˆ๋‹ค ๋…๋ฆฝ ๊ฒฉ๋ฆฌ โ€” ๋ฐ์ดํ„ฐ ์œ ์ถœ ๋ถˆ๊ฐ€
~100ms VM ๋ถ€ํŒ… ์‹œ๊ฐ„ โ€” ์ „์ฒด ์ดˆ๊ธฐํ™”๋Š” ์ˆ˜ ์ดˆ
2vCPU / 8GB ์„ธ์…˜๋‹น ๊ณ ์ • ์ž์› ํ• ๋‹น
takeaway

๊ฒฉ๋ฆฌ ๋‹จ์œ„๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ VM โ€” ์ฝœ๋“œ๋Š” VM ๋ถ€ํŒ… ~100ms + ์ „์ฒด ์ดˆ๊ธฐํ™” ์ˆ˜ ์ดˆ์ด๋ฉฐ, ๊ณต์‹ ์ ˆ๋Œ€ ์ˆ˜์น˜๋Š” ๋ฏธ๊ณตํ‘œ์ž…๋‹ˆ๋‹ค.

PART 2 ยท Runtime

๋ฐฐํฌ ๋ฐฉ์‹ 2๊ฐ€์ง€

ZIP์ด๋ƒ Container๋ƒ โ€” ์˜์กด์„ฑ ๋ณต์žก๋„๋กœ ๊ฒฐ์ •

Direct Code (ZIP)

  • ์†Œ์Šค ์ฝ”๋“œ ZIP ๋˜๋Š” S3 ์—…๋กœ๋“œ
  • requirements.txt ์ž๋™ ์„ค์น˜
  • Python 3.10~3.14, Node.js 22
  • ๋ฐฐํฌ ~30์ดˆ (๊ฐ€์žฅ ๋น ๋ฆ„)
  • ์ตœ๋Œ€ 250MB (์••์ถ•)
  • ๊ฐ„๋‹จํ•œ ์—์ด์ „ํŠธ์— ์ตœ์ 

agentcore deploy๊ฐ€ ์ฝ”๋“œ๋ฅผ ํŒจํ‚ค์ง•ํ•˜์—ฌ ARM64(Graviton) ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ZIP ์ œํ•œ์€ 250MB(์••์ถ•)/750MB(๋น„์••์ถ•)์ž…๋‹ˆ๋‹ค.

Container (ECR)

  • Dockerfile โ†’ CodeBuild โ†’ ECR ํ‘ธ์‹œ
  • ์ปค์Šคํ…€ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€๋Šฅ
  • ARM64 ์ด๋ฏธ์ง€ ํ•„์ˆ˜ (Graviton)
  • ๋ฐฐํฌ ์ˆ˜ ๋ถ„ (์ด๋ฏธ์ง€ ๋นŒ๋“œ)
  • ์ตœ๋Œ€ 2GB
  • ๋ณต์žกํ•œ ์˜์กด์„ฑ์— ์ ํ•ฉ

agentcore create --build Container๋กœ Dockerfile์ด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. CodeBuild๊ฐ€ ARM64 ๋นŒ๋“œ์™€ ECR ํ‘ธ์‹œ๋ฅผ ์ž๋™ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

PART 2 ยท Runtime

AgentCore CLI ๋ฐฐํฌ ์‚ฌ์ดํด

create โ†’ dev โ†’ deploy โ†’ invoke โ€” ์ธํ”„๋ผ ์ฝ”๋“œ 0์ค„





1
create โ€” ํ”„๋กœ์ ํŠธ ์Šค์บํด๋”ฉ

์ด๋ฆ„์€ ์˜์ˆซ์ž๋งŒ (ํ•˜์ดํ”ˆยท๋ฐ‘์ค„ ๊ธˆ์ง€)




2
dev โ€” ๋กœ์ปฌ ๊ฐœ๋ฐœ

dev ์„œ๋ฒ„ + ๋ธŒ๋ผ์šฐ์ € ์ธ์ŠคํŽ™ํ„ฐ โ€” ๋ฐฐํฌ ์ „ ๊ฒ€์ฆ




3
deploy โ€” ๋ฆฌ์†Œ์Šค ์ž๋™ ์ƒ์„ฑ

IAMยทCodeBuildยทECRยทRuntimeยทEndpoint ์ž๋™ ์ƒ์„ฑ




4
invoke โ€” ๋ฐฐํฌ๋œ ์—์ด์ „ํŠธ ํ˜ธ์ถœ

--stream ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ยท --session-id ์„ธ์…˜ ์œ ์ง€






ํ„ฐ๋ฏธ๋„ โ€” AgentCore CLI


$ agentcore create --name HelpdeskAgent --defaults

โœ“ ํ”„๋กœ์ ํŠธ ์Šค์บํด๋”ฉ ์™„๋ฃŒ โ€” ํ…œํ”Œ๋ฆฟ + ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

$ agentcore dev

โžœ ๋กœ์ปฌ dev ์„œ๋ฒ„ ๊ธฐ๋™ โ€” ๋ธŒ๋ผ์šฐ์ € ์ธ์ŠคํŽ™ํ„ฐ์—์„œ ๋„๊ตฌ ํ˜ธ์ถœ ํ™•์ธ

$ agentcore deploy

โœ“ IAM ์—ญํ•  โ†’ CodeBuild โ†’ ECR โ†’ Runtime โ†’ Endpoint ์ž๋™ ์ƒ์„ฑ

$ agentcore invoke "ํ”„๋ฆฐํ„ฐ๊ฐ€ ์•ˆ ๋ผ์š”"

"ํ”„๋ฆฐํ„ฐ ์ „์›๊ณผ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ๋ถ€ํ„ฐ ํ•จ๊ป˜ ํ™•์ธํ•ด ๋ณผ๊ฒŒ์š”. โ€ฆ"




PART 2 ยท Runtime

์—์ด์ „ํŠธ ์ฝ”๋“œ โ€” @app.entrypoint

๋ฐฐํฌ ๊ณ„์•ฝ์€ ์ง„์ž…์  ํ•จ์ˆ˜ ํ•˜๋‚˜ โ€” ๋‚˜๋จธ์ง€๋Š” ํ‰๋ฒ”ํ•œ ์—์ด์ „ํŠธ ์ฝ”๋“œ

ํ•ต์‹ฌ ํฌ์ธํŠธ

BedrockAgentCoreApp
Runtime์˜ HTTP ์„œ๋ฒ„ ๊ณ„์•ฝ์„ ๋Œ€์‹  ๊ตฌํ˜„ โ€” ์„œ๋ฒ„ ์ฝ”๋“œ 0์ค„
@app.entrypoint
์‚ฌ์šฉ์ž ์š”์ฒญ์ด ๋ผ์šฐํŒ…๋˜๋Š” ์ง„์ž…์  โ€” ์ด ํ•จ์ˆ˜๊ฐ€ ๋ฐฐํฌ ๊ณ„์•ฝ
payload
ํ˜ธ์ถœ ์ธก์ด ๋ณด๋‚ธ JSON โ€” invoke๋กœ ๋„˜๊ธด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‹ด๊น€
๋ฐ˜ํ™˜๊ฐ’
JSON ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ dict โ€” ๊ทธ๋Œ€๋กœ ์‘๋‹ต ๋ณธ๋ฌธ์ด ๋จ

์ฝ”๋“œ (main.py)

python
from strands import Agent
from bedrock_agentcore import BedrockAgentCoreApp

app = BedrockAgentCoreApp()

# ๋ฐฐํฌ ๊ณ„์•ฝ โ€” Runtime์ด ์ด ํ•จ์ˆ˜๋กœ ์š”์ฒญ์„ ๋ผ์šฐํŒ…
@app.entrypoint
def my_agent(payload):
    agent = Agent(system_prompt="IT ํ—ฌํ”„๋ฐ์Šคํฌ ์—์ด์ „ํŠธ")
    result = agent(payload.get("prompt"))
    return {"result": result.message}

์ „๋‹ด ๋ชจ๋“ˆ ๋ง›๋ณด๊ธฐ

Managed Harness ยท Gateway ยท Memory โ€” ์„ธ ์ถ•์˜ ์ •์ฒด์„ฑ

PART 3 ยท ์ „๋‹ด ๋ชจ๋“ˆ ๋ง›๋ณด๊ธฐ

Managed Harness

์ฝ”๋“œ ์—†์ด ์„ ์–ธ ์ŠคํŽ™๋งŒ์œผ๋กœ ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ด€๋ฆฌํ˜• ๋ฐฐํฌ ๋ฐฉ์‹

Managed Agent Harness

์—์ด์ „ํŠธ ์ •์˜๊ฐ€ ์ฝ”๋“œ์—์„œ API ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ โ€” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ Strands ์—”์ง„์ด ๋Œ€์‹  ์ˆ˜ํ–‰

  • API 2๊ฐœ โ€” CreateHarness ยท InvokeHarness
  • ์„ ์–ธ ์ŠคํŽ™ โ€” ๋ชจ๋ธ+๋„๊ตฌ+๋ฉ”๋ชจ๋ฆฌ+Skills
  • Per-invocation Override โ€” ์žฌ๋ฐฐํฌ ์—†์ด ํ˜ธ์ถœ๋งˆ๋‹ค ๋ณ€๊ฒฝ
  • ๊ธฐ๋ณธ ๋ชจ๋ธ Claude Sonnet 4.6
takeaway

์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์†Œ์œ ํ•ด์•ผ ํ•˜๋ฉด Runtime, ์„ ์–ธ ๋ฒ”์œ„๋กœ ์ถฉ๋ถ„ํ•˜๋ฉด Harness โ€” ์„ ํƒ ๊ธฐ์ค€ยท์ŠคํŽ™ ๋ฌธ๋ฒ•ยทexport ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒฝ๋กœ๋Š” Harness ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

PART 3 ยท ์ „๋‹ด ๋ชจ๋“ˆ ๋ง›๋ณด๊ธฐ

Gateway

์—์ด์ „ํŠธ๊ฐ€ ๋„๊ตฌยท์—์ด์ „ํŠธยท๋ชจ๋ธ์— ์ ‘๊ทผํ•˜๋Š” ๋‹จ์ผ ๋ณด์•ˆ ์ง„์ž…์ 

AgentCore Gateway

์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ์˜ ํ”„๋ก ํŠธ๋„์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ๋„๊ตฌ ํ—ˆ๋ธŒ โ€” ์ธ์ฆยท์ •์ฑ…ยท๊ด€์ธก์„ฑ์ด ์ค‘์•™์—์„œ ์ž๋™ ์ ์šฉ

  • ๋„๊ตฌ ์ถ”๊ฐ€ = Target ๋“ฑ๋ก โ€” ์—์ด์ „ํŠธ ์žฌ๋ฐฐํฌ ๋ถˆํ•„์š”
  • ์ฝ˜์†” Target protocol 4์ข… โ€” MCP ยท Inference ยท Agent(A2A) ยท Custom
  • ๋นŒํŠธ์ธ ์ปค๋„ฅํ„ฐ โ€” Web Search ยท Knowledge Bases
  • ์‹œ๋งจํ‹ฑ ๋„๊ตฌ ๊ฒ€์ƒ‰ โ€” ์ž์—ฐ์–ด๋กœ ๊ด€๋ จ ๋„๊ตฌ๋งŒ ์„ ๋ณ„
takeaway

LambdaยทREST APIยท๋‹ค๋ฅธ ์—์ด์ „ํŠธ๊ฐ€ ์ „๋ถ€ MCP ๋„๊ตฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค โ€” Target ๊ตฌ์„ฑยทInterceptorยท์ธ์ฆ ์—ฐ๋™์€ Gateway ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

PART 3 ยท ์ „๋‹ด ๋ชจ๋“ˆ ๋ง›๋ณด๊ธฐ

Memory

๋‹จ๊ธฐ(STM)์™€ ์žฅ๊ธฐ(LTM) 2๊ณ„์ธต์œผ๋กœ ์—์ด์ „ํŠธ์˜ ๊ธฐ์–ต์„ ๊ด€๋ฆฌํ˜•์œผ๋กœ ์ œ๊ณต

AgentCore Memory

์„ธ์…˜ ์•ˆ์˜ ์›๋ณธ ๋Œ€ํ™”๋Š” STM์—, ๋Œ€ํ™”์—์„œ ์ž๋™ ์ถ”์ถœํ•œ ๊ธฐ์–ต์€ LTM์— โ€” ์ €์žฅยท์ถ”์ถœยท๊ฒ€์ƒ‰ ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ด€๋ฆฌํ˜•

  • STM โ€” ์„ธ์…˜ ๋‚ด ์›๋ณธ ๋Œ€ํ™” ์ด๋ ฅ, ๋งŒ๋ฃŒ 7~365์ผ
  • LTM โ€” ๋Œ€ํ™”์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์„ธ์…˜ ๊ฐ„ ๊ธฐ์–ต
  • ์ถ”์ถœ ์ „๋žต 4์ข… โ€” Semantic ยท Summary ยท UserPreference ยท Episodic
  • Strands ์—ฐ๊ฒฐ โ€” AgentCoreMemorySessionManager ํ•œ ์ค„
takeaway

"์ด ๋Œ€ํ™”"๋Š” STM์ด, "์ด ์‚ฌ์šฉ์ž"๋Š” LTM์ด ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค โ€” ์ „๋žต๋ณ„ ๋™์ž‘ยท๋„ค์ž„์ŠคํŽ˜์ด์Šคยท์ฝ”๋“œ ์—ฐ๋™์€ Memory ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Identity & Policy

Inbound ยท Outbound ยท Cedar ยท Guardrails

PART 4 ยท Identity & Policy

Identity & Policy

๋ˆ„๊ฐ€ ์—์ด์ „ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์—์ด์ „ํŠธ๊ฐ€ ๋ฌด์—‡์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€ โ€” ๋‘ ๋ฐฉํ–ฅ์˜ ํ†ต์ œ

Identity & Policy

์ธ์ฆ(Identity)์€ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ถŒํ•œ(Policy)์€ ๋„๊ตฌ ๋‹จ์œ„๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค

  • Inbound โ€” ์—์ด์ „ํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํ˜ธ์ถœ์˜ ์ธ์ฆ
  • Outbound โ€” ์—์ด์ „ํŠธ๊ฐ€ ๋‚˜๊ฐ€๋Š” ํ˜ธ์ถœ์˜ ์ž๊ฒฉ ์ฆ๋ช…
  • Cedar โ€” ๋„๊ตฌ ์ ‘๊ทผ ์ •์ฑ… (ํ—ˆ์šฉยท์ฐจ๋‹จ)
  • Guardrails โ€” ์ฝ˜ํ…์ธ  ์•ˆ์ „ ํ•„ํ„ฐ
takeaway

๋“ค์–ด์˜ค๋Š” ํ˜ธ์ถœ๊ณผ ๋‚˜๊ฐ€๋Š” ํ˜ธ์ถœ์˜ ์ž๊ฒฉ ์ฆ๋ช…์€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ โ€” ์—์ด์ „ํŠธ ์ฝ”๋“œ์— ์‹œํฌ๋ฆฟ์ด ๋‚จ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PART 4 ยท Identity & Policy

์ธ์ฆ 2๋ฐฉํ–ฅ

๋“ค์–ด์˜ค๋Š” ํ˜ธ์ถœ์€ authorizer๊ฐ€, ๋‚˜๊ฐ€๋Š” ํ˜ธ์ถœ์€ Credential Provider๊ฐ€ โ€” ์ž๊ฒฉ ์ฆ๋ช…์€ ๋ฐฉํ–ฅ๋ณ„๋กœ ๋ถ„๋ฆฌ ๊ด€๋ฆฌ

Inbound (๋ˆ„๊ฐ€ ์—์ด์ „ํŠธ๋ฅผ ํ˜ธ์ถœ?)

  • AWS_IAM (SigV4) โ€” AWS ์„œ๋น„์Šคยท์—ญํ• 
  • CUSTOM_JWT โ€” Cognitoยท์™ธ๋ถ€ IdP์˜ ์ตœ์ข… ์‚ฌ์šฉ์ž
  • AUTHENTICATE_ONLY โ€” ์ธ์ฆ๋งŒ ์ˆ˜ํ–‰
  • NONE โ€” ๊ฐœ๋ฐœ ์ „์šฉ (ํ”„๋กœ๋•์…˜ ๊ธˆ์ง€)

RuntimeยทGateway ์ƒ์„ฑ ์‹œ authorizerType์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค โ€” AWS_IAM, CUSTOM_JWT, NONE, AUTHENTICATE_ONLY 4์ข…. JWT๋Š” Cognito Quick Create ๋˜๋Š” ๊ธฐ์กด IdP Discovery URL์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Outbound (์—์ด์ „ํŠธ๊ฐ€ ๋ญ˜ ํ˜ธ์ถœ?)

  • OAuth 2.0 โ€” SaaS API (Slack, GitHub)
  • API Key โ€” ์™ธ๋ถ€ MCP ์„œ๋ฒ„
  • IAM Role โ€” AWS ์„œ๋น„์Šค
  • Identity ์„œ๋น„์Šค์—์„œ ๊ด€๋ฆฌ

Token Vault๊ฐ€ ์ž๊ฒฉ ์ฆ๋ช…์„ ์•”ํ˜ธํ™” ๋ณด๊ด€ํ•˜๊ณ  OAuth ๊ฐฑ์‹ ๋„ ์ž๋™์ž…๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ์ฝ”๋“œ์— ์‹œํฌ๋ฆฟ ๋…ธ์ถœ ์—†์ด @requires_access_token ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ํˆฌ๋ช…ํ•˜๊ฒŒ ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.

PART 4 ยท Identity & Policy

Outbound ์ฃผ์ž… โ€” @requires_access_token

ํ† ํฐ์€ Token Vault๊ฐ€ ๊ด€๋ฆฌ โ€” ์ฝ”๋“œ๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ•˜๋‚˜๋กœ ์ฃผ์ž…๋งŒ

ํ•ต์‹ฌ ํฌ์ธํŠธ

provider_name
์‚ฌ์ „ ๋“ฑ๋กํ•œ Credential Provider โ€” OAuth ํด๋ผ์ด์–ธํŠธ ์ •๋ณด๋Š” Vault์—
auth_flow
M2M(๋จธ์‹  ๊ฐ„) ๋˜๋Š” USER_FEDERATION(์‚ฌ์šฉ์ž ์œ„์ž„ 3LO)
access_token ์ฃผ์ž…
๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ํ† ํฐ์„ ๋ฐ›์•„ ํ‚ค์›Œ๋“œ ์ธ์ž๋กœ ์ „๋‹ฌ โ€” ์ฝ”๋“œ์— ์‹œํฌ๋ฆฟ 0
๊ฐฑ์‹  ์ž๋™
๋งŒ๋ฃŒยท๋กœํ…Œ์ด์…˜์€ Identity ์„œ๋น„์Šค๊ฐ€ ์ฒ˜๋ฆฌ โ€” ์žฌ๋ฐฐํฌ ๋ถˆํ•„์š”

์ฝ”๋“œ

python
from bedrock_agentcore.identity import requires_access_token

# ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ Token Vault์—์„œ ํ† ํฐ์„ ๋ฐ›์•„ ์ฃผ์ž…
@requires_access_token(
    provider_name="github-provider",
    scopes=["repo", "read:user"],
    auth_flow="USER_FEDERATION",  # ์‚ฌ์šฉ์ž ์œ„์ž„ (3LO)
)
async def fetch_private_repos(*, access_token: str):
    # ์ฃผ์ž…๋œ ํ† ํฐ์œผ๋กœ ์ธ์ฆ ํ˜ธ์ถœ โ€” ์‹œํฌ๋ฆฟ ํ•˜๋“œ์ฝ”๋”ฉ ์—†์Œ
    headers = {"Authorization": f"Bearer {access_token}"}
    ...
PART 4 ยท Identity & Policy

Cedar ์ •์ฑ…

๋ˆ„๊ฐ€ ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ โ€” ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ธํ”„๋ผ ๋ ˆ๋ฒจ์—์„œ ์ œ์–ด

ํ•ต์‹ฌ ํฌ์ธํŠธ

permit / forbid
ํ—ˆ์šฉยท๊ฑฐ๋ถ€ ์„ ์–ธ โ€” forbid๊ฐ€ permit๋ณด๋‹ค ์šฐ์„ 
principal ยท when
๋ˆ„๊ฐ€ยท์–ด๋–ค ์กฐ๊ฑด์—์„œ โ€” when { context.input.ํ•„๋“œ } ์กฐ๊ฑด์œผ๋กœ ์ œ์•ฝ
action ยท resource
action์ด ๊ณง ๋„๊ตฌ(AgentCore::Action::"{Target}___{๋„๊ตฌ}"), resource๋Š” Gateway ARN
LOG_ONLY / ENFORCE
Policy engine์„ Gateway์— ์—ฐ๊ฒฐํ•  ๋•Œ์˜ ๋ชจ๋“œ โ€” ๊ด€์ฐฐ๋งŒ ๋˜๋Š” ์‹ค์ œ ์ฐจ๋‹จ

์ •์ฑ…

cedar
// ํ—ˆ์šฉ โ€” restart_server ๋„๊ตฌ ํ˜ธ์ถœ (action์ด ๊ณง Target___๋„๊ตฌ)
permit(
  principal,
  action == AgentCore::Action::"OpsTarget___restart_server",
  resource == AgentCore::Gateway::"<gateway-arn>"
);

// ์ฐจ๋‹จ โ€” delete_database ํ˜ธ์ถœ์€ ๋ช…์‹œ์ ์œผ๋กœ ๊ฑฐ๋ถ€ (forbid ์šฐ์„ )
forbid(
  principal,
  action == AgentCore::Action::"OpsTarget___delete_database",
  resource == AgentCore::Gateway::"<gateway-arn>"
);
PART 4 ยท Identity & Policy

Guardrails ์—ฐ๋™

AgentCore Policy์—์„œ Bedrock Guardrails๋ฅผ ์ง์ ‘ ๋ถ€์ฐฉ

์ฝ˜ํ…์ธ  ํ•„ํ„ฐ

์œ ํ•ด ์ฝ˜ํ…์ธ  ์ฐจ๋‹จ โ€” HATE, VIOLENCE, SEXUAL

PII ๋งˆ์Šคํ‚น

๊ฐœ์ธ์ •๋ณด ์ž๋™ ๋งˆ์Šคํ‚น โ€” ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ

์ฃผ์ œ ๊ฑฐ๋ถ€

๊ธˆ์ง€ ์ฃผ์ œ ์„ค์ • โ€” ๊ฒฝ์Ÿ์‚ฌ ๋น„๊ต, ๋‚ด๋ถ€ ์ •๋ณด ๋ˆ„์ถœ

takeaway

Cedar๊ฐ€ ํ–‰๋™(๋„๊ตฌ ์ ‘๊ทผ)์„, Guardrails๊ฐ€ ๋ฐœํ™”(์ฝ˜ํ…์ธ )๋ฅผ ํ†ต์ œ โ€” Policy ๋ ˆ์ด์–ด ํ•œ ๊ณณ์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต

AgentCore CLI ์„ค์น˜ โ€” ์ฒซ ์—์ด์ „ํŠธ๋ฅผ ๋กœ์ปฌ์—์„œ

์‹ค์Šต โ€” AgentCore CLI ์„ค์น˜

โฑ 15๋ถ„

AgentCore CLI๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ์‹ค์Šต์€ Runtime ์ „๋‹ด ๋ชจ๋“ˆ์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

ํ•™์Šต ๋ชฉํ‘œ

  • AgentCore CLI ์„ค์น˜
  • agentcore create๋กœ ์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • agentcore dev๋กœ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ
์—์ด์ „ํŠธ ์ฝ”๋“œ์— ์ง‘์ค‘ํ•˜๊ณ , ์ธํ”„๋ผ๋Š” AgentCore์— ๋งก๊ธฐ์„ธ์š”.

Runtime๋ถ€ํ„ฐ Policy๊นŒ์ง€ โ€” ์—์ด์ „ํŠธ ์ธํ”„๋ผ์˜ ์™„์ „๊ด€๋ฆฌํ˜• ์ „ํ™˜