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

PF-03 · Tencent · IaC

Tencent Cloud 감사 대비 Terraform

CloudAudit 추적을 서비스별로 코드에 정의해 위험한 변경을 COS 버킷에 남기는 Tencent Cloud 모듈 모음입니다.

역할
설계 · 구현
기간
개인 프로젝트 · 2026.11 공개
CSP
Tencent
규모
모듈 18종 · 예제 3개
핵심 기술
Terraform · Tencent Cloud · CloudAudit · COS · CAM · CLB
GitHub
18
공개한 Terraform 모듈
4
서비스별 감사 트랙
19
코드로 추적하는 감사 이벤트

한눈에 보기

CloudAudit 추적 → COS 버킷COS 버킷CAMCVMCBSVPCcam/cvm/disk/vpc/AddUserCreateApiKeyAttachUserPolicyRunInstancesTerminateInstancesResizeDiskCreateSecurityGroupPoliciesaudit 트랙 4개 · 서비스별 COS prefix빨간 테두리: 위험 이벤트
누가 무엇을 바꿨는지 COS에 서비스별로 쌓입니다. 한 번에 한 종류씩 읽을 수 있습니다.

문제

Tencent Cloud에서 누가 무엇을 바꿨는지 서비스별로 남겨야 했습니다. 또 provider 릴리스 주기가 불규칙해 버전이 바뀌면 코드 변경 없이도 plan이 달라질 수 있었습니다.

접근

CloudAudit 추적을 CAM, CVM, CBS, VPC 서비스별로 코드에 정의하고 COS 버킷의 서비스별 prefix에 저장합니다. provider는 모든 모듈에서 = 1.81.163으로 고정합니다.

결과

권한, 서버, 디스크, 보안그룹 변경 이벤트가 코드로 정의한 추적에 따라 COS에 남습니다. CreateApiKey와 AttachUserPolicy 같은 위험 이벤트도 포함합니다.

자세히 보기

클라이언트CLBL7 HTTPS 443규칙 기반 전달L4 TCP_SSL 9443게임 트래픽CVM 백엔드HTTP → HTTPS 리다이렉트:8080:9000provider = 1.81.163 (정확한 버전 고정)
이 구성은 provider를 = 1.81.163으로 고정한 모듈로 만듭니다. Tencent provider는 릴리스 주기가 불규칙합니다.

서비스별 감사 트랙

이 코드가 하는 일: 감사 추적을 목록으로 정의하고, 항목마다 대상 서비스(resource_type), 기록할 이벤트 이름, 저장 위치를 지정합니다. CAM 트랙은 사용자 추가·삭제, API 키 생성·삭제, 정책 연결·해제 같은 권한 이벤트를, CVM 트랙은 서버 생성·종료·중지·시작, 사양 변경, 디스크 연결·해제 이벤트를 기록합니다. 두 트랙 모두 COS에 저장하지만 prefix를 cam, cvm으로 나눠, 나중에 서비스별로 로그를 따로 읽고 관리할 수 있습니다.

  audit_tracks = [
    {
      name          = "iam_trackingset"
      resource_type = "CAM"
      event_names   = ["AddUser", "DeleteUser", "CreateApiKey", "DeleteApiKey", "AttachUserPolicy", "DetachUserPolicy"]
      action_type   = "*"
      storage = {
        storage_prefix = "cam"
        storage_type   = "cos"
      }
    },
    {
      name          = "vm_trackingset"
      resource_type = "CVM"
      event_names   = ["RunInstances", "TerminateInstances", "StopInstances", "StartInstances", "ResetInstancesType", "AttachDisks", "DetachDisks"]
      action_type   = "*"
      storage = {
        storage_prefix = "cvm"
        storage_type   = "cos"
      }
    },

provider 버전 고정

이 코드가 하는 일: Terraform 본체는 1.9 이상 2.0 미만으로 범위를 두고, tencentcloud provider는 = 1.81.163 한 버전으로 정확히 고정합니다. 범위가 아닌 정확한 버전으로 묶었기 때문에 provider의 새 릴리스가 나와도 자동으로 올라가지 않고, 코드가 같으면 plan 결과도 같게 유지됩니다.

terraform {
  required_version = ">= 1.9, < 2.0"

  required_providers {
    tencentcloud = {
      source  = "tencentcloudstack/tencentcloud"
      version = "= 1.81.163"
    }
  }
}

배운 점

감사 로그는 남기는 것보다 나중에 읽을 수 있게 나누는 것이 더 중요했습니다. 여러 이벤트를 한 트랙에 섞지 않고 CAM, CVM, CBS, VPC 서비스별 트랙과 COS prefix로 나누면, 검토하는 사람이 권한 변경이나 서버 변경처럼 한 종류씩 읽을 수 있고 보관 기간도 종류별로 따로 정할 수 있습니다. 또 provider를 정확한 버전으로 고정하는 일은 단순한 습관이 아니라, 코드가 그대로인데 plan이 바뀌는 일을 막는 감사 대비 장치라는 것을 알게 됐습니다. 검사 도구를 통과했다는 사실도 그 도구가 얼마나 많은 규칙을 갖고 있느냐에 따라 의미가 달라서, Tencent Cloud처럼 규칙이 적은 환경에서는 무엇을 직접 코드로 기록할지 스스로 정해야 한다는 점을 배웠습니다.

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

테마 고르기

사원증을 누르면 그 테마로, 보던 내용과 같은 곳으로 이동합니다. 끌면 흔들리기만 합니다.

처음 화면으로 →