본문으로 건너뛰기
프로젝트 목록

PF-05 · Multi-cloud · Python

멀티 클라우드 자산·감사 자동화

AWS, GCP, Tencent Cloud의 자산·권한·감사 로그를 공통 스키마로 모으고, 위험 이벤트가 생기면 바로 알리는 Python 도구입니다.

역할
설계 · 구현
기간
개인 프로젝트 · 2026.11 공개
CSP
AWS · GCP · Tencent
규모
클라우드 3개 · 수집기 7종 · 감사 액션 49종
핵심 기술
Python · boto3 · Google Cloud SDK · Tencent Cloud SDK · Google Sheets · Slack · Telegram
GitHub
3
공개 코드가 다루는 클라우드
7
자원 종류별 수집기
49
추적하는 감사 액션 (16종은 즉시 알림)

한눈에 보기

AWSGCPTencent교차 계정 역할iamfirewallinstanceloadbalancervpcaudit_logunused공통 스키마Google SheetsSlackTelegram위험 이벤트 즉시 알림연도/월 보관
감사 시트는 월 1회 CSV로 떠서 연도/월 폴더에 보관합니다.

문제

세 클라우드는 같은 개념을 서로 다른 형태로 돌려줍니다. 권한이나 방화벽을 비교하려면 사람이 세 형식을 맞춰 읽어야 했습니다.

접근

계정별로 STS AssumeRole 등 교차 계정 역할로 접근하고, 자원 종류별 수집기 7개로 모은 결과를 자원별 데이터 클래스 하나로 정규화합니다. Google Sheets와 CSV로 내보내고, 위험 이벤트 16종은 critical_events.yaml 기준으로 Slack과 Telegram에 바로 보냅니다.

결과

바탕이 된 실무 도구는 Azure를 포함한 4개 클라우드를 매일 새벽에 점검해 월말 며칠의 수동 점검을 없앴고, Terraform 기본값과 CI 관문과 함께 보안 지적 조치율을 60%에서 85% 이상으로 올리는 데 기여했습니다. 이 수치는 실무 결과이며 이 레포에서 측정한 값은 아닙니다.

자세히 보기

위험 이벤트 규칙AWSGCPTencentAttachUserPolicyCreateAccessKeyStopInstancesTerminateInstancesModifyInstanceAttributeSetIamPolicyCreateServiceAccountKeyinstances.stopinstances.deleteinstances.setMachineTypeAttachUserPolicyAttachUserPoliciesCreateApiKeyStopInstancesTerminateInstancesResetInstancesTypecritical_events.yaml 에서 규칙을 바꿉니다SlackTelegram
목록에 있는 이벤트만 Slack과 Telegram으로 즉시 보냅니다.
미사용 자원 탐지Elastic IPSecurity GroupEBS 볼륨어디에도 연결되지 않음어떤 ENI에도 안 붙음인스턴스에 안 붙음발견발견발견GCP · Tencent도 같은 기준으로 유휴 자원을 찾습니다
GCP와 Tencent에서도 같은 기준으로 유휴 IP·디스크·방화벽을 찾습니다.

자원별 공통 스키마

이 코드가 하는 일: 세 클라우드의 IAM 정보를 같은 필드로 정규화합니다.

@dataclass(frozen=True)
class IamRecord(Record):
    sheet: ClassVar[str] = "IAM"
    cloud: str
    project: str
    project_id: str
    user_name: str
    user_id: str
    user_group: str = ""
    permission: str = ""
    user_creation_time: str = ""
    access_key: str = ""
    access_key_creation_time: str = ""
    last_login: str = ""
    password_last_changed: str = ""

위험 이벤트는 데이터로

이 코드가 하는 일: 즉시 알릴 이벤트를 코드 밖 목록으로 관리합니다.

aws:
  - AttachUserPolicy
  - CreateAccessKey
  - StopInstances
  - TerminateInstances
  - ModifyInstanceAttribute
gcp:
  - SetIamPolicy
  - CreateServiceAccountKey
  - v1.compute.instances.stop
  - v1.compute.instances.delete
  - v1.compute.instances.setMachineType
tencent:
  - AttachUserPolicy
  - AttachUserPolicies
  - CreateApiKey
  - StopInstances
  - TerminateInstances

배운 점

위험 이벤트 목록을 코드가 아니라 데이터로 두면 보안 담당자가 Python을 읽지 않고도 규칙을 검토하고 고칠 수 있습니다.

다음에 개선할 점

GCP와 Tencent 경로는 실제 계정이 아니라 mock으로 테스트했습니다. Tencent 다중 계정 접근에는 계정마다 CAM 역할이 필요합니다.

관련 현장 노트

Open to work · 클라우드 인프라/보안