목표 설정
근두운 팀 프로젝트에서는 GitHub Organization을 이용해서, AWS 인프라를 IaC로 관리하며 우리는 Terraform 코드를 사용할 것이다.
근두운 팀 AWS 계정에 Wazuh SIEM을 구축하기 위해서는 콘솔에서 실습한 것처럼 Wazuh EC2 생성을 위한 기본적인 네트워크 뼈대가 필요하다.
우리는 IaC로 인프라를 구축하고 있고, 온프레미스 환경과는 달리 클라우드 환경이 가진 특성 덕분에 이후 확장 및 변경에도 유연하게 대응할 수 있다.
그래서, 현재 단계에서는 Wazuh SIEM 구축을 위한 최소한의 네트워크만을 구성하는 Terraform 코드를 설계하고, 팀원들이 Wazuh Dashboard에 접근하여 서비스를 사용해보는 경험을 갖는 것을 목표로 하였다.
Wazuh Dashboard는 HTTPS 포트로 접속하게 되면, UI를 제공해준다. 이를 위해서는 Wazuh EC2의 보안 그룹에서 인바운드 정책 설정 시, 팀원들의 PC 공인 IP를 전부 받아서 TCP/443 포트를 허용해주어야 한다.
하지만, 위와 같은 방식은 네트워크 환경이 바뀌게 되면 다시 공인 IP를 인바운드 정책에 넣어줘야 한다는 단점이 있다.
그렇다고 인바운드 정책에
“0.0.0.0/0”을 할 수는 없으니 다른 방법을 찾아보던 중, AWS Systems Manager(SSM)의 Session Manager 포트 포워딩 기능을 사용하면 인바운드 정책 없이도 Dashboard 접근이 가능하다는 것을 알게되었다.포트 포워딩을 통해 로컬 포트와 Wazuh EC2 인스턴스의 Dashboard 포트를 연결해주면, 세션이 유지되는 동안 팀원들은
https://localhost:<로컬 포트 주소>로 Wazuh Dashboard 접속이 가능하다.aws ssm start-session \ --target <wazuh_instance_id> \ --document-name AWS-StartPortForwardingSession \ --parameters '{"portNumber":["443"],"localPortNumber":["56789"]}' \ --region ap-northeast-2
하지만, 이 동작도 누구나 할 수 있는 것은 아니다.
먼저 SSM 접근 대상인 Wazuh EC2는 SSM 관련 IAM Role을 가져야 한다.
그리고, 팀원의 PC에는 AWS CLI와 SSM Plugin 설치가 되어있어야 하고,
ssm:StartSession 권한이 있는 자격증명이어야 SSM 포트 포워딩이 가능하다. 선행 조건이 복잡해보이지만, 오히려 보안적으로는 안전하다고 볼 수 있다. 공개 인바운드 포트를 열지 않아 공격 표면을 줄일 수 있고, 아무나 세션을 얻어서 Dashboard에 접근하는 것이 아닌 IAM Role에 의해 권한이 있는 사람만이 접속할 수 있기 때문이다. 필요에 따라 IAM Role을 Assume할 수 있는 권한을 부여・회수하는 방식으로 관리할 수 있게 되는 것이다.
그렇다고
ssm:StartSession 권한을 대상 Session 문서의 범위 제한 없이 넓게 부여하면, 포트 포워딩뿐만 아니라 서버 Shell 접속도 가능해질 수 있다. 따라서 팀원의 역할에 따라 AWS-StartPortForwardingSession(포트 포워딩)과 SSM-SessionManagerRunShell(서버 Shell 접속) 리소스를 각각 허용하도록 IAM Role의 권한을 분리하는 것이 중요하다.우리 환경에서는 현재 IAM Role을 Assume하는 방법론을 적용하지 않고 있기 때문에, User가 속한 Group을 통해 권한을 직접 받는 방식으로 설계하였다.
우선 포트 포워딩에 필요한 정책과 서버 Shell 접속에 필요한 정책을 분리해서 생성하였고, 포트 포워딩 정책은 모든 팀원들이 사용할 수 있도록 전 그룹에 부여하였다. Shell 접속 정책은 관리자를 지정해 콘솔에서 직접 부여하는 방식으로 운영한다.
하지만, 근두운 팀 프로젝트에서는 IAM User의 장기 액세스 키 사용을 하지 않고 있어
ssm:StartSession 권한이 있어도 AWS CLI 사용이 제한된다. 권한은 있지만 CLI는 그래서 너가 누구인데? 를 물어보게 되는 것이다.이 문제는
aws login을 통해 해소할 수 있다. aws login은 Console 로그인을 통해 CLI에서 사용할 수 있는 임시 자격증명을 발급해주기 때문에 IAM User의 장기 액세스 키를 직접 생성・저장하지 않고도 AWS CLI를 사용할 수 있게 된다.Terraform 코드 작성
그러면 이제 설정한 목표를 달성하기 위한 Terraform 코드 작성을 시작한다.
Terraform 코드는 통상적으로
main.tf, variables.tf, outputs.tf로 구분해서 작성한다고 설명하지만, 이후 리팩토링과 관리를 위해 main.tf 없이 IAM, Network, EC2, Security Group으로 구분해서 작성할 것이다.Terraform 코드로 완성될 네트워크 구조는 다음과 같다.
graph TD
subgraph IN["관리자 환경"]
AD("Admin PC")
end
INT(("Internet")) --> AWS["SSM 서비스"]
IG("Internet Gateway")
subgraph V["VPC 10.50.0.0/16"]
subgraph PS["Public Subnet 10.50.10.0/24"]
SG["Security Group<br/>Inbound 없음<br/>Outbound TCP 443 허용"] -.- |정책 적용|PS1["EC2: Wazuh<br/>(Manager, Indexer, Dashboard)"]
end
end
INT <--> IG
AD <--> AWS
IG --- V
PS1 -- SSM・HTTPS 443 --> IGvariables.tf
Terraform 코드에서 사용할 변수들을 정의하는 곳이다.
네트워크 변경, 확장 등을 고려하여 변경 가능성이 있는 주소 범위를 정의하거나 코드 작성 시 tags 의 prefix로 통일감을 주기 위해 활용한다.
코드
# ======================================================= # Project Name 변수 (tags 에 활용) # ======================================================= variable "project_name" { description = "tags 에 명시할 프로젝트 이름" type = string default = "kintoun-secops-infra" } # ======================================================= # 팀 근두운 권한경계 # ======================================================= variable "permissions_boundary_arn" { description = "IAM Role에 붙일 권한경계" type = string default = "arn:aws:iam::446413909569:policy/KintounGuardrailBoundary" } # ======================================================= # VPC 주소 범위 변수 # ======================================================= variable "vpc_cidr" { description = "VPC가 사용할 전체 IPv4 주소 범위" type = string default = "10.50.0.0/16" validation { condition = can(cidrnetmask(var.vpc_cidr)) error_message = "vpc_cidr는 올바른 IPv4 CIDR 이어야 한다." } } # ======================================================= # Public Subnet 주소 범위 변수 # ======================================================= variable "public_subnet_cidrs" { description = "Wazuh EC2가 위치할 Public Subnet IPv4 주소 범위" type = list(string) default = [ "10.50.10.0/24" ] validation { condition = alltrue([ for cidr in var.public_subnet_cidrs : can(cidrnetmask(cidr)) ]) error_message = "public_subnet_cidrs는 올바른 IPv4 CIDR 형식 이어야 한다." } validation { condition = ( length(var.public_subnet_cidrs) == length(distinct(var.public_subnet_cidrs)) ) error_message = "public_subnet_cidrs에는 중복된 CIDR를 입력할 수 없다." } } # ======================================================= # Wazuh EC2 Instance Type 변수 # ======================================================= variable "instance_type" { description = "Wazuh All-in-one EC2 인스턴스 유형" type = string default = "m6i.large" # 아직 초기단계라서 비용 절약을 우선으로 생각 } # EC2 Instance Type 비교 (전부 x86_64 여서 인스턴스 타입만 교체 가능) # =============== m6i.large / c6i.xlarge / m6i.xlarge === # CPU 2v CPU / 4vCPU / 4vCPU # RAM 8GiB / 8GiB / 16GiB # Cost(per hour) 0.118 / 0.192 / 0.236 (USD) # Wazuh All-in-one 공식문서 기준 (agent 1 ~ 25) # CPU 4vCPU / RAM 8 GiB # 현재 인스턴스는 2vCPU로 사용하면서 이후 AWS Native 로그 붙이면서 # 성능 확인하고, 문제 있을 시 올리는걸로 해도 될 것 같음 # 인스턴스 타입 교체는 변수만 바꾸고 apply 하면됨 # 기존 데이터 날라가거나 하지는 않음 # 인스턴스가 중지됐다가 시작하는거라 공인 IP는 변경될거임(현재 EIP 미사용) # 도메인 기반으로 접속하는게 아니라 공인 IP 변경되도 상관없음 # ======================================================= # ======================================================= # Wazuh EC2 EBS 용량 변수 ( 최소 50GB 권장) # ======================================================= variable "root_volume_size" { description = "OS, Wazuh 프로그램 및 설정 파일을 보관할 루트 EBS 용량" type = number default = 100 # GB validation { condition = var.root_volume_size >= 50 # Wazuh 공식 문서기준(agent 1 ~ 25, 90일) 최소 권장 용량" error_message = "Root EBS는 최소 50GB 이상으로 설정해야 한다." } } # ======================================================= # aws login 정책 연결용 IAM Group (기존 그룹) # ======================================================= variable "aws_login_group_names" { description = "aws login 정책 연결용 그룹" type = set(string) default = [ "WHS4_Infra", "WHS4_Attack", "WHS4_SIEM_Detect" ] } # ======================================================= # 포트 포워딩 정책 연결용 IAM Group (기존 그룹) # ======================================================= variable "port_forwarding_group_names" { description = "포트 포워딩 정책 연결용 그룹" type = set(string) default = [ "WHS4_Infra", "WHS4_Attack", "WHS4_SIEM_Detect" ] }
network.tf
근두운 프로젝트 AWS SecOps 인프라를 구축하기 위한 뼈대가 될 네트워크를 정의하는 곳이다.
VPC, IGW, Subnet을 생성하고 Routing을 담당하는 코드이다.
코드
data "aws_availability_zones" "available" { state = "available" # 사용 가능한 AZ 목록을 가져옴(2a, 2b, 2c, 2d) } # ======================================================= # VPC 생성 # ======================================================= resource "aws_vpc" "main_vpc" { cidr_block = var.vpc_cidr # 도메인 이름으로 통신하는 것을 허용해주는 설정 enable_dns_support = true # 도메인이름을 IP 주소로 바꿀 수 있게 해줌 enable_dns_hostnames = true # Public IP가 할당된 EC2 인스턴스에 공인 DNS 호스트 이름이 부여 tags = { Name = "${var.project_name}-vpc" } } # ======================================================= # Internet Gateway 생성 # ======================================================= resource "aws_internet_gateway" "main_igw" { vpc_id = aws_vpc.main_vpc.id tags = { Name = "${var.project_name}-igw" } } # ======================================================= # Public Subnet 생성 for Wazuh # ======================================================= resource "aws_subnet" "public_subnet" { count = length(var.public_subnet_cidrs) vpc_id = aws_vpc.main_vpc.id cidr_block = var.public_subnet_cidrs[count.index] availability_zone = data.aws_availability_zones.available.names[count.index] map_public_ip_on_launch = false tags = { Name = "${var.project_name}-public-subnet-${count.index + 1}" } } # ======================================================= # Public Route Table 생성 및 라우팅 # ======================================================= resource "aws_route_table" "public_route_table" { vpc_id = aws_vpc.main_vpc.id route { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.main_igw.id } tags = { Name = "${var.project_name}-public-route-table" } } resource "aws_route_table_association" "public_rt_association" { count = length(var.public_subnet_cidrs) subnet_id = aws_subnet.public_subnet[count.index].id route_table_id = aws_route_table.public_route_table.id }
sg.tf
VPC 내부에서 ENI를 사용하는 AWS 리소스에 연결할 Security Group을 정의하는 곳이다.
Wazuh EC2에 연결한 Security Group을 생성하고, SSM 서비스와 Wazuh 설치를 위한 아웃바운드 정책만 적용하였다.
코드
# ======================================================= # Security Group 생성 for Wazuh EC2 # ======================================================= resource "aws_security_group" "wazuh_sg" { name = "${var.project_name}-wazuh-sg" description = "Security Group for Wazuh EC2" vpc_id = aws_vpc.main_vpc.id tags = { Name = "${var.project_name}-wazuh-sg" } } # ======================================================= # Security Group Egress 정책 생성 for Wazuh EC2 # ======================================================= resource "aws_vpc_security_group_egress_rule" "wazuh_sg_outbound" { security_group_id = aws_security_group.wazuh_sg.id cidr_ipv4 = "0.0.0.0/0" from_port = 443 to_port = 443 ip_protocol = "tcp" description = "Allow Outbound traffic for SSM and Wazun Install" }
iam.tf
EC2와 같은 AWS 리소스가 필요한 Role과 권한정책, 신뢰정책을 정의하는 곳이다.
현재 코드에서는 Wazuh EC2가 SSM 서비스를 사용하기 위한 최소 권한을 생성하였다.
코드
# ======================================================= # Trust 생성 for Wazuh EC2 # ======================================================= data "aws_iam_policy_document" "ec2_assume_role" { statement { effect = "Allow" actions = ["sts:AssumeRole"] principals { type = "Service" identifiers = ["ec2.amazonaws.com"] } } } # ======================================================= # IAM Role 생성 for Wazuh EC2 # ======================================================= resource "aws_iam_role" "wazuh_role" { name = "${var.project_name}-wazuh-role" assume_role_policy = data.aws_iam_policy_document.ec2_assume_role.json permissions_boundary = var.permissions_boundary_arn tags = { Name = "${var.project_name}-wazuh-role" } } # ======================================================= # SSM 사용을 위한 권한 정책 생성 for Wazuh EC # ======================================================= data "aws_iam_policy_document" "ssm_role" { statement { effect = "Allow" actions = [ "ssm:UpdateInstanceInformation", "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ] resources = ["*"] } } resource "aws_iam_policy" "wazuh_ssm_role" { name = "${var.project_name}-wazuh-ec2-ssm-role" description = "Enable SSM management for Wazuh EC2" policy = data.aws_iam_policy_document.ssm_role.json tags = { Name = "${var.project_name}-wazuh-ec2-ssm-role" } } # ======================================================= # IAM Role에 권한정책 연결 # ======================================================= resource "aws_iam_role_policy_attachment" "wazuh_ssm" { role = aws_iam_role.wazuh_role.name policy_arn = aws_iam_policy.wazuh_ssm_role.arn } # ======================================================= # Wazuh EC2에 IAM Role 연결을 위한 Profile 생성 # ======================================================= resource "aws_iam_instance_profile" "wazuh_profile" { name = "${var.project_name}-wazuh-profile" role = aws_iam_role.wazuh_role.name } # ======================================================= # Wazuh Dashboard 포트 포워딩 정책 # ======================================================= data "aws_caller_identity" "current" {} data "aws_iam_policy_document" "wazuh_port_forwarding" { statement { sid = "StartWazuhPortForwarding" effect = "Allow" actions = [ "ssm:StartSession" ] resources = [ aws_instance.wazuh_ec2.arn, "arn:aws:ssm:ap-northeast-2::document/AWS-StartPortForwardingSession" ] } statement { sid = "ManageOwnSession" effect = "Allow" actions = [ "ssmmessages:OpenDataChannel", "ssm:ResumeSession", "ssm:TerminateSession" ] resources = [ "arn:aws:ssm:ap-northeast-2:${data.aws_caller_identity.current.account_id}:session/&{aws:username}-*" ] } } resource "aws_iam_policy" "wazuh_ssm_port_forwarding" { name = "${var.project_name}-wazuh-ssm-port-forwarding" description = "Allow port forwarding to Wazuh Dashboard" policy = data.aws_iam_policy_document.wazuh_port_forwarding.json tags = { Name = "${var.project_name}-wazuh-ssm-port-forwarding" } } # ======================================================= # 기존 그룹에 포트 포워딩 정책 연결 # ======================================================= resource "aws_iam_group_policy_attachment" "port_forwarding_group" { for_each = var.port_forwarding_group_names group = each.value policy_arn = aws_iam_policy.wazuh_ssm_port_forwarding.arn } # ======================================================= # Wazuh 관리자용 정책 (Shell 접속) # ======================================================= data "aws_iam_policy_document" "wazuh_shell_access" { statement { sid = "StartWazuhShellSession" effect = "Allow" actions = [ "ssm:StartSession" ] resources = [ aws_instance.wazuh_ec2.arn, "arn:aws:ssm:ap-northeast-2:${data.aws_caller_identity.current.account_id}:document/SSM-SessionManagerRunShell" ] } } resource "aws_iam_policy" "wazuh_ssm_shell_access" { name = "${var.project_name}-wazuh-ssm-shell-access" description = "Allow shell access to Wazuh for Admin" policy = data.aws_iam_policy_document.wazuh_shell_access.json tags = { Name = "${var.project_name}-wazuh-ssm-shell-access" } } # ======================================================= # aws login 권한 정책 (임시 자격증명 발급용) # ======================================================= data "aws_iam_policy_document" "aws_login" { statement { sid = "AllowLocalAWSLogin" effect = "Allow" actions = [ "signin:CreateOAuth2Token", "signin:AuthorizeOAuth2Access" ] resources = [ "arn:aws:signin:ap-northeast-2:${data.aws_caller_identity.current.account_id}:oauth2/public-client/localhost" ] } } resource "aws_iam_policy" "aws_login" { name = "${var.project_name}-aws-login" description = "Allow AWS CLI login using Console for temporary credentials" policy = data.aws_iam_policy_document.aws_login.json tags = { Name = "${var.project_name}-aws-login" } } # ======================================================= # 기존 그룹에 aws login 정책 연결 # ======================================================= resource "aws_iam_group_policy_attachment" "aws_login_group" { for_each = var.aws_login_group_names group = each.value policy_arn = aws_iam_policy.aws_login.arn }
ec2.tf
EC2 인스턴스를 생성하는 곳이다.
Wazuh SIEM을 설치할 EC2를 생성해주고,
user_data 인자를 통해 Wazuh All-in-one 설치 스크립트를 전달하여 EC2가 처음 부팅될 때 자동으로 Wazuh를 설치하도록 하였다.코드
# ======================================================= # Amazon Linux AMI 조회 (ssm:GetParameter 권한 필요) # ======================================================= data "aws_ssm_parameter" "amazon_linux_2023" { name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64" } # ======================================================= # EC2 생성 for Wazuh All-in-one # ======================================================= resource "aws_instance" "wazuh_ec2" { ami = data.aws_ssm_parameter.amazon_linux_2023.value instance_type = var.instance_type subnet_id = aws_subnet.public_subnet[0].id # Security Group 연결 vpc_security_group_ids = [ aws_security_group.wazuh_sg.id ] iam_instance_profile = aws_iam_instance_profile.wazuh_profile.name # IAM Role 연결 associate_public_ip_address = true # Wazuh 설치때문에 공인 IP 필요, EIP 사용은 공인 IP 고정 필요 시 검토 # EC2 최초 부팅 시 Wazuh All-in-one 설치 스크립트 실행 user_data = file("${path.module}/scripts/wazuh-install.sh") user_data_replace_on_change = false # user_data 변경으로 인한 EC2 교체 방지 root_block_device { volume_size = var.root_volume_size volume_type = "gp3" iops = 3000 throughput = 125 encrypted = true delete_on_termination = true # EC2 삭제 시 같이 삭제 } metadata_options { http_endpoint = "enabled" http_tokens = "required" # IMDSv2 http_put_response_hop_limit = 1 # 컨테이너, k8s 미사용 EC2면 "1"이 안전 } # 최신 AMI 변경 무시 lifecycle { ignore_changes = [ami] } depends_on = [ aws_route_table_association.public_rt_association, aws_iam_role_policy_attachment.wazuh_ssm ] tags = { Name = "${var.project_name}-wazuh-ec2" } volume_tags = { Name = "${var.project_name}-wazuh-root-volume" } }
Trivy를 활용한 Misconfiguration 점검
작성한 Terraform 코드의 설정오류가 있는지 확인하기 위해 Trivy도구를 사용해 스캔을 해보았다.
Trivy는 무료 오픈소스 취약점 스캐너로 간단한 명령으로 IaC의 잘못된 설정을 점검할 수 있다. 이외에도 OS 패키지 취약점, 라이브러리 취약점, 하드코딩된 비밀값 탐지 기능을 제공해주는 친절한 도구이다.
스캔결과를 보기 전, Trivy가 보여주는 심각도별 의미를 살펴보면 다음과 같다.
등급 | 의미 | 처리 요구(일반적인 방식) |
CRITICAL | 시스템 침해나 심각한 데이터 유출로 이어질 수 있는 가장 위험한 수준 | 원칙적 배포 차단, 불가피하면 책임자 승인과 보완 통제를 적용해 일시 허용 |
HIGH | 보안상 위험이 커서 빠르게 조치해야 하는 높은 수준 | 운영 배포 전 수정 권장 |
MEDIUM | 주의가 필요하지만 즉각적인 위험은 낮은 중간 수준 | 영향과 노출 범위 검토 후 수용 가능 |
LOW | 시스템에 미치는 영향이 매우 낮은 수준 | 개선 목록에 등록 |
UNKNOWN | 심각도가 아직 평가되지 않거나 알 수 없는 상태 | 담당자 수동 검토 필요 |
정해진 보안 규칙에 대입하여 결과를 보여주는 정적 분석 도구로, 절대적인 기준이 되지는 않아 보안 참고자료로 활용하는 것이 좋다.
이제 스캔을 직접 돌려보도록 하겠다. 스캔 결과는 터미널에 바로 출력되며, 가장 위에서 Summary를 보여준다.

network.tf에서 1건, sg.tf에서 1건으로 Misconfigurations이 총 2건 탐지된 것을 확인할 수 있다.
먼저
network.tf코드의 Misconfiguration을 확인해보면,
VPC 생성 과정에서 VPC Flow Logs 활성화를 안해주고 있어서 탐지된 것으로 보인다.
실제로
https://avd.aquasec.com/misconfig/aws-0178에서 확인해보면 VPC Flow Logs 활성화를 권장하고 있고, 조치 사항도 설명해주고 있다.# 예시 코드 resource "aws_flow_log" "example" { iam_role_arn = aws_iam_role.example.arn log_destination = aws_cloudwatch_log_group.example.arn traffic_type = "ALL" vpc_id = aws_vpc.example.id }
VPC Flow Logs 같은 경우에는, 활성화 시에 비용이 발생하다 보니 근두운 팀 프로젝트에서는 우선 비활성화 상태로 유지하고 필요할 경우 활성화를 검토하면 좋을 것 같다.
검토 시에는 VPC 전체에 대한 Flow Logs 활성화 or 특정 ENI대상으로 활성화할 것인지, 로깅할 트래픽 처리 결과는 전체
(traffic_type = “ALL”)를 로깅할 건지 거부된 트래픽(traffic_type = “REJECT”)만 로깅할 건지 등을 고민해야 한다.다음으로
sg.tf코드의 Misconfiguration을 확인해보면,
Wazuh EC2에 연결한 보안 그룹의 아웃바운드 정책이 443/tcp에 대해 “0.0.0.0/0”(ANY)을 허용해주고 있어 탐지된 것으로 보인다.
https://avd.aquasec.com/misconfig/aws-0104에서도 보안 그룹 규칙 설정 시 IP주소를 제한하라고 권장하고 있다.악성 공격자가 내부 EC2에 침입하면 데이터를 외부로 보낼 수 있는 위협이 존재하는 Critical 심각성 수준의 설정 오류이긴 하지만, 현재 네트워크 환경의 구조를 살펴보면 Wazuh EC2로의 인바운드를 모두 차단하고 있고 IAM Role에는 SSM 서비스 이용에 필요한 최소권한만을 부여하여 공격 표면을 좁혔다.
팀원들의 Dashboard 접속 및 Wazuh EC2 외부 패키지 업데이트, Wazuh CTI 사용이 필요하므로 위험을 수용하고 운영하는 것으로 한다. 이후 Private Subnet에 Wazuh 배치, NAT Gateway 또는 VPC Endpoint 활용 등 SecOps 인프라를 확장해 나가면서 보안과 통제를 강화할 필요가 있으며, 팀원들은 이를 인지하고 보안관리에 집중해야 한다.
마무리
이번 과정을 통해 근두운 팀 프로젝트에서의 SecOps 인프라 뼈대를 세웠다.
IaC 기반으로 Wazuh SIEM을 구축하고, 네트워크 기반을 만들었다. 지속적으로 관리해 줘야 하는 보안 이슈도 있지만, 팀원 모두가 인지하고 보안관리를 적극적으로 한다면 위험을 최소화할 수 있을 것이다.
다음에는 취약한 EC2 구축과 Wazuh Agent 설치 및 Wazuh Manager 연결, Wazuh aws-s3 모듈을 활용한 AWS Native 로그 수집을 구현해보자
