Skip to content

Commit 63a1f0b

Browse files
authored
Update README.md
1 parent f4e582f commit 63a1f0b

1 file changed

Lines changed: 71 additions & 26 deletions

File tree

README.md

Lines changed: 71 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,74 @@
22

33
이 저장소는 Jarvis 프로젝트의 백엔드 API 서버입니다. Teleport 클러스터와 상호작용하여 사용자 인증, 역할 기반 접근 제어(RBAC), 보안 SSH 세션 중계, AI 기반 감사 로그 분석 등 핵심 기능을 처리합니다.
44

5-
6-
✨ 주요 기능 (Features)
7-
8-
Teleport API 연동: tbot ID를 사용한 서비스 계정 인증 및 사용자 가장(Impersonation)을 통해 Teleport 리소스를 프로그래밍 방식으로 관리합니다.
9-
10-
RESTful API: 사용자, 역할(Role), 노드(Node), 감사 로그 등 Teleport의 주요 리소스를 관리하기 위한 CRUD API 엔드포인트를 제공합니다.
11-
12-
WebSocket 기반 SSH 중계: 웹 클라이언트와 Teleport SSH 세션 간의 실시간 양방향 통신을 중계합니다.
13-
14-
GitHub SSO 인증: GitHub OAuth2를 사용하여 사용자를 인증하고, 특정 팀 멤버십을 확인하여 접근을 제어합니다.
15-
16-
AI 기반 세션 분석: SSH 세션 종료 시, 해당 세션의 스크립트를 추출하여 Google Gemini API로 전송하고 잠재적 위협을 분석합니다.
17-
18-
19-
20-
🛠️ 기술 스택 (Tech Stack)
21-
22-
언어: Go
23-
24-
웹 프레임워크: Gin
25-
26-
인증/인가: Teleport, GitHub OAuth2, JWT
27-
28-
인프라: Docker, Docker Compose
29-
30-
로깅/분석: ELK Stack, Google Gemini API
5+
## ✨ 주요 기능 (Features)
6+
7+
* **Teleport API 연동**: `tbot` ID를 사용한 서비스 계정 인증 및 사용자 가장(Impersonation)을 통해 Teleport 리소스를 프로그래밍 방식으로 관리합니다.
8+
* **RESTful API**: 사용자, 역할(Role), 노드(Node), 감사 로그 등 Teleport의 주요 리소스를 관리하기 위한 CRUD API 엔드포인트를 제공합니다.
9+
* **WebSocket 기반 SSH 중계**: 웹 클라이언트와 Teleport SSH 세션 간의 실시간 양방향 통신을 중계합니다.
10+
* **GitHub SSO 인증**: GitHub OAuth2를 사용하여 사용자를 인증하고, 특정 팀 멤버십을 확인하여 접근을 제어합니다.
11+
* **AI 기반 세션 분석**: SSH 세션 종료 시, 해당 세션의 스크립트를 추출하여 Google Gemini API로 전송하고 잠재적 위협을 분석합니다.
12+
13+
## 🚀 설치 가이드
14+
15+
<details>
16+
<summary><strong>⚙️ 환경변수 설정 가이드 (클릭해서 열기)</strong></summary>
17+
18+
---
19+
20+
프로젝트를 실행하기 위해 필요한 환경변수 목록입니다.
21+
22+
### 📋 전체 환경변수 목록
23+
24+
| 변수명 | 설명 | 예시 |
25+
| :--- | :--- | :--- |
26+
| `CLIENT_ID` | GitHub OAuth App에서 발급받은 클라이언트 ID입니다. | `iv1.1234567890abcdef` |
27+
| `CLIENT_SECRET` | GitHub OAuth App에서 발급받은 클라이언트 시크릿입니다. | `gho_a1b2c3d4e5f6...` |
28+
| `DOCKERHUB_USERNAME` | Docker Hub 사용자 이름입니다. | `my-docker-id` |
29+
| `DOCKERHUB_TOKEN` | Docker Hub의 `Account Settings > Security`에서 생성한 Access Token입니다. | `dckr_pat_abcdefg...` |
30+
| `JWT_SECRET_KEY` | JWT 토큰 암호화를 위한 무작위 비밀 키입니다. (`openssl rand -base64 32` 명령어로 생성) | `AbcDef/123+gHiJkL...` |
31+
| `GCP_SA_KEY` | GCP `IAM > 서비스 계정`에서 생성한 JSON 형식의 서비스 계정 키입니다. | `{ "type": "service_account", ... }` |
32+
| `GEMINI_MODEL` | 사용할 Google Gemini AI 모델의 이름입니다. | `gemini-1.5-pro-latest` |
33+
| `ORG_NAME` | 연동할 GitHub 조직(Organization)의 이름입니다. | `my-github-org` |
34+
| `TEAM_SLUG` | 조직 내 특정 팀의 슬러그(URL용 이름)입니다. | `my-awesome-team` |
35+
| `CALLBACK_URL` | GitHub OAuth 인증 후 리디렉션될 주소입니다. | `https://mydomain.com:8080/callback` |
36+
| `GCP_PROJECT_ID` | 사용 중인 GCP 프로젝트의 고유 ID입니다. | `my-gcp-project-12345` |
37+
| `GCP_HOST` | 배포된 GCP VM 인스턴스의 외부 IP 주소입니다. | `34.56.78.90` |
38+
| `GCP_LOCATION` | GCP 리소스가 위치한 리전입니다. | `asia-northeast3` |
39+
| `GCP_USERNAME` | GCP VM 인스턴스 접속용 사용자 이름입니다. | `ubuntu` |
40+
| `GCP_SSH_KEY` | GCP VM 인스턴스 접속을 위한 비공개 SSH 키입니다. | `-----BEGIN OPENSSH PRIVATE KEY-----...` |
41+
| `TELEPORT_PROXY_ADDR` | Teleport 프록시 서비스 접속 주소입니다. | `https://mydomain.com:3080` |
42+
| `TELEPORT_AUTH_ADDR` | Teleport 인증 서버 접속 주소입니다. | `https://mydomain.com:3025` |
43+
44+
### 주요 환경변수 상세 설정 가이드
45+
46+
일반적으로 설정하기 헷갈리는 주요 환경변수에 대한 상세 가이드입니다.
47+
48+
#### **1. GitHub OAuth 인증 (`CLIENT_ID`, `CLIENT_SECRET`)**
49+
1. GitHub **Settings > Developer settings > OAuth Apps** 페이지로 이동합니다.
50+
2. **New OAuth App** 버튼을 클릭하여 새 앱을 등록합니다.
51+
3. 생성 후 발급된 **CLIENT_ID****CLIENT_SECRET**을 환경변수에 등록합니다.
52+
53+
#### **2. Docker Hub 접근 토큰 (`DOCKERHUB_TOKEN`)**
54+
GitHub Actions가 빌드된 이미지를 Docker Hub에 푸시(push)하기 위해 필요합니다.
55+
1. Docker Hub에 로그인 후, 우측 상단 프로필 > **Account Settings**로 이동합니다.
56+
2. **Security** 탭 > **New Access Token** 버튼을 클릭합니다.
57+
3. 생성된 토큰을 복사하여 환경변수에 등록합니다.
58+
59+
#### **3. GCP 서비스 계정 키 (`GCP_SA_KEY`)**
60+
1. **인스턴스 생성**: Compute Engine에서 `Ubuntu 24.04`, `e2-standard-8` (vCPU 8, 32GB RAM) 이상의 사양으로 VM 인스턴스를 생성합니다.
61+
2. **방화벽 설정**: 생성된 인스턴스의 네트워크 방화벽 규칙에서 `5601`, `8080`, `3080` 포트에 대한 TCP 인그레스(Ingress)를 허용합니다.
62+
3. **서비스 계정 생성 및 권한 부여**: **IAM & Admin > Service Accounts**에서 새 서비스 계정을 생성하고, **Vertex AI User** 역할을 부여합니다.
63+
4. **JSON 키 생성**: 생성된 서비스 계정의 **Keys** 탭 > **Add Key > Create new key**를 선택하고, **JSON** 타입을 선택하여 키를 생성하고 다운로드합니다.
64+
5. 다운로드한 JSON 파일의 **전체 텍스트**를 복사하여 환경변수에 등록합니다.
65+
66+
---
67+
</details>
68+
69+
## 🛠️ 기술 스택 (Tech Stack)
70+
71+
* **언어**: Go
72+
* **웹 프레임워크**: Gin
73+
* **인증/인가**: Teleport, GitHub OAuth2, JWT
74+
* **인프라**: Docker, Docker Compose
75+
* **로깅/분석**: ELK Stack, Google Gemini API

0 commit comments

Comments
 (0)