
VPC, IAM, S3, CloudTrail, 컨테이너(ECS/EKS) 및 AI 공격 탐지를 아우르는 102개 이상의 보안 검사를 수행하는 터미널 기반 AWS 보안 스캐너입니다. 위험한 IAM 권한, 노출된 비밀, 잘못 구성된 S3 버킷, 컨테이너 취약점, 새로운 LLMjacking 위협을 탐지합니다.
터미널 기반 AWS 보안 스캐너로, VPC, IAM, S3, CloudTrail, 컨테이너(ECS/EKS), AI 공격 탐지 등 100개 이상의 보안 검사를 제공합니다. 위험한 IAM 권한, 노출된 비밀, 잘못 구성된 S3 버킷, 컨테이너 취약점, 새로운 LLMjacking 위협을 탐지합니다.
제품 개요: docs/CAPABILITIES_OVERVIEW.md
*:*).env, .git, 자격 증명)2025년 2월 위협 인텔리전스 기반: 8분 AWS 침해
| 카테고리 | 개수 |
|---|---|
| 핵심 (IAM, VPC, S3, CloudTrail, 비밀) | 38 |
| 확장 (Lambda, ELB, Route53, Inspector 등) |
# macOS
brew install awscli
# Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && sudo ./aws/install
aws configure
# 또는 명명된 프로필 사용
aws configure --profile myprofile
AWS 자격 증명은 스캔 대상 서비스에 대한 읽기 전용 액세스가 필요합니다. AWS 관리형 정책 ReadOnlyAccess로 충분하며, 아래 필수 권한을 참조하세요.
참고: aws-perimeter는 읽기 작업만 수행하며 AWS 리소스를 절대 수정하지 않습니다.
curl -sSfL https://raw.githubusercontent.com/thirukguru/aws-perimeter/main/install.sh | sh
go install github.com/thirukguru/aws-perimeter@latest
aws-perimeter # 전체 보안 검사 실행
aws-perimeter --output json # JSON 출력
aws-perimeter --profile prod # 특정 AWS 프로필
aws-perimeter --region us-west-2 # 특정 리전
aws-perimeter --regions us-east-1,us-west-2 # 멀티 리전 스캔
aws-perimeter --regions us-east-1,us-west-2 --max-parallel 4 # 제어된 동시성으로 멀티 리전 스캔
aws-perimeter --regions us-east-1,us-west-2 --max-parallel 4 --best-effort # 하나의 리전이라도 성공하면 종료 성공
aws-perimeter --rules # RULES.md를 stdout으로 출력 (Markdown)
aws-perimeter --capabilities # 기능 개요를 stdout으로 출력 (Markdown)
aws-perimeter --all-regions # 활성화된 모든 리전 스캔
aws-perimeter --org-scan --org-role-name OrganizationAccountAccessRole # 멀티 계정 조직 스캔
aws-perimeter --org-scan --max-parallel 5 # 조직+리전 팬아웃 동시성
aws-perimeter --output html --output-file report.html # HTML 보고서 생성
aws-perimeter --store --profile prod --region us-west-2 # 실행 + 스캔 결과 저장
aws-perimeter --trends --trend-days 30 --account-id 123456789012 # 과거 추세 테이블 표시
aws-perimeter history list --db-path ~/.aws-perimeter/history.db
aws-perimeter dashboard --port 8080
팬아웃 모드 (--regions, --all-regions, --org-scan)에서 --output html --output-file ...과 함께 사용하면, aws-perimeter는 리전/계정 및 타임스탬프 접미사가 포함된 각 스캔 단위당 하나의 보고서를 작성합니다 (예: security-report-us-east-1-20260210-213045.html 또는 security-report-123456789012-us-east-1-20260210-213045.html).
HTML 모드에서는 터미널 테이블 출력이 억제되고 간결한 요약 줄만 출력됩니다.
--output json을 사용하면 aws-perimeter는 배너/스피너 노이즈 없이 단일 유효한 JSON 문서를 출력하므로 파이프라인에서 안전하게 사용할 수 있습니다.
aws-perimeter --profile prod --region us-west-2 --output json | jq .
# 멀티 리전 JSON은 집계된 최상위 JSON 문서 하나를 출력합니다:
aws-perimeter --profile prod --regions us-east-1,us-west-2 --output json | jq .
# stdout 리디렉션을 통해 문서 내보내기
aws-perimeter --rules > rules.md
aws-perimeter --capabilities > capabilities.md
멀티 리전 JSON 페이로드 포함:
summary (total_regions, success, failed, skipped)results (리전별 통합 스캔 페이로드)failures (리전 스캔 실패 시 리전 + 오류 세부 정보)비 JSON 출력 모드의 멀티 리전 및 조직 스캔의 경우, aws-perimeter는 실행 종료 시 통합 요약을 출력합니다:
account_id, account_name, region, status, duration, error.TOTAL, SUCCESS, FAILED, SKIPPED).--max-parallel과 --best-effort--max-parallel은 팬아웃 모드(--regions, --all-regions, --org-scan)에서 동시에 실행되는 리전/계정 스캔 단위 수를 제어합니다.--max-parallel 3 또는 --max-parallel 4.--best-effort는 멀티 리전 스캔에 적용됩니다: 하나의 리전이라도 성공하면 명령이 성공(0)으로 종료되며, 일부 리전이 실패해도 마찬가지입니다.--best-effort 없이 실행하면 실패한 리전이 있으면 0이 아닌 종료 코드가 반환됩니다.failures 아래에 표시됩니다.다음 권한은 전체 기능 적용 범위(멀티 리전 및 조직 스캔 포함)에 필요합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:GetCallerIdentity",
"sts:AssumeRole",
"organizations:DescribeOrganization",
"organizations:ListAccounts",
"ec2:Describe*",
"ec2:GetEbsEncryptionByDefault",
"iam:List*",
"iam:Get*",
"iam:GenerateCredentialReport",
"s3:ListAllMyBuckets",
"s3:GetBucket*",
"s3:GetEncryptionConfiguration",
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"cloudtrail:LookupEvents",
"lambda:ListFunctions",
"lambda:GetFunctionConfiguration",
"lambda:GetFunction",
"ecr:DescribeRepositories",
"ecr:DescribeImages",
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer",
"ecs:ListClusters",
"ecs:DescribeClusters",
"ecs:ListServices",
"ecs:DescribeServices",
"ecs:DescribeTaskDefinition",
"eks:ListClusters",
"eks:DescribeCluster",
"eks:ListNodegroups",
"eks:DescribeNodegroup",
"bedrock:ListProvisionedModelThroughputs",
"bedrock:ListCustomModels",
"bedrock:GetModelInvocationLoggingConfiguration",
"guardduty:ListDetectors",
"guardduty:GetDetector",
"guardduty:ListFindings",
"guardduty:GetFindings",
"securityhub:DescribeHub",
"securityhub:GetFindings",
"config:Describe*",
"kms:ListKeys",
"kms:DescribeKey",
"kms:GetKeyRotationStatus",
"kms:Decrypt",
"rds:DescribeDB*",
"dynamodb:ListTables",
"dynamodb:DescribeTable",
"dynamodb:DescribeContinuousBackups",
"secretsmanager:ListSecrets",
"elasticloadbalancing:Describe*",
"backup:List*",
"apigateway:GET",
"cloudfront:List*",
"cloudfront:Get*",
"cloudwatch:GetMetricStatistics",
"sns:ListTopics",
"sqs:ListQueues"
],
"Resource": "*"
}
]
}
kms:Decrypt는 암호화된 객체/패키지(예: SSE-KMS S3 객체 읽기)를 스캔할 때만 필요합니다. 프로덕션에서는 필요한 KMS 키로 범위를 제한하세요.
--org-scan의 경우, 관리 주체가 멤버 계정 역할(기본값: OrganizationAccountAccessRole)을 수임할 수 있어야 합니다. 예:
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::*:role/OrganizationAccountAccessRole"
}
멤버 계정 역할 신뢰 정책은 또한 스캐너 주체(사용자/역할)가 이를 수임할 수 있도록 허용해야 하며 (--external-id를 사용하는 경우 sts:ExternalId 조건 포함).
팁: 빠른 시작을 위해 IAM 사용자/역할에 AWS 관리형 정책
arn:aws:iam::aws:policy/ReadOnlyAccess를 연결하세요.
Apache License 2.0
| 35 |
| 컨테이너 보안 (ECS + EKS) | 22 |
| AI 공격 탐지 | 7 |
| 합계 | 102 |
| 검사 | 심각도 | 설명 |
|---|
| 권한 상승 | 🔴 중요 | 사용자가 관리자로 권한 상승 가능 |
| 관리자 액세스 (:) | 🔴 중요 | 전체 AWS 액세스 부여됨 |
| 노출된 비밀 | 🔴 중요 | Lambda/EC2에 API 키/토큰 존재 |
| 퍼블릭 S3 버킷 | 🔴 중요 | 버킷이 공개적으로 접근 가능 |
| CloudTrail 없음 | 🔴 중요 | 감사 로깅 없음 |
| SSH/RDP 열림 | 🔴 중요 | 인터넷에 포트 22/3389 열림 |
| 권한 있는 컨테이너 | 🔴 중요 | ECS 컨테이너에 루트 액세스 |
| GPU IMDSv1 | 🔴 중요 | GPU 인스턴스 자격 증명 취약 |
| 교차 계정 신뢰 | 🟠 높음 | 외부 계정이 역할을 수임할 수 있음 |
| EKS 퍼블릭 엔드포인트 | 🟠 높음 | Kubernetes API가 공개적으로 접근 가능 |
| Bedrock 로깅 없음 | 🟠 높음 | AI 모델 사용이 감사되지 않음 |
| 플래그 | 약자 | 설명 |
|---|
--profile | -p | 사용할 AWS 프로필 |
--region | -r | AWS 리전 |
--regions | 쉼표로 구분된 리전 목록 | |
--all-regions | 활성화된 모든 리전 스캔 | |
--org-scan | 모든 활성 AWS Organization 계정 스캔 | |
--org-role-name | 멤버 계정에서 수임할 IAM 역할 이름 | |
--external-id | 교차 계정 수임 역할을 위한 외부 ID | |
--output | -o | 출력 형식: table, json, 또는 html |
--rules | 규칙 카탈로그 Markdown을 출력하고 종료 | |
--capabilities | 기능 Markdown을 출력하고 종료 | |
--output-file | -f | 출력 파일 (html에 필요) |
--store | SQLite에 스캔 결과 저장 | |
--db-path | 사용자 지정 SQLite DB 경로 | |
--trends | 과거 추세 표시 | |
--trend-days | 추세 기간 (일) (기본값 30) | |
--compare | 최근 두 스캔 비교 | |
--export-json | 추세 JSON 파일 내보내기 | |
--export-csv | 추세 CSV 파일 내보내기 | |
--account-id | 추세/이력을 위한 계정 필터 | |
--max-parallel | 최대 동시 리전/계정 스캔 단위 수 | |
--best-effort | 멀티 리전 스캔에서 하나의 리전이라도 성공하면 성공 반환 | |
--dry-run | 수정 미리보기 모드 | |
--remediate | 지원되는 수정 적용 | |
--dashboard-port | 대시보드 포트 (루트 플래그; dashboard 하위 명령은 --port 사용) | |
--version | -v | 버전 정보 |
| 단계 | 상태 | 규칙 |
|---|
| 1단계 | ✅ 완료 | 73 |
| 2단계 | 🔲 진행 중 | +20 |
| 2.5단계 | 🆕 AI 공격 탐지 | +13 |
| 3단계 | 🔲 계획됨 | +15 |
| 4단계 | 🔲 계획됨 | 기능 |