1. 기본 환경 구성
이번 실습은 IAM 사용자 계정을 통해 관리 콘솔에 접근하고 액세스 키를 활용해 awscli 도구를 사용합니다.
해당 작업을 수행하지 않았다면 아래 토글을 확장해 작업을 선행하고 본격적인 실습에 들어갑니다.
IAM 사용자 생성 및 액세스 키 생성
1.1. Terraform을 통한 기본 인프라 배포
Terraform으로 기본 인프라 배포
cd cnasg_class_tf/Section20
Bash
복사
# 실습 코드 경로 진입
export TF_VAR_NickName=[각자 닉네임]
Bash
복사
# Terraform 환경 변수 저장
terraform init
terraform plan
Bash
복사
# Terraform 배포
nohup sh -c "terraform apply -auto-approve" > create.log 2>&1 &
Bash
복사
Note:
Terraform 배포가 완료되면(약 5분 정도 대기) 정상적으로 자원 생성이 되었는지 확인을 합니다.(cat create.log)
실수로 Terraform 환경 변수를 설정하지 않은 상태에서 nohup으로 실행하면, terraform 에러가 발생해도 프로세스가 종료되지 않고 계속 점유될 수 있습니다.
이 경우 terraform 프로세스를 강제로 종료한 뒤, 환경 변수를 설정하고 다시 실행해야 합니다.
ps aux | grep -i terraform
kill -9 <terraform_PID>
Bash
복사
# terraform 프로세스 강제 종료
1.2. 기본 정보 확인
사용자 PC
실습용 생성 자원 확인
export AWS_PAGER=""
Bash
복사
# AWS CLI 결과를 바로 출력
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=cnasg-section,Values=20 \
--region ap-northeast-2 \
--query "ResourceTagMappingList[].ResourceARN" \
--output table
Bash
복사
# 태그 기반 리소스 전체 조회 (IAM 제외)
aws iam list-users \
--query "Users[?starts_with(UserName, 'cnasg-vuln-')].UserName" \
--output table
aws iam list-policies \
--scope Local \
--query "Policies[?starts_with(PolicyName, 'cnasg-vuln-')].PolicyName" \
--output table
Bash
복사
# IAM 리소스 확인 (태그 필터 미지원 - 이름 프리픽스로 대신 조회)
2. AI 에이전트를 통한 보안 진단
이번 실습은 Claude Desktop과 Codex Desktop을 기준으로 진행합니다.
AI 도구의 UI나 AWS MCP 연결 절차는 언제든 바뀔 수 있습니다.
변경되면 Hands-On 페이지에 반영하겠지만, 화면이 다르게 보이시면 아래 공식 문서 링크를 참고해 주세요.
2.1. MCP 연결 설정
사용자 PC
사전 준비
aws iam create-user --user-name cnasg-mcp-readonly
Bash
복사
# 읽기 전용 IAM 사용자 생성
aws iam attach-user-policy \
--user-name cnasg-mcp-readonly \
--policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
aws iam attach-user-policy \
--user-name cnasg-mcp-readonly \
--policy-arn arn:aws:iam::aws:policy/AWSMCPSignInOAuthAccessPolicy
Bash
복사
# 권한 연결
aws iam create-login-profile \
--user-name cnasg-mcp-readonly \
--password '임시비밀번호_직접정하기!' \
--no-password-reset-required
Bash
복사
# 콘솔 로그인 비밀번호 생성
이 방식은 액세스 키가 아니라 콘솔 로그인 비밀번호가 필요합니다.
브라우저 로그인 화면에서 이 계정으로 직접 로그인하는 절차를 거칩니다.
[Claude] 커넥터 추가 (웹 또는 Desktop)
1.
대화창 하단 “+” → 커넥터 → connector 추가 → 커스텀 커넥터 추가
2.
"커스텀 커넥터 추가" 대화상자가 뜨면:
•
이름: aws-mcp
•
원격 MCP 서버 URL: https://aws-mcp.us-east-1.api.aws/mcp
•
고급 설정(OAuth 클라이언트 ID/시크릿)은 비워둠
3.
추가 (버튼 클릭)
웹 브라우저에 Connect MCP Client to AWS MCP Server 창이 출력됩니다.
4.
[웹 브라우저] Sign into new session (클릭)
5.
[웹 브라우저] Continue with Root or IAM user (클릭) → cnasg-mcp-readonly으로 Sign-In
6.
Claude 종료 → 시작
7.
"+" → 커넥터에서 aws-mcp 토글 확인
대화창을 새로 생성한 후 아래 동작을 확인합니다.
내 AWS 계정의 S3 버킷 목록을 보여줘
Plain Text
복사
cnasg-mcp-test라는 버킷을 생성해줘
Plain Text
복사
[Codex] 플러그인 추가 (CLI 또는 Desktop)
1.
새 채팅 → 아래 명령 입력
codex mcp add aws-mcp --url 'https://aws-mcp.us-east-1.api.aws/mcp'
Bash
복사
# codex mcp 추가 명령
codex mcp login aws-mcp 명령의 브라우저 링크를 줘
Bash
복사
# codex mcp 로그인 명령
2.
[웹 브라우저] Sign into new session (클릭)
3.
[웹 브라우저] Continue with Root or IAM user (클릭) → cnasg-mcp-readonly으로 Sign-In
4.
“인증 완료” 입력
5.
아래 명령 입력
codex mcp list
Bash
복사
# codex mcp 리스트 확인
대화창을 새로 생성한 후 아래 동작을 확인합니다.
앞으로 aws-mcp를 사용하고, 내 AWS 계정의 S3 버킷 목록을 보여줘
Plain Text
복사
cnasg-mcp-test라는 버킷을 생성해줘
Plain Text
복사
2.2. 작업 전제 입력
신규 대화창(Claude or Codex)
작업 전제 입력
아래는 이 대화에서 적용할 작업 전제다.
지금 당장 아무것도 확인하지 말고, 앞으로 내가 특정 리소스를 지목해서 물어볼 때만 아래 기준을 적용한다.
[Scope - 조회 범위]
- 모든 AWS 리소스 조회는 리전 ap-northeast-2로 한정한다.
- AWS 리소스 조회는 태그 cnasg-section=20이 붙은 리소스만 대상으로 한다.
- IAM 사용자/역할/정책은 태그 필터가 적용되지 않으므로,
이름이 cnasg-vuln-로 시작하는 것만 대상으로 한다.
[Task - 진단 방식]
- 특정 설정 하나를 확인해달라는 요청이 아니라, 해당 리소스의 보안 취약점을 스스로 찾아서 보고한다.
[Guardrail - 응답 범위]
- AWS 관련 작업은 반드시 연결된 aws-mcp 도구를 통해서만 수행하고,
로컬 셸이나 AWS CLI를 직접 실행하지 않는다.
- 발견한 문제에 대해 조치 방법을 개념 수준으로만 안내한다.
- 바로 실행 가능한 완성된 CLI 명령어는 제시하지 않는다.
- 실제 조치는 수행하지 않는다.
[Criteria - 판단 기준]
- CIS/FSBP 컨트롤 번호와 심각도는 기억에 의존해 추정하지 말고,
가능하면 search_documentation/read_documentation 도구로
AWS 공식 문서를 직접 조회해서 확인한다.
- 조회가 불가능한 경우에만 추정임을 명시한다.
[Output - 출력 형식]
- 발견한 문제는 리소스별로 나열식으로 정리한다. (표 형식 사용 금지)
- 각 문제는 위험도와 함께 구분하고, 문제점·위험한 이유·참고 컨트롤·조치 방향을
항목별로 줄바꿈하여 가독성 있게 정리한다.
- 각 문제 제목 앞에 위험도에 따라 이모지를 붙인다:
🔴 Critical 🟠 High 🟡 Medium 🟢 Low
- "문제 없음" 항목은 ✅를 붙인다.
- 각 문제마다 다음 순서로 작성한다:
위험도 → 무엇이 문제인지 → 왜 위험한지 → 참고 컨트롤(있다면, 불확실함을 명시) → 조치 방향
- 문제가 없는 항목도 짧게 언급한다.
Plain Text
복사
# 작업 전제
지금은 이해를 돕기 위해 대화창에 직접 붙여넣지만, 실제 운영 환경에서는 이런 작업 전제를 프로젝트 지침이나 시스템 프롬프트 파일로 고정해두고, 에이전트가 실행될 때마다 자동으로 불러오도록 구성하는 것이 일반적입니다.
2.3. 항목별 진단 요청
AI 도구 대화창
항목별 보안 진단 요청 리스트
S3 버킷의 보안 취약점 찾아줘
Plain Text
복사
# 항목별 진단 요청
보안그룹의 보안 취약점 찾아줘
Plain Text
복사
IAM 정책의 보안 취약점 찾아줘
Plain Text
복사
EC2 인스턴스의 보안 취약점 찾아줘
Plain Text
복사
CloudTrail 설정의 보안 취약점 찾아줘
Plain Text
복사
Secrets Manager의 보안 취약점 찾아줘
Plain Text
복사
EBS 스냅샷의 보안 취약점 찾아줘
Plain Text
복사
AI 에이전트의 모델과 버전에 따라 결과가 다르게 나올 수 있습니다.
3. 실습 환경 삭제
[Claude] 커넥터 삭제 (웹 또는 Desktop)
1.
대화창 하단 “+” → 커넥터 → 커넥터 관리
2.
aws-mcp 선택 → … → 제거
[Codex] 플러그인 삭제 (CLI 또는 Desktop)
codex mcp logout aws-mcp
codex mcp remove aws-mcp
Bash
복사
# aws-mcp 로그 아웃 후 삭제
실습용 IAM 사용자 삭제
aws iam detach-user-policy \
--user-name cnasg-mcp-readonly \
--policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
aws iam detach-user-policy \
--user-name cnasg-mcp-readonly \
--policy-arn arn:aws:iam::aws:policy/AWSMCPSignInOAuthAccessPolicy
aws iam delete-login-profile \
--user-name cnasg-mcp-readonly
aws iam delete-user \
--user-name cnasg-mcp-readonly
Bash
복사
# 사용자 권한 연결 해제 및 사용자 삭제
Terraform 자원 삭제
nohup sh -c "terraform destroy -auto-approve" > delete.log 2>&1 &
Bash
복사
# terraform 자원 삭제
Note:
Terraform 자원 삭제가 완료되면(약 3분 정도 대기) 정상적으로 자원 삭제가 되었는지 확인을 합니다.(cat delete.log)
여기까지 섹션 20 실습 - AI 에이전트 보안 진단 - AWS MCP Server를 마칩니다.
수고하셨습니다 :)



