Show HN: Cynative – 라이브 인프라를 설명하는 읽기 전용 CLI (Go)
요약
Cynative는 라이브 인프라에 대한 읽기 전용 접근 권한을 가진 보안 에이전트 프레임워크입니다. 이 도구는 GitHub, AWS, GCP, Azure 등 다양한 클라우드 및 코드 스택을 통합하여 단일 질문으로 복잡한 보안 취약점을 추론하고 검증된 답변을 제공합니다. 모든 호출은 게이트를 통해 구조적으로 읽기 전용이므로 프로덕션 환경에 안전하게 적용할 수 있습니다.
핵심 포인트
- 읽기 전용 접근 권한의 보안 에이전트 프레임워크입니다.
- GitHub, AWS, GCP 등 다양한 스택을 통합하여 추론합니다.
- 단일 질문으로 복잡한 보안 취약점(권한 상승 등)을 분석합니다.
- 모든 호출은 게이트를 통해 구조적으로 읽기 전용이 보장됩니다.
자체 보안 에이전트 구축하기
라이브 인프라에 대한 읽기 전용 접근 권한을 가진 보안 에이전트를 위한 오픈 소스 프레임워크입니다.
Quickstart · Built-in agents · Your first agent · Docs
<!-- BEGIN agent-about -->인프라에 무엇이든 질문하세요. Cynative는 코드, 클라우드 및 런타임 전반에 걸쳐 최신 모델(frontier models)을 실행하여 GitHub, GitLab, AWS, GCP, Azure 및 Kubernetes를 하나의 시스템으로 추론하고 검증된 답변을 제공합니다.
cynative "내 클라우드에서 공개적으로 노출되었지만 그렇지 않아야 하는 것은 무엇인가?"
AWS, GCP, Azure, GitHub 및 Kubernetes용 45개의 내장 에이전트가 있습니다. 권한 상승(privilege escalation), 공개 노출(public exposure), 공급망(supply chain), 탐지 범위(detection coverage) 등 다양한 기능을 제공하며, 단 하나의 마크다운 파일로 자체 에이전트를 작성할 수도 있습니다.
하나의 질문이 전체 스택으로 퍼져나갑니다: Cynative는 일시적인 샌드박스에서 코드를 작성하고 실행하며, API를 병렬로 조회합니다. 발견된 모든 사항은 교차 확인되고 출처까지 추적됩니다.
코딩 에이전트(coding agents)나 MCP 서버와 달리, 구조적으로 읽기 전용입니다: 모든 호출은 자격 증명(credential)이 연결되기 전에 게이트가 설정되고 승인됩니다. 따라서 프로덕션 환경에 자신감을 가지고 적용할 수 있습니다.
<!-- END agent-about --> <p align="center"> <img src="https://raw.githubusercontent.com/cynative/cynative/HEAD/docs/assets/demo.gif" alt="cynative auditing a CI to cloud privilege escalation" width="900"> </p>에이전트가 얻는 것들
- 코드-투-런타임 (Code-to-runtime): AWS, GCP, Azure, 모든 K8s, GitHub 및 GitLab을 통해 추론합니다.
- 샌드박스 (Sandbox): 자체 네트워크나 호스트 접근 없이 대규모 연구를 위해 코드를 생성하고 실행합니다.
- 액션-게이트 (Action-gate): 자격 증명(credential)이 연결되기 전에 필요한 모든 IAM 액션을 해결하고 읽기 전용 정책을 적용합니다.
- 증거 기반 (Evidence-backed): 발견된 모든 내용을 교차 확인하여 검증합니다.
- 주권적 (Sovereign): 단일 바이너리로, 모델과 데이터는 사용자의 소유로 유지됩니다.
빠른 시작 (Quickstart)
LLM을 설치하고 설정하세요:
<!-- BEGIN quickstart-example -->brew install cynative/tap/cynative
export CYNATIVE_LLM_PROVIDER=anthropic
...
이는 이미 쉘(shell)에 있는 자격 증명을 가져옵니다. 내장 에이전트를 실행해 보세요:
cynative -p --agent aws-network-exposure
또는 무엇이든 물어보세요:
cynative -p "which IAM roles can escalate to admin?"
cynative -p "high-risk cloud permissions, trace each to the PR where it was granted"
cynative -p "cloud credentials leaked in source code and their current blast radius"
...
내장 에이전트 (Built-in agents)
45개의 에이전트가 바이너리에 내장되어 있습니다. 각 에이전트는 특정 질문에 대한 검토된 프롬프트입니다.
| 에이전트 (Agents) | 예시 (For example) | |
|---|---|---|
| AWS | 20 | aws-privilege-escalation, aws-public-storage, aws-unpatched-workloads, aws-supply-chain |
| ... |
cynative agents list # 모든 에이전트와 설명 보기
cynative agents show <name> # 실행될 정확한 프롬프트 보기
각 에이전트에 대한 한 줄 설명과 함께 전체 카탈로그는 docs/agents-catalog.md에 있습니다.
첫 번째 에이전트 만들기 (Your first agent)
cynative agents show <name>은 에이전트가 실행할 정확한 파일을 출력합니다. 자신만의 버전을 만들려면, 이를 복사하여 새 이름으로 에이전트 디렉터리(agents directory)에 붙여넣고 편집하세요:
mkdir -p ~/.cynative/agents
cynative agents show aws-public-datastores > ~/.cynative/agents/my-aws-public-datastores.md
...
에이전트는 마크다운 파일입니다. 이 파일은 description이라는 유일한 키를 가진 엄격한 YAML 프런트매터와 그 뒤의 프롬프트 본문으로 구성됩니다. 파일명이 에이전트의 이름이 됩니다. ~/.cynative/agents/에 있는 파일은 같은 이름의 내장(built-in) 파일보다 우선합니다. 따라서 두 파일을 모두 유지하려면 복사본에 고유한 이름을 부여하세요. 형식은 docs/agents.md를 참조하세요.
에이전트 실행하기
cynative -p --agent aws-public-datastores "AWS account 128149835728 only" # 작업과 함께
cynative -p --agent aws-public-datastores # 작업 없이
cynative --agent aws-public-datastores # 대화형 세션 시작```
`--agent`는 `-p`, `--auto-approve`, `--config` 및 파이프된 표준 입력(stdin)과 결합하여 사용됩니다. 따라서 같은 파일이라도 개발할 때는 대화형으로 실행하고, 안정화되면 비대화형으로 실행할 수 있습니다.
에이전트는 `~/.cynative/agents/`와 바이너리에 내장된 세트에서 읽어오며, 사용자 파일이 같은 이름의 내장 파일보다 우선합니다. `cynative agents list`는 소스별로 모든 에이전트를 보여주고 덮어쓴(shadowed) 복사본을 표시하며, `cynative agents show <name>`은 실행될 정확한 파일을 출력합니다.
## MCP를 가진 코딩 에이전트로는 이것이 불가능할까요?
| | 코딩 에이전트 + MCPs | Cynative |
|---|---|---|
| 처리량 (Throughput) | 호출당 하나의 작업 수행 | 샌드박스화된 코드를 작성하여 호출을 병렬로 분산 실행합니다. 토큰 수가 적고 답변 속도가 빠릅니다. |
| ... | | |
하나의 바이너리, 모델 엔드포인트, 계정만 있으면 됩니다. 감사하는 클라우드의 인스턴스에서 이를 실행하고, 해당 클라우드가 관리하는 추론(inference)을 통해 처리하며, 아무것도 환경 외부로 나가지 않습니다. 이는 귀하의 인프라 내 보안을, 귀하의 인프라 내부에서 제공합니다.
## 설치하기
**Homebrew** (macOS / Linux - 권장):
```bash
brew install cynative/tap/cynative
설치 스크립트 (macOS / Linux - 다운로드된 SHA-256을 릴리스 checksums.txt와 비교하여, 실패 시 종료(failing closed)합니다):
curl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh
Windows (Scoop):
scoop bucket add cynative https://github.com/cynative/scoop-bucket
scoop install cynative
업데이트 / 제거 (Update / uninstall)
| 방법 | 업데이트 | 제거 |
|---|---|---|
| Homebrew | brew upgrade cynative | brew uninstall cynative |
| ... |
Windows (PowerShell 스크립트): irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1 | iex; 제거는 & ([scriptblock]::Create((irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1))) -Uninstall을 사용합니다.
설치 스크립트 옵션: CYNATIVE_VERSION=v1.0.0으로 버전을 고정하거나, CYNATIVE_INSTALL_DIR로 대상 디렉터리를 변경할 수 있습니다 (기본값은 ~/.local/bin, sudo 불필요). 스크립트는 gh가 설치된 경우 GitHub 릴리스 증명(release attestation)을 확인합니다 (기본적으로 권고됨); 실패한 검사를 치명적인 오류로 만들려면 CYNATIVE_REQUIRE_ATTESTATION=1을 설정하세요. 높은 무결성을 가진 설치를 위해서는 main 대신 불변 태그에서 스크립트를 가져오세요.
macOS (수동): 릴리스 페이지에서 cynative_Darwin_arm64.pkg (Apple Silicon) 또는 cynative_Darwin_x86_64.pkg (Intel)를 다운로드하여 sudo installer -pkg <파일> -target /로 설치하거나 더블 클릭하세요. 이 파일들은 서명(signed), 공증(notarized)되었으며 **스테이플링(stapled)**되어 있어 첫 실행 시 Gatekeeper 프롬프트가 나타나지 않습니다. 원본 cynative_Darwin_*.tar.gz 아카이브는 스크립팅/CI용으로 유지됩니다. 격리된 tarball 바이너리의 첫 GUI 실행은 온라인 공증 확인을 위해 인터넷 연결이 필요합니다 (터미널/install.sh/Homebrew 사용에는 영향을 주지 않습니다).
Linux / Windows (수동): 릴리스 페이지에서 미리 빌드된 바이너리와 checksums.txt를 다운로드하고, SHA-256을 검증한 후 바이너리를 PATH에 넣어주세요. 의존성이 없는 단일 정적 바이너리입니다.
릴리스 서명 확인 (선택 사항). 신규 릴리스에는 checksums.txt.sigstore.json이 포함됩니다. 이는 이 리포지토리의 릴리스 워크플로우에 바인딩된 키 없는 인증서로 checksums.txt를 번들링하여 서명한 Sigstore입니다. 매니페스트를 인증한 다음, 아카이브를 이 매니페스트와 비교하세요:
cosign verify-blob checksums.txt \
--bundle checksums.txt.sigstore.json \
--certificate-identity "https://github.com/cynative/cynative/.github/workflows/release.yaml@refs/heads/main"
...
(Get-FileHash .\cynative_Windows_x86_64.zip -Algorithm SHA256).Hash.ToLower()
Select-String -Path checksums.txt -Pattern cynative_Windows_x86_64.zip
이것은 checksums.txt에 명시된 아카이브들을 포괄합니다. .pkg 설치 프로그램의 경우, 개발자 ID(Developer ID)로 서명 및 노타라이즈(notarized)되며 스테이플링(stapled)됩니다. 또한 모든 에셋은 GitHub 릴리스 증명서(gh release verify <tag>)에 의해 추가적으로 보호됩니다. 알아두어야 할 두 가지 제한 사항이 있습니다: cosign은 --trusted-root를 전달하지 않는 한 네트워크를 통해 Sigstore의 신뢰 루트(trust root)를 가져오며, 파일 이름에는 버전 정보가 포함되어 있지 않기 때문에 서명은 출처와 무결성을 증명할 뿐 어떤 릴리스에서 나온지(느슨한 파일 세트)는 증명하지 못합니다. 이 경우 릴리스 URL이나 gh release verify가 버전을 바인딩하는 역할을 합니다.
LLM 제공업체 (LLM providers)
Cynative는 내장된 Bifrost SDK를 통해 LLM과 통신하며, 거의 모든 AI 제공업체(OpenAI, Anthropic, Azure OpenAI, Amazon Bedrock, Google Vertex/Gemini, Cohere, Mistral, Groq, Ollama, vLLM 등)를 즉시 지원합니다. docs/providers/README.md에서 하나를 선택하고 해당 제공업체의 가이드를 따르세요.
<details> <summary><strong >간단한 예제 (Quick examples)</strong></summary># Google Vertex
export CYNATIVE_LLM_PROVIDER=vertex
export CYNATIVE_LLM_MODEL=gemini-3.1-pro-preview
...
다중 키 로드 밸런싱(multi-key load balancing), 사용자 지정 재시도 동작(custom retry behavior), 프록시 구성 또는 기타 Bifrost 기능의 경우, YAML 파일을 작성하세요:
llm:
provider: openai
model: gpt-5.5
...
지원되는 모든 provider의 설정 참조는 docs/providers/를 참고하세요.
세션 및 승인(Approvals)
cynative는 대화형 세션을 시작합니다 (화살표 키로 전체 줄 편집 및 히스토리 지원); cynative "task"는 작업을 실행한 후 인터랙티브 상태를 유지합니다; -p / --print은 단일 작업을 비대화형으로 실행하고 종료합니다. 이는 스크립트나 파이프에 유용합니다 (예: cat main.tf | cynative -p "misconfigurations가 있는지 이 Terraform을 검토해줘"). 종료 코드는 스크립트를 위한 판결 결과를 담고 있습니다: 보고서가 생성되면 0, 답변 없이 실행이 완료되면 2 (알림에 이유 명시 - 반복 또는 토큰 예산 부족, 비어 있거나 필터링된 모델 응답), 중단 시 130, SIGTERM 시 143, 기타 오류 발생 시 1입니다.
Cynative는 셸(shell)에 이미 있는 자격 증명(credentials)을 사용하여 스택을 호출합니다. 별도의 자격 증명 저장소를 유지하지 않습니다. 항상 필요한 최소 권한의 자격 증명을 제공하세요; 액션 게이트가 이를 대체할 수는 없습니다.
승인: 각 도구 호출은 단일 키 입력을 기다립니다: y는 한 번 실행하고, a는 해당 세션에서 해당 도구에 대한 모든 후속 호출을 취소합니다 (스크립트는 여전히 실행 전에 출력됩니다). 다른 어떤 키도 거부(denies)를 의미합니다. 제어 터미널이 없는 경우 --auto-approve를 사용하세요.
작업 중간 중단: 작업이 실행되는 동안, Esc 또는 Ctrl-C를 한 번 누르면 우아하게 중단할 수 있습니다 (에이전트는 이미 실행 중인 호출을 완료한 후, 멈추고 ⏸ Stopped를 출력합니다). 에이전트가 반복적인 도구 오류나 거부(rejections)에 직면하면 자동으로 멈추고, 어떤 부분에서 막혔는지 요약하며 누락된 정보를 요청합니다.
Bash 완성: 각 셸의 전체 설치 지침은 cynative completion <shell> --help를 참고하세요.
Cynative는 짧은 운영 푸터(timing, 토큰 사용량)를 stderr로 출력합니다. stdout을 리디렉션(cynative -p "..." > out.txt)하면 캡처된 답변이 깨끗하게 유지됩니다. --version은 버전, 커밋, 빌드 날짜, Go 버전 및 플랫폼을 출력합니다.
cynative doctor는 연구 세션을 시작하지 않고도 구성 및 커넥터 준비 상태를 검증합니다. --live-llm을 전달하면 설정된 모델에 도구 없는 왕복(round-trip) 테스트로 프로빙할 수도 있습니다.
리소스 및 비용 제어: 비감독적(unattended), 예약되거나 장기 지평선(long-horizon)의 실행에 대해 — cron, CI 또는 모든 트리거에 연결되는 경우 — 작업을 명시적으로 바인딩합니다. 주요 노브(config keys / env vars):
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Show HN (AI)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기