Skip to main content
Glama
songyi-noh

Azure Key Vault MCP

by songyi-noh
README.md
# Azure Key Vault 관리 Agent (MCP)

**Azure Key Vault의 Secret 및 Certificate 관리 전문 MCP 서버**

## 🎯 이 Agent가 하는 일

### ✅ 전문 분야

- **Secret 관리**
  - Secret 등록/조회/목록/삭제
  - Secret 버전 관리

- **Certificate 관리**
  - 인증서 등록 (PFX, PEM, CRT 등 모든 형식 지원)
  - 인증서 형식 자동 변환 (PEM/CRT → PFX)
  - 인증서 체인 import
  - 인증서 조회/목록/삭제
  - 자체 서명 인증서 생성

- **인증 관리**
  - Azure CLI 인증 자동 체크
  - Key Vault 목록 조회 및 선택

### ❌ 이 Agent가 하지 않는 일

- App Service 배포
- Virtual Machine 관리
- 네트워크 설정
- Storage 관리
- 기타 Azure 리소스 관리

→ **Key Vault Secret/Certificate 관리만 전문**으로 다룹니다.

## 💬 사용 예시

### 인증서 교체

```
You: ssl 인증서 교체가 필요해

AI: 
✅ 인증 완료
📋 Key Vault 목록: 
1. kv-prod-01
2. kv-test-01

어느 Key Vault인가요? 

You: kv-prod-01

AI:
✅ kv-prod-01 선택됨
📋 현재 인증서:
1. ssl-cert-2024 (만료: 2025-06-30)
2. api-cert (만료: 2025-12-31)

어떤 인증서를 교체하시겠어요?

You: ssl-cert-2024

AI:
새 인증서 파일 형식이 무엇인가요?  (PFX/PEM/CRT)

You: PFX 파일 있어

AI:
PFX 파일을 base64로 인코딩해주세요: 
```bash
base64 -i new-cert.pfx | pbcopy
```
그리고 붙여넣어 주세요. 
비밀번호도 알려주세요.

You: [base64 내용], 비밀번호는 "pass123"

AI: 
✅ 인증서 'ssl-cert-2024' 교체 완료! 
Thumbprint: a1b2c3d4... 
만료일: 2026-12-31
```

### Secret 조회

```
You: db-password secret 값 알려줘

AI:
[자동으로 Key Vault 선택되어 있다면]
🔐 Secret 'db-password'
값: MySecretPassword123
버전: abc123
수정일: 2025-12-09
```

### 빠른 등록

```
You: kv-prod의 "api-key"로 "xyz789" secret 등록해줘

AI:
[select_keyvault 자동 실행]
[set_secret 자동 실행]
✅ Secret 'api-key' 저장 완료
버전: def456
```

## 📦 설치

### macOS/Linux

```bash
git clone https://github.com/songyi-noh/azure-keyvault-mcp.git
cd azure-keyvault-mcp
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
az login
```

### Windows

```powershell
git clone https://github.com/songyi-noh/azure-keyvault-mcp.git
cd azure-keyvault-mcp
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
az login
```

