
클로드로 관리되지 않은 AWS 환경 조사하기
안녕하세요 클래스메소드의 이수재입니다.
AWS 환경이 여러 계정에 분산되어 있고 담당자도 여러 명을 거쳤다면 전체 구성을 아는 사람이 아무도 없는 상황이 간혹 발생합니다.
문서화를 진행하며 환경을 생성하지만 사람이 하는 일이다 보니 누락되는 경우도 꽤 있는 것 같습니다.
이번에 고객님의 AWS 환경을 조사하고 정리하는 작업을 AI를 활용하여 진행해보았습니다.
내용을 정리할 겸 실무에서 바로 쓸 수 있는 조사 절차와 팁을 공유하고자 합니다.
전체 작업 플로우
Step 0 Cost Explorer로 비용 현황 파악 (계정 우선순위 분류)
↓
Step 1 Resource Explorer로 전체 리소스 조망 (사용 중인 서비스 특정)
↓
Step 2 AWS CLI로 서비스별 상세 정보 취득
↓
Step 3 AI를 활용해 리소스 간 관계 정리 · Markdown화
↓
Step 4 draw.io로 구성도 · 계정 관계도 작성
각 단계를 순서대로 설명합니다.
Step 0: Cost Explorer로 비용 현황부터 파악한다
리소스를 조사하기 전에, 먼저 비용 흐름으로 전체 현황을 파악합니다.
관리 계정의 Cost Explorer를 열어 계정별 · 서비스별 비용을 최근 3~12개월치로 확인합니다. 여기서 봐야 할 포인트는 세 가지입니다.
계정 우선순위 분류
비용이 $0인 계정은 리소스가 거의 없을 가능성이 높습니다.
이번에는 8개 계정 중 4개 계정이 1년간 $0이었습니다.
실제 확인해보니 기본 VPC 등 디폴트 리소스만 있어서 구성도 작성이 불필요하다고 바로 판단할 수 있었습니다.
출처 불명의 비용 확인
만약 AWS Organizations에서 모든 계정을 관리하는 경우 관리 계정에서 보면 모든 멤버 계정의 비용이 통합 표시됩니다.
"이 서비스는 사용하지 않는데 과금되고 있다"는 항목을 메모해두고, 각 계정 조사 시 대조합니다.
이번에는 관리 계정 청구서에 "Amazon Personalize $XXX.00/월"이 표시되어 있었는데 어떤 리소스인지 불명이었습니다. 이후 멤버 계정을 개별적으로 조사한 결과, 다른 계정에서 실행 중인 비용이 통합 표시된 것으로 판명되었습니다.
비용 변동 패턴 확인
월별 추이를 보면 "갑자기 늘어난 달", "0이 된 달"이 보입니다. 이게 계정 조사 시의 단서가 됩니다.
"3개월 전부터 급증한 서비스가 있다"면 해당 서비스를 중점적으로 조사하는 식으로 우선순위를 매길 수 있습니다.
Step 1: Resource Explorer로 전체를 파악한다
왜 Resource Explorer부터 시작하는가
"일단 CLI로 describe를 다 때려보자"는 비효율적입니다. 먼저 사용 중인 서비스를 파악한 뒤, 대상을 좁혀 CLI를 실행하는 편이 훨씬 빠릅니다.
Resource Explorer는:
- 무료로 사용 가능
- UI가 직관적이고 CSV 내보내기가 간단
resourcetype열로 서비스 목록을 바로 파악 가능
Resource Explorer 활용 순서
- 각 계정에서 Resource Explorer 활성화 (미활성화된 경우)
- 리소스 탐색기를 처음 켠 후 인덱싱 및 애그리게이터 인덱스로의 복제를 완료하는 데 최대 36시간이 걸릴 수 있습니다.
- 전체 리소스를 CSV로 내보내기
resourcetype열로 필터링하여 사용 중인 AWS 서비스 파악- 전체 리소스 csv를 Claude에게 읽게하여 생성한 리소스 및 미사용 디폴트 리소스 확인.
Resource Explorer는 기본적으로 활성화 한 리전에서만 리소스 정보를 수집합니다.
따라서 여러 리전에 환경을 배포하여 사용하는 경우에는 각 리전에서 활성화 하거나 Aggregator Index를 활성화하는것이 좋습니다.
그리고 리소스 csv를 Claude에게 읽게 하여 실제로 사용중인 리소스를 파악합니다.
여기까지 하면 나머지는 상세한 조사뿐입니다.
주의: Resource Explorer가 대응하지 않는 서비스가 있다
Resource Explorer는 대부분의 서비스를 커버하지만, 대응하지 않는 서비스나 리소스 타입이 존재합니다. 대표적인 게 Lightsail로, 인스턴스가 표시되지 않는 경우가 있습니다. 그 외에도 SES의 발송 설정이나 Route 53의 레코드셋 상세 등, 서비스에 따라 일부 정보를 취득할 수 없는 케이스가 있습니다.
Resource Explorer 결과만 믿지 말고, 비용과 서비스별 콘솔 화면을 대조하며 "빠진 게 없는지" 확인하는 습관을 들이면 안심할 수 있습니다.
또한 아래 공식 문서에 대응하고 있는 서비스 목록이 있으니 Cost Explorer의 서비스와 비교해보는 것이 좋습니다.
Step 2: AWS CLI로 상세 정보를 취득한다
Resource Explorer에서 "이 계정은 EC2 · Lightsail · Route 53을 사용하고 있다"는 걸 파악한 뒤, 해당 서비스만 CLI를 실행합니다.
하지만 서비스가 많은 경우 모든 서비스의 적절한 커맨드를 찾고 활용하는데 시간이 많이 듭니다.
여기서부터 AI를 적극적으로 활요합니다.
Step1에서 Claude에게 전체 리소스 CSV를 읽고 미사용 리소스를 파악하도록 지시하였습니다.
따라서 Claude에는 현재 리소스/서비스 목록이 저장되어 있습니다.
다음 액션으로는 아래 중 하나를 선택할 수 있습니다.
- 필요한 커맨드의 목록을 Claude에 요구
- 대상 서비스의 리소스 목록을 Claude에게 확인하도록 지시
만약 Claude에게 모든 조사를 맡기기에는 걱정된다면 커맨드 목록만을 확인하고 실제로 실행해보며 리소스 목록을 출력합니다.
혹은 Claude에게 list/describe 커맨드를 실행하고 결과를 취합하는 것 까지 지시하는 것도 가능합니다.
실제로 리소스를 조작하는 커맨드를 실행하지는 않기에 문제는 없다고 생각됩니다.[1]
Tip: AWS Config 없이도 JSON 상세에서 관계성을 파악할 수 있다
"AWS Config가 활성화되어 있지 않으면 관계성을 알 수 없다"고 생각하기 쉽지만, 실제로는 각 리소스의 상세 JSON에 VpcId, SubnetId, SecurityGroups, TargetGroupArn 등 연결 정보가 포함되어 있습니다.
describe-instances 출력에 SG의 ID가 포함되어 있고, describe-security-groups로 그 내용을 조회할 수 있습니다. 이를 조합하면 Config 없이도 구성도를 그리기에 충분한 정보를 얻을 수 있습니다.
다만 사용 서비스가 많은 경우 이러한 정보를 알고 있어도 하나하나 찾기는 힘들기 때문에 AI를 활용하는 것이 현실적입니다.
Step 3: AI로 리소스 간 관계를 정리한다
CLI의 JSON 출력은 정보량이 많아, 사람이 직접 읽고 Markdown으로 정리하는 건 손이 많이 갑니다.
이것도 정리를 부탁합시다.
하는 일
CLI의 JSON 출력 → AI에 입력 → "이 계정의 구성을 Markdown 표로 정리해줘"
→ 리소스 목록 · 관계성 · 월별 비용 개산을 구조화하여 출력
AI가 잘하는 것:
- 대량의 JSON에서 필요한 열(이름 · IP · SG · Subnet 등)을 추출하여 표로 정리
VpcId나SubnetId에서 리소스 간 접속 관계 추정- Route 53의 레코드와 EC2/Lightsail의 IP 대조
실제로 발견한 것 (예)
Route 53의 A 레코드와 Lightsail의 Static IP를 대조하니, CloudFront를 경유해 Lightsail에 연결되어 있는 도메인 그룹이 보였습니다. 더 나아가 그 CloudFront 배포가 이 계정에는 존재하지 않는다는 것도 판명되었습니다. 다른 계정에서 관리되고 있었던 것입니다.
이런 "계정을 넘나드는 연결 관계"는 AI를 활용한 대조로 알아채기가 훨씬 쉬워집니다.
Step 4: draw.io로 구성도를 작성한다
Markdown으로 정리한 정보를 바탕으로 draw.io에서 계정 간 관계도, 계정 목록표, 구성도 등을 작성합니다.
지금까지 작성한 내용들이 모두 Claude에 기록되어 있기 때문에 "draw.io에 출력할 수 있도록 자료를 작성해줘"라고 한다면 시각화 된 구성도를 확인할 수 있습니다.
Tip: 계정 조사가 완료될 때마다 즉시 업데이트한다
여러 계정에 걸쳐 조사하다 보면 "어디까지 끝났는지" 알 수 없게 됩니다. 계정 하나 조사가 끝난 타이밍에 반드시 구성도를 업데이트하는 습관을 들이면, 나중에 몰아서 하는 수고를 덜 수 있습니다.
계정 횡단 시 주의할 점
리소스가 계정을 넘나들며 연계되어 있는 경우가 있다
Route 53(A/CNAME 레코드) → CloudFront → 오리진(EC2/Lightsail)이라는 구성에서, 각 레이어가 별도의 계정에 분산되어 있는 경우가 있습니다. 한 계정만 보고 있으면 "이 도메인의 연결 대상을 모르겠다"는 상황이 됩니다.
전체 계정 조사가 완료될 때까지 "불명"으로 보류 목록에 남겨두고, 다른 계정을 조사하면서 대조해나가는 방식이 효과적입니다.
이번에 사용한 도구 역할 정리
| 도구 | 역할 |
|---|---|
| Cost Explorer | 비용 현황 파악 · 계정 우선순위 분류 |
| Resource Explorer | 사용 중인 서비스 특정 · 전체 조망 (무료 · 즉시) |
| AWS CLI | 서비스별 상세 정보 · 연결 관계 취득 |
| AI (Claude) | JSON/CSV에서 리소스 정리 · Markdown화 · IP 대조 |
| draw.io | 구성도 · 계정 관계도 작성 |
그 외: 인벤토리 조사에 도움이 되는 서비스 · 방법
이번 플로우에서 사용한 도구 외에도, 상황에 따라 유효한 수단이 있습니다.
Tag Editor
리전을 넘나들어 태그 조건으로 리소스를 횡단 검색할 수 있는 AWS 콘솔 기능입니다. "태그가 전혀 없는 환경"에서도 역으로 "태그 없는 리소스 목록"으로 활용할 수 있어, Resource Explorer와 조합하면 누락 체크에 유용합니다.
CloudTrail
과거의 조작 로그를 확인할 수 있습니다. "언제 누가 이 리소스를 만들었는지" 소급하고 싶을 때 참조합니다. 다만 보존 기간(기본 90일)이 있어 오래된 리소스의 경위 추적에는 한계가 있습니다. 인벤토리 목적에서는 보조적인 위치입니다.
AWS Config
활성화되어 있으면 리소스 간 관계성을 시각적으로 확인할 수 있습니다. CLI의 JSON 분석을 생략할 수 있는 경우도 많습니다. 다만 활성화 전의 이력은 취득할 수 없으므로, 조사 시점에 미활성화된 경우는 현재 스냅샷 확인용으로 사용합니다.
Trusted Advisor
비용 · 보안 · 성능 관점에서 "사용하지 않는 리소스"나 "설정 문제"를 자동으로 지적해줍니다. 인벤토리 조사 스코프 외에서도, 클라이언트에 대한 보고서에 "권장 사항"으로 첨부할 자료로 활용하기 좋습니다. Business/Enterprise 지원 플랜이 필요한 체크 항목도 있습니다.
Cost and Usage Report (CUR)
Cost Explorer보다 상세한 청구 데이터를 CSV로 취득할 수 있습니다. 리소스 ID나 사용량 단위까지 확인하고 싶을 때 사용합니다. 설정에 S3 버킷과 Athena가 필요하고 즉시성은 없지만, 서비스별 · 리소스별 비용을 정확히 파악하고 싶은 경우에는 가장 신뢰할 수 있는 데이터 소스가 됩니다.
마무리
Cost Explorer → Resource Explorer → CLI → AI 정리 → draw.io 순서로 진행하면서 귀찮은 일은 AI를 활용한다. 이 내용만 기억하신다면 문제없이 조사를 진행할 수 있다고 생각합니다.
"누가 뭘 만들었는지 모르는 환경"을 정리하는 데 도움이 되었으면 합니다.
긴 글 읽어주셔서 감사합니다.
잘못된 내용이나 피드백은 must01940 지메일로 보내주시면 감사합니다.
만약 리소스를 조작하는 것이 걱정된다면 프롬프트에 금지 행동으로 지정합시다. ↩︎











