PF-03 · Tencent · IaC
Tencent Cloud 감사 대비 Terraform
CloudAudit 추적을 서비스별로 코드에 정의해 위험한 변경을 COS 버킷에 남기는 Tencent Cloud 모듈 모음입니다.
- 역할
- 설계 · 구현
- 기간
- 개인 프로젝트 · 2026.11 공개
- CSP
- Tencent
- 규모
- 모듈 18종 · 예제 3개
- 핵심 기술
- Terraform · Tencent Cloud · CloudAudit · COS · CAM · CLB
- 18
- 공개한 Terraform 모듈
- 4
- 서비스별 감사 트랙
- 19
- 코드로 추적하는 감사 이벤트
한눈에 보기
문제
Tencent Cloud에서 누가 무엇을 바꿨는지 서비스별로 남겨야 했습니다. 또 provider 릴리스 주기가 불규칙해 버전이 바뀌면 코드 변경 없이도 plan이 달라질 수 있었습니다.
접근
CloudAudit 추적을 CAM, CVM, CBS, VPC 서비스별로 코드에 정의하고 COS 버킷의 서비스별 prefix에 저장합니다. provider는 모든 모듈에서 = 1.81.163으로 고정합니다.
결과
권한, 서버, 디스크, 보안그룹 변경 이벤트가 코드로 정의한 추적에 따라 COS에 남습니다. CreateApiKey와 AttachUserPolicy 같은 위험 이벤트도 포함합니다.
자세히 보기
서비스별 감사 트랙
이 코드가 하는 일: 감사 추적을 목록으로 정의하고, 항목마다 대상 서비스(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처럼 규칙이 적은 환경에서는 무엇을 직접 코드로 기록할지 스스로 정해야 한다는 점을 배웠습니다.