π 10λΆ λ§μ λλ΄λ μμ΄μ νΈ κ±°λ²λμ€ μμ κ°μ΄λ
August 4, 2026 Β· View on GitHub
10λΆ μμ κ±°λ²λμ€κ° μ μ©λ AI μμ΄μ νΈ νκ²½μ ꡬμΆν΄ 보μΈμ.
μ¬μ μꡬ μ¬ν: Python 3.11+ / Node.js 18+ / .NET 8.0+ μ€ νλ μ΄μ.
μν€ν μ² κ°μ
κ±°λ²λμ€ λ μ΄μ΄λ λͺ¨λ μμ΄μ νΈμ νλμ΄ μ€νλκΈ° μ μ μ΄λ₯Ό κ°λ‘μ±μ(intercept) νκ°ν©λλ€.
graph LR
A[AI μμ΄μ νΈ] -->|λꡬ νΈμΆ| B{κ±°λ²λμ€ λ μ΄μ΄}
B -->|μ μ±
νμΈ| C{μ μ±
μμ§}
C -->|νμ©| D[λꡬ μ€ν]
C -->|μ°¨λ¨| E[보μ μ°¨λ¨]
D --> F[κ°μ¬ λ‘κ·Έ]
E --> F
F --> G[OTEL / ꡬ쑰νλ λ‘κ·Έ]
1. μ€μΉ
κ±°λ²λμ€ ν΄ν· ν΅ν© ν¨ν€μ§λ₯Ό μ€μΉν©λλ€.
pip install agent-governance-toolkit[full]
λλ ν¨ν€μ§λ₯Ό κ°λ³λ‘ μ€μΉν μ μμ΅λλ€.
pip install agent-os-kernel # μ μ±
κ°μ + νλ μμν¬ μ°λ
pip install agentmesh-platform # μ λ‘ νΈλ¬μ€νΈ μ μμ¦λͺ
+ μ λ’° μΉ΄λ
pip install agent-governance-toolkit # OWASP ASI κ²μ¦ + λ¬΄κ²°μ± CLI
pip install agent-sre # SLO, μλ¬ λ²μ§, μΉ΄μ€μ€ ν
μ€νΈ
pip install agentmesh-runtime # μ€ν κ°λ
κ΄ + κΆν 격리 λ§
pip install agentmesh-marketplace # νλ¬κ·ΈμΈ λΌμ΄νμ¬μ΄ν΄ κ΄λ¦¬
pip install agentmesh-lightning # κ°ννμ΅(RL) νλ ¨ κ±°λ²λμ€
TypeScript / Node.js
npm install @microsoft/agent-governance-sdk
.NET
dotnet add package Microsoft.AgentGovernance
.csproj νμΌμ΄ μλ λλ ν°λ¦¬κ° μλλΌλ©΄ νλ‘μ νΈ κ²½λ‘λ₯Ό λͺ
μν΄μ μ€ννμΈμ.
dotnet add YourApp.csproj package Microsoft.AgentGovernance
Visual Studio Package Manager Consoleμμλ Default project λλ‘λ€μ΄μμ λμ νλ‘μ νΈλ₯Ό κ³ λ₯Έ λ€ λ€μ λͺ λ Ήμ μ¬μ©νμΈμ.
Install-Package Microsoft.AgentGovernance
2. μ€μΉ νμΈ
미리 ν¬ν¨λ μ κ² μ€ν¬λ¦½νΈλ₯Ό μ€νν©λλ€.
python scripts/check_gov.py
λλ agt CLIλ₯Ό μ§μ μ¬μ©νμ¬ νμΈν΄λ³Ό μλ μμ΅λλ€.
agt verify
agt verify --badge
3. 첫 λ²μ§Έ κ±°λ²λμ€ μμ΄μ νΈ λ§λ€κΈ°
governed_agent.py νμΌμ μμ±ν©λλ€.
from agent_control_specification import AgentControl, HostSession
runtime = AgentControl.from_path("policies/manifest.yaml")
session = HostSession(
runtime,
agent_id="research-agent",
session_id="quickstart-session",
)
result = session.pre_tool_call(
tool_name="delete_file",
args={"path": "/etc/passwd"},
)
print(result.verdict)
print(result.reason_code)
μ€ν κ²°κ³Ό νμΈ:
python governed_agent.py
μμ μΆλ ₯:
deny
policy:<reason-code>
κ±°λ²λμ€ λ μ΄μ΄λ μ€ν μ λͺ¨λ λꡬ νΈμΆμ κ°λ‘μ±λλ€. λ°λΌμ μμ΄μ νΈκ° delete_fileμ μ€ννκ±°λ κ°μΈ μ 보(PII)λ₯Ό μ μΆν μ μμ΅λλ€.
YAML νμΌλ‘λΆν° μ μ± λ‘λ©
μ€λ¬΄ νκ²½μμλ μΈλΌμΈ μ½λ λμ YAML νμΌλ‘ μ μ± μ μ μνμΈμ.
from agent_control_specification import AgentControl
runtime = AgentControl.from_path("policies/manifest.yaml")
첫 λ²μ§Έ κ±°λ²λμ€ μμ΄μ νΈ β TypeScript
governed_agent.ts νμΌμ μμ±ν©λλ€.
import { PolicyEngine, AgentIdentity, AuditLogger } from "@microsoft/agent-governance-sdk";
const identity = AgentIdentity.generate("my-agent", ["web_search", "read_file"]);
const engine = new PolicyEngine([
{ action: "web_search", effect: "allow" },
{ action: "delete_file", effect: "deny" },
]);
console.log(engine.evaluate("web_search")); // "allow" (νμ©)
console.log(engine.evaluate("delete_file")); // "deny" (μ°¨λ¨)
첫 λ²μ§Έ κ±°λ²λμ€ μμ΄μ νΈ β .NET
GovernedAgent.cs νμΌμ μμ±ν©λλ€.
using AgentGovernance;
using AgentGovernance.Policy;
var kernel = new GovernanceKernel(new GovernanceOptions
{
PolicyPaths = new() { "policies/default.yaml" },
EnablePromptInjectionDetection = true,
});
var result = kernel.EvaluateToolCall("did:mesh:agent-1", "web_search", new() { ["query"] = "AI news" });
Console.WriteLine($"Allowed: {result.Allowed}"); // μ μ±
μ΄ νμ©ν κ²½μ° True
result = kernel.EvaluateToolCall("did:mesh:agent-1", "delete_file", new() { ["path"] = "/etc/passwd" });
Console.WriteLine($"Allowed: {result.Allowed}"); // False
4. κΈ°μ‘΄ νλ μμν¬ μ°λ
μ΄ ν΄ν·μ μ£Όμν μμ΄μ νΈ νλ μμν¬μ μ°λμ΄ κ°λ₯ν©λλ€. λ€μμ LangChain μμμ λλ€.
from agent_control_specification import AgentControl
from agent_os.integrations.langchain_adapter import LangChainKernel
runtime = AgentControl.from_path("policies/manifest.yaml")
kernel = LangChainKernel(runtime=runtime)
μ¬νλ μ°λ ꡬνμ μν΄ νλ μμν¬λ³ μ μ© μ΄λν°λ₯Ό μ¬μ©ν μ μμ΅λλ€.
pip install agentmesh-langchain # LangChain μ΄λν°
pip install llamaindex-agentmesh # LlamaIndex μ΄λν°
pip install crewai-agentmesh # CrewAI μ΄λν°
μ§μλλ νλ μμν¬: LangChain, OpenAI Agents SDK, AutoGen, CrewAI, Google ADK, Semantic Kernel, LlamaIndex, Anthropic, Mistral, Gemini λ±.
5. OWASP ASI 2026 컀λ²λ¦¬μ§ νμΈ
λ°°ν¬ νκ²½μ΄ OWASP μμ΄μ νΈ λ³΄μ μνμ 컀λ²νλμ§ νμΈν©λλ€.
# ν
μ€νΈ μμ½ λ³΄κ³ μ
agt verify
# CI/CD νμ΄νλΌμΈμ μν JSON μΆλ ₯
agt verify --json
# READMEμ© λ°°μ§(Badge) μμ±
agt verify --badge
μμ ν μλ¬ μ²λ¦¬
ν΄ν·μ λͺ¨λ CLI λꡬλ λ΄λΆ μ 보 μ μΆμ λ°©μ§νλλ‘ μ€κ³λμμ΅λλ€. JSON λͺ¨λμμ λͺ λ Ήμ΄ μ€ν¨ν κ²½μ° λ€μκ³Ό κ°μ΄ μ μ λ μ€ν€λ§λ₯Ό λ°νν©λλ€.
{
"status": "error",
"message": "An internal error occurred during verification",
"type": "InternalError"
}
"File not found(νμΌμ μ°Ύμ μ μμ)"μ²λΌ μ μλ €μ§ μλ¬λ ꡬ체μ μΈ λ©μμ§λ₯Ό ν¬ν¨νμ§λ§, μμμΉ λͺ»ν μμ€ν μλ¬λ 보μ 무결μ±μ μν΄ λ§μ€νΉ μ²λ¦¬λ©λλ€.
6. λͺ¨λ λ¬΄κ²°μ± κ²μ¦
κ±°λ²λμ€ λͺ¨λμ΄ λ³μ‘°λμ§ μμλμ§ νμΈν©λλ€.
# κΈ°μ€ λ¬΄κ²°μ± λ§€λνμ€νΈ μμ±(Baseline integrity manifest)
agt integrity --generate integrity.json
# μ΄ν ν΄λΉ λ§€λνμ€νΈλ₯Ό κΈ°μ€μΌλ‘ κ²μ¦ μν
agt integrity --manifest integrity.json
λ μμ보기
| νλͺ© | μμΉ |
|---|---|
| μ 체 API λ νΌλ°μ€ (Python) | agent-governance-python/agent-os/README.md |
| TypeScript ν¨ν€μ§ λ¬Έμ | agent-governance-typescript/README.md |
| .NET ν¨ν€μ§ λ¬Έμ | agent-governance-dotnet/README.md |
| OWASP 컀λ²λ¦¬μ§ λ§΅ | ../../docs/compliance/owasp-agentic-top10-architecture.md |
| νλ μμν¬ ν΅ν© κ°μ΄λ | agent-governance-python/agent-os/src/agent_os/integrations/ |
| μμ μ ν리μΌμ΄μ | agent-governance-python/agent-os/examples/ |
| κΈ°μ¬νκΈ° | CONTRIBUTING.md |
| λ³κ²½ μ΄λ ₯ | CHANGELOG.md |
λ³Έ κ°μ΄λλ @davidequarracino λμ΄ μμ±νμ μ΄κΈ° ν΅ μ€ννΈ λ¬Έμλ€(#106, #108)μ λ°νμΌλ‘ μμ±λμμ΅λλ€.