> **참고:** Windows에서 Python이 설치되어 있지 않다면 [Python 공식 사이트](https://www.python.org/downloads/)에서 다운로드하세요.

## ⚙️ MCP 서버 설정

### Cursor 설정

```json
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "azure-keyvault": {
      "command": "/절대경로/azure-keyvault-mcp/venv/bin/python",
      "args": ["/절대경로/azure-keyvault-mcp/server.py"]
    }
  }
}
```

### Claude Desktop 설정

Claude Desktop에서도 이 MCP 서버를 사용할 수 있습니다.

**macOS:**
```json
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "azure-keyvault": {
      "command": "/절대경로/azure-keyvault-mcp/venv/bin/python",
      "args": ["/절대경로/azure-keyvault-mcp/server.py"]
    }
  }
}
```

**Windows:**
```json
// %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "azure-keyvault": {
      "command": "C:\\절대경로\\azure-keyvault-mcp\\venv\\Scripts\\python.exe",
      "args": ["C:\\절대경로\\azure-keyvault-mcp\\server.py"]
    }
  }
}
```

> **💡 Windows에서 경로 찾는 방법:**
> 
> 1. **PowerShell에서 경로 확인:**
>    ```powershell
>    cd C:\Users\YourName\azure-keyvault-mcp
>    (Get-Location).Path
>    ```
> 
> 2. **또는 파일 탐색기에서:**
>    - 프로젝트 폴더를 열고 주소창을 클릭하면 전체 경로가 표시됩니다
>    - 예: `C:\Users\YourName\azure-keyvault-mcp`
> 
> 3. **설정 파일 예시 (실제 경로):**
>    ```json
>    {
>      "mcpServers": {
>        "azure-keyvault": {
>          "command": "C:\\Users\\YourName\\azure-keyvault-mcp\\venv\\Scripts\\python.exe",
>          "args": ["C:\\Users\\YourName\\azure-keyvault-mcp\\server.py"]
>        }
>      }
>    }
>    ```
> 
>    > **중요:** Windows 경로에서는 백슬래시(`\`)를 두 개(`\\`)로 이스케이프해야 합니다.

**Linux:**
```json
// ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "azure-keyvault": {
      "command": "/절대경로/azure-keyvault-mcp/venv/bin/python",
      "args": ["/절대경로/azure-keyvault-mcp/server.py"]
    }
  }
}
```

> **참고:** 설정 파일을 수정한 후 Claude Desktop을 재시작해야 합니다.

## 🛠️ 지원 도구

| 카테고리 | 도구 | 설명 |
|---------|------|------|
| **인증** | check_azure_auth | Azure 인증 상태 확인 |
| **Key Vault** | list_keyvaults | Key Vault 목록 조회 |
| | select_keyvault | Key Vault 선택 |
| **Secret** | set_secret | Secret 등록/업데이트 |
| | get_secret | Secret 조회 |
| | list_secrets | Secret 목록 |
| | delete_secret | Secret 삭제 |
| **Certificate** | import_certificate_from_pfx | PFX 인증서 import |
| | convert_pem_to_pfx_and_import | PEM → PFX 변환 후 import |
| | import_crt_certificate | CRT → PFX 변환 후 import |
| | import_bundle_certificate | 번들 PEM → PFX |
| | import_certificate_with_chain | 체인 포함 import |
| | generate_self_signed_cert | 자체 서명 인증서 생성 |
| | get_certificate | 인증서 조회 |
| | list_certificates | 인증서 목록 |
| | delete_certificate | 인증서 삭제 |
| | detect_certificate_format | 인증서 형식 감지 |
| | import_certificate_with_auto_chain | 파일 기반 인증서 import (체인 자동 감지) |

## 🧪 테스트용 인증서 생성

기능 테스트를 위해 가짜 인증서를 생성할 수 있습니다.

### 간단한 인증서 (체인 없음)

```bash
# 기본 사용 (test.example.com)
./generate_simple_cert.sh

# 커스텀 도메인 및 디렉토리
./generate_simple_cert.sh ./my-certs mydomain.com
```

생성되는 파일:
- `server.crt` - 서버 인증서
- `server.key` - 서버 개인키

### 체인 인증서 포함 (루트 CA + 중간 CA + 서버)

```bash
# 기본 사용 (./test-certs 디렉토리에 생성)
./generate_test_certs.sh

# 커스텀 디렉토리
./generate_test_certs.sh ./my-test-certs
```

생성되는 파일:
- `server.crt` / `server.key` - 서버 인증서 및 개인키
- `intermediate-ca.crt` - 중간 CA 인증서 (체인 테스트용)
- `root-ca.crt` - 루트 CA 인증서
- `server-chain.crt` - 서버 + 중간 CA 체인
- `server-fullchain.crt` - 전체 체인 (서버 + 중간 + 루트)

### 테스트 예시

```python
# 체인 자동 감지 테스트
# intermediate-ca.crt가 같은 디렉토리에 있으면 자동으로 감지됨
import_certificate_with_auto_chain(
    name="test-cert",
    cert_path="./test-certs/server.crt",
    key_path="./test-certs/server.key"
)

# 체인 패턴 지정 테스트
import_certificate_with_auto_chain(
    name="test-cert",
    cert_path="./test-certs/server.crt",
    key_path="./test-certs/server.key",
    chain_patterns=["intermediate*.crt", "chain*.pem"]
)
```

## 🤝 기여

Pull Request 환영합니다! 

**전문 분야:** Key Vault Secret/Certificate 관리에 집중