이 가이드는 AWS 클라우드 환경에서 Prowler를 사용해 보안 설정을 점검하고 취약점을 실시간으로 확인하는 방법을 설명합니다. K-ISMS, 개인정보보호법 등 국내 보안 기준을 만족하기 위해 설계된 자동화 점검 도구로, 설치부터 실행, 결과 확인까지 실습 중심으로 안내합니다. 비전공자도 쉽게 따라 할 수 있도록 명령어 예시와 함께 제공합니다.
1. Prowler 설치·실행
1.1 IAM 실행 역할 생성
Prowler가 AWS 계정 스캔에 필요한 최소 권한만 사용할 수 있도록 전용 역할을 만듭니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"config:Describe*",
"iam:GetRole",
"cloudtrail:LookupEvents",
"organizations:DescribeOrganization",
"sts:AssumeRole"
],
"Resource": "*"
}
]
}
# 1) 역할 생성
aws iam create-role `
--role-name prowler-scan-role `
--assume-role-policy-document file://trust-policy.json
# 2) 정책 부착
aws iam put-role-policy `
--role-name prowler-scan-role `
--policy-name prowler-exec-policy `
--policy-document file://prowler-exec-policy.json
1.2 Prowler 설치 스크립트 (install_prowler.sh)
#!/usr/bin/env bash
yum install -y git python3-pip
git clone <https://github.com/toniblyx/prowler.git> /opt/prowler
pip3 install --upgrade awscli
1.3 스캔 실행 예시
- 기본 스캔 (JSON 출력)
sudo bash install_prowler.sh /opt/prowler/prowler -M json -r ap-northeast-2 > prowler-output.json - K-ISMS 기준 스캔 & CSV 출력
/opt/prowler/prowler -M csv -r ap-northeast-2 -f k-isms > prowler-report.csv - 특정 체크만 실행
/opt/prowler/prowler -M json -r ap-northeast-2 -c check11,check31 > subset-output.json
2. ISMS-P 기준 재매핑
Prowler 단계에서는 Purpose와 ActionPlan 필드를 비워두고, 후속 CloudCustodian 정책에서 실제 알림·자동조치를 구현합니다.
2.1 매핑 JSON 예시
{
"Framework": "KISA-ISMS-P",
"Version": "2023-korean",
"Provider": "AWS",
"Description": "한국인터넷진흥원(KISA) 제정 정보보호·개인정보보호 관리체계",
"Requirements": [
{
"Id": "1.1.1",
"Name": "경영진의 참여",
"Description": "최고경영자는 … 의사결정 체계 수립·운영",
"Checks": [],
"Attributes": [
{
"Domain": "1. 관리체계 수립 및 운영",
"Subdomain": "1.1 관리체계",
"Section": "1.1.1 경영진의 참여",
"AuditChecklist": [
"문서화된 책임·역할 보유 여부?",
"경영진 의사결정 절차 수립·이행 여부?"
],
"AuditEvidence": [ /* …증빙 예시… */ ],
"NonComplianceCases": [ /* …위반 사례… */ ]
}
]
}
/* …다른 조항들… */
]
}
전체 매핑 파일은 공식 Prowler 리포지토리에서 확인하세요.
2.2 매핑 스크립트 (remap_ismsp.py)
import json
# 1) Prowler 원본 JSON 로드
with open('prowler-output.json') as f:
report = json.load(f)
# 2) 매핑 룰 로드
with open('kisa_isms_p_2023_korean_aws.json') as f:
rules = json.load(f)['Requirements']
# 3) 조항별 Purpose/ActionPlan 빈값 주입
for chk in report['Checks']:
for rule in rules:
if chk['Id'] == rule['Id']:
chk['Purpose'] = "" # 빈 문자열 유지
chk['ActionPlan'] = ""
break
# 4) 결과 저장
with open('prowler-remapped.json','w') as f:
json.dump(report, f, indent=2)
2.3 매핑 전·후 비교
// 매핑 전
{ "Id":"2.1.3", "Name":"Ensure CloudTrail is enabled", "Purpose":"", "ActionPlan":"" }
// 매핑 후 (변동 없음)
{ "Id":"2.1.3", "Name":"Ensure CloudTrail is enabled", "Purpose":"", "ActionPlan":"" }
Prowler 단계에서는 필드를 비워두고, 글 4의 CloudCustodian 정책에서 Purpose/ActionPlan을 활용해 알림·조치를 구현합니다.
2.4 AWS ISMS-P 점검 기준 재매핑 및 Prowler 적용
- 인증기준 일부 누락, 점검 목적과의 매핑 항목 불일치 등으로 기존 Prowler 내에 존재하던 부정확한 AWS ISMS-P 점검 기준을 서비스 기능 및 ISMS-P 규정 목적에 맞게 수동으로 재매핑하여 정확도를 크게 향상시켰습니다.
- 이렇게 개선된 점검 기준(JSON)을 Prowler에 적용함으로써, AWS 환경의 보안 취약점을 보다 효과적으로 진단할 수 있습니다.
3. 자동화 워크플로우 구현(현 프로젝트에선 생략)
3.1 EventBridge 스케줄 설정
# 매일 새벽 2시 스캔 트리거
aws events put-rule `
--name prowler-daily-scan `
--schedule-expression "cron(0 2 * * ? *)"
aws lambda add-permission `
--function-name run-prowler `
--statement-id eb-trigger `
--action "lambda:InvokeFunction" `
--principal events.amazonaws.com `
--source-arn arn:aws:events:...:rule/prowler-daily-scan
aws events put-targets `
--rule prowler-daily-scan `
--targets "Id"="1","Arn"="arn:aws:lambda:...:function:run-prowler"
3.2 Prowler Lambda 실행 코드 (run_prowler.py)
import subprocess, json, boto3
# 1) Prowler 스캔 (JSON 출력)
subprocess.run(
["/opt/prowler/prowler", "-M", "json", "-r", "ap-northeast-2"], check=True
)
# 2) ISMS-P 매핑 스크립트 호출
subprocess.run(["python3","/opt/scripts/remap_ismsp.py"], check=True)
# 3) SQS에 결과 전송
with open('prowler-remapped.json') as f:
payload = json.load(f)
boto3.client('sqs').send_message(
QueueUrl="<https://sqs>.../prowler-results",
MessageBody=json.dumps(payload)
)
3.3 SQS 메시지 포맷
{
"Account": "123456789012",
"Region": "ap-northeast-2",
"Checks": [
{"Id":"2.1.3","Status":"FAIL", /* … */},
/* … */
]
}
이 글에서는
- Prowler CLI 설치·실행
- ISMS-P 매핑 JSON 예시 및 스크립트
- EventBridge -> Lambda -> SQS 파이프라인
까지 상세히 다뤘습니다.
다음 글 4에서는 CloudCustodian을 활용한 알림·자동조치 구현과 운영 중 회고를 이어가겠습니다.
'개발 실습' 카테고리의 다른 글
| 6. 프로젝트 회고 및 향후 계획 (4) | 2025.08.11 |
|---|---|
| 5. CloudCustodian 정책 작성 & 실행 튜토리얼 (1) | 2025.08.11 |
| 3. 아키텍처 심층 분석 (0) | 2025.08.11 |
| 2. 프로젝트 전체진행흐름 (0) | 2025.08.11 |
| 1. 프로젝트 소개 (1) | 2025.08.11 |