매주 수요일 오전 11시(KST)에 GitHub Actions가 자동으로 실행되어, Claude 또는 GPT API로 보안 주간 리포트를 생성하고 이메일로 발송하는 자동화 시스템입니다.
블루팀 / 침해사고대응 / 보안관제에 관심 있는 보안 전공자를 위한 맞춤형 주간 뉴스레터를 자동으로 생성합니다.
- 🎯 대외활동 · 공모전 · 대회 (블루팀, CTF)
- 💼 채용 공고 (블루팀 우선, 기타 보안 직군)
- 🔥 주요 취약점 & CVE
- 📰 보안 뉴스 & 침해사고
- 🛠 주목할 도구 & 연구
레포지토리 → Settings → Secrets and variables → Actions → New repository secret
| Secret 이름 | 설명 | 예시 |
|---|---|---|
ANTHROPIC_API_KEY |
Anthropic API 키 (Claude 사용 시) | sk-ant-... |
OPENAI_API_KEY |
OpenAI API 키 (GPT 사용 시) | sk-... |
LLM_PROVIDER |
사용할 LLM (claude 또는 openai). 미설정 시 config.yml 기본값 사용 |
claude |
EMAIL_SENDER |
발신 Gmail 주소 | myemail@gmail.com |
EMAIL_PASSWORD |
Gmail 앱 비밀번호 (일반 비밀번호 ❌, 앱 비밀번호 ✅) | xxxx xxxx xxxx xxxx |
EMAIL_RECEIVER |
수신 이메일 주소 | receiver@example.com |
Gmail 앱 비밀번호 발급 방법
- Google 계정 → 보안 → 2단계 인증 활성화
- 보안 → 앱 비밀번호 → 앱 선택: "기타(직접 입력)" → 이름 입력 후 생성
- 생성된 16자리 비밀번호를
EMAIL_PASSWORDSecret에 등록
config.yml의 provider 값 한 줄만 변경하면 됩니다. 다른 파일은 수정 불필요합니다.
llm:
provider: "claude" # ← "openai" 로 바꾸면 GPT로 전환또는 GitHub Secret LLM_PROVIDER 값을 변경하면 config.yml보다 우선 적용됩니다.
- 레포지토리 → Actions 탭 클릭
- 좌측에서 보안 주간 리포트 자동 생성 워크플로우 선택
- 우측 상단 Run workflow 버튼 클릭
- 브랜치 선택 후 Run workflow 확인
# 1. 의존성 설치
pip install -r requirements.txt
# 2. 환경변수 설정
export ANTHROPIC_API_KEY="sk-ant-..."
export EMAIL_SENDER="myemail@gmail.com"
export EMAIL_PASSWORD="xxxx xxxx xxxx xxxx"
export EMAIL_RECEIVER="receiver@example.com"
# (선택) LLM_PROVIDER 미설정 시 config.yml 기본값 사용
export LLM_PROVIDER="claude"
# 3. 리포트 생성 실행
python scripts/generate_report.py생성된 리포트는 reports/YYYY-MM-DD.md 파일로 저장되고 이메일로 발송됩니다.
security-weekly-report/
├── .github/
│ └── workflows/
│ └── weekly-report.yml # GitHub Actions 스케줄
├── scripts/
│ ├── generate_report.py # 메인 실행 스크립트
│ ├── llm/
│ │ ├── __init__.py # get_llm() 팩토리 함수
│ │ ├── base.py # BaseLLM 추상 클래스
│ │ ├── claude.py # Claude (web_search 툴 포함)
│ │ └── openai.py # GPT-4o (browsing 포함)
│ └── notifier/
│ ├── __init__.py
│ └── email_sender.py # Gmail SMTP 발송 (마크다운 → HTML)
├── reports/ # 날짜별 리포트 누적 저장
├── config.yml # LLM/이메일/섹션 설정
├── requirements.txt
└── README.md