멀티 클라우드 자산·감사 자동화 설계 및 구현
AWS, GCP, Tencent Cloud의 자산·권한·감사 로그를 공통 스키마로 모으고, 위험 이벤트가 생기면 바로 알리는 Python 도구입니다.
자원별 공통 스키마
이 코드가 하는 일: IAM 정보를 담는 데이터 클래스로, 세 클라우드의 계정 정보를 클라우드, 프로젝트, 사용자, 그룹, 권한, 생성 시각, 액세스 키, 마지막 로그인, 비밀번호 변경 시각 같은 같은 필드로 맞춥니다. frozen=True라 한 번 만든 기록은 바뀌지 않고, sheet 값 “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, gcp, tencent 아래에 각 클라우드의 이벤트 이름으로 들어 있고, 수집한 감사 로그의 이벤트가 이 목록에 있으면 Slack과 Telegram으로 바로 알립니다. 목록이 코드 밖에 있어 규칙을 바꿀 때 Python 코드를 고치지 않아도 됩니다.
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