Home
home

P2 섹션 16 - 리소스 점검 및 대응 - AWS Config & Amazon Q

1. 기본 환경 구성

이번 실습은 IAM 사용자 계정을 통해 관리 콘솔에 접근하고 액세스 키를 활용해 awscli 도구를 사용합니다.
해당 작업을 수행하지 않았다면 아래 토글을 확장해 작업을 선행하고 본격적인 실습에 들어갑니다.
IAM 사용자 생성 및 액세스 키 생성

1.1. Terraform을 통한 기본 인프라 배포

Terraform을 통한 기본 인프라 배포에 앞서 SSH 키 페어, IAM User Access Key ID, IAM User Secret Access Key를 미리 확인하고 메모해 둡니다.
Terraform으로 기본 인프라 배포
cd cnasg_class_tf/Section16
Bash
복사
# 실습 코드 경로 진입
export TF_VAR_KeyName=[각자 ssh keypair] export TF_VAR_NickName=[각자 닉네임] export TF_VAR_MyIamUserAccessKeyID=[각자 iam 사용자의 access key id] export TF_VAR_MyIamUserSecretAccessKey=[각자 iam 사용자의 secret access key] export TF_VAR_SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32
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. 기본 정보 확인

Terraform 배포가 완료 후 출력되는 Outputs 정보에서 lab_admin_ip의 퍼블릭 IP를 확인합니다.
대상 IP로 인스턴스에 SSH로 접속하고 아래 명령어를 통해 정보를 확인합니다.
LAB-ADMIN
기본 정보 확인
echo ${AWS_DEFAULT_REGION} echo ${ACCOUNT_ID} echo ${NICKNAME}
Bash
복사
# 변수 확인
aws sts get-caller-identity
Bash
복사
# caller id 확인
Note:  인스턴스가 생성되고 너무 빠르게 접속하면 aws 자격 증명이 완료되지 않을 수 있습니다.
그럴 경우에는 약간의 대기 후 다시 접속해 주세요.
생성된 IAM Role 확인
aws iam list-roles \ --query "Roles[?starts_with(RoleName, 'cnasg-')].RoleName" \ --output table
Bash
복사
# Terraform으로 생성된 IAM Role 목록 확인

2. 공통 기반 구성

이번 실습을 위한 공통 기반을 구성합니다.

2.1. AWS Config 공통 기반 구성

Delivery Channel용 S3 버킷 생성
aws s3api create-bucket \ --bucket cnasg-${NICKNAME}-config \ --region ${AWS_DEFAULT_REGION} \ --create-bucket-configuration LocationConstraint=${AWS_DEFAULT_REGION}
Bash
복사
# Config 설정 데이터 저장용 S3 버킷 생성
cat <<EOF > config-bucket-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSConfigBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::cnasg-${NICKNAME}-config" }, { "Sid": "AWSConfigBucketExistenceCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::cnasg-${NICKNAME}-config" }, { "Sid": "AWSConfigBucketDelivery", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::cnasg-${NICKNAME}-config/AWSLogs/${ACCOUNT_ID}/Config/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] } EOF
Bash
복사
# Delivery Channel 버킷 정책 파일 생성
aws s3api put-bucket-policy \ --bucket cnasg-${NICKNAME}-config \ --policy file://config-bucket-policy.json
Bash
복사
# 버킷 정책 적용
IAM Role 확인 (Recorder용)
RECORDER_ROLE_ARN=$(aws iam get-role \ --role-name cnasg-config-recorder-role \ --query 'Role.Arn' \ --output text) echo $RECORDER_ROLE_ARN
Bash
복사
# Config Recorder용 IAM Role 확인 (Terraform 생성)
aws iam get-role \ --role-name cnasg-config-recorder-role \ --query 'Role.AssumeRolePolicyDocument'
Bash
복사
# 신뢰 정책 확인
aws iam list-attached-role-policies \ --role-name cnasg-config-recorder-role
Bash
복사
# 연결된 관리형 정책 확인 (AWS_ConfigRole)
Recorder 생성
cat <<EOF > config-recorder.json { "name": "cnasg-recorder", "roleARN": "${RECORDER_ROLE_ARN}", "recordingGroup": { "allSupported": false, "includeGlobalResourceTypes": false, "resourceTypes": [ "AWS::IAM::Policy", "AWS::IAM::User", "AWS::EC2::SecurityGroup" ] } } EOF
Bash
복사
# Recorder 설정 파일 생성 (IAM Policy, 보안그룹 대상)
aws configservice put-configuration-recorder \ --configuration-recorder file://config-recorder.json
Bash
복사
# Recorder 생성
aws configservice describe-configuration-recorders | jq
Bash
복사
# Recorder 확인
현재 Recorder는 생성된 상태이지만, 아직 레코딩은 시작되지 않은 상태입니다.
Delivery Channel 생성
cat <<EOF > config-delivery-channel.json { "name": "cnasg-delivery-channel", "s3BucketName": "cnasg-${NICKNAME}-config" } EOF
Bash
복사
# Delivery Channel 설정 파일 생성
aws configservice put-delivery-channel \ --delivery-channel file://config-delivery-channel.json
Bash
복사
# Delivery Channel 생성
aws configservice describe-delivery-channels | jq
Bash
복사
# Delivery Channel 확인
Recorder 시작
aws configservice start-configuration-recorder \ --configuration-recorder-name cnasg-recorder
Bash
복사
# Recorder 시작
aws configservice describe-configuration-recorder-status \ --configuration-recorder-names cnasg-recorder
Bash
복사
# Recorder 상태 확인 (recording: true, lastStatus: SUCCESS)

2.2. Remediation용 IAM Role 생성

Remediation용 IAM Role 확인
export REMEDIATION_ROLE_ARN=$(aws iam get-role \ --role-name cnasg-config-remediation-role \ --query 'Role.Arn' \ --output text) echo $REMEDIATION_ROLE_ARN
Bash
복사
# Remediation IAM Role 확인 (Terraform 생성)
aws iam get-role \ --role-name cnasg-config-remediation-role \ --query 'Role.AssumeRolePolicyDocument'
Bash
복사
# 신뢰 정책 확인
aws iam get-role-policy \ --role-name cnasg-config-remediation-role \ --policy-name cnasg-remediation-policy | jq
Bash
복사
# 인라인 권한 정책 확인

2.3. Amazon Q 공통 기반 구성

SNS 토픽 생성
SNS_TOPIC_ARN=$(aws sns create-topic \ --name cnasg-config-alert \ --query 'TopicArn' \ --output text) echo $SNS_TOPIC_ARN
Bash
복사
# Config 알림용 SNS 토픽 생성 및 ARN 변수 선언
SNS 토픽 정책 업데이트 (EventBridge Publish 권한 추가)
cat <<EOF > sns-policy.json { "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish" ], "Resource": "${SNS_TOPIC_ARN}", "Condition": { "StringEquals": { "AWS:SourceOwner": "${ACCOUNT_ID}" } } }, { "Sid": "EventBridgePublish", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "${SNS_TOPIC_ARN}" } ] } EOF
Bash
복사
# SNS 토픽 정책 파일 생성
aws sns set-topic-attributes \ --topic-arn ${SNS_TOPIC_ARN} \ --attribute-name Policy \ --attribute-value file://sns-policy.json
Bash
복사
# SNS 토픽 정책 업데이트
Chatbot용 IAM Role 확인
CHATBOT_ROLE_ARN=$(aws iam get-role \ --role-name cnasg-chatbot-role \ --query 'Role.Arn' \ --output text) echo $CHATBOT_ROLE_ARN
Bash
복사
# Chatbot IAM Role 확인 (Terraform 생성)
aws iam get-role \ --role-name cnasg-chatbot-role \ --query 'Role.AssumeRolePolicyDocument'
Bash
복사
# 신뢰 정책 확인
aws iam list-attached-role-policies \ --role-name cnasg-chatbot-role
Bash
복사
# 연결된 관리형 정책 확인 (ReadOnlyAccess)
Slack 워크스페이스 연결
[관리 콘솔] Amazon Q Developer in chat application → 채팅 클라이언트 → Slack → 클라이언트 구성(클릭) [Slack 인증 페이지] Workspace 선택 → 허용(클릭) → 워크스페이스 연결 완료 확인
Plain Text
복사
# 관리 콘솔에서 Amazon Q Developer in chat application 설정
SLACK_WORKSPACE_ID=$(aws chatbot describe-slack-workspaces \ --region us-east-2 \ --query 'SlackWorkspaces[0].SlackTeamId' \ --output text) echo $SLACK_WORKSPACE_ID
Bash
복사
# Slack 워크스페이스 ID 변수 선언
Chatbot Slack 채널 설정
1. Slack 앱 → 채널 생성(+) → 이름: cnasg-alert → 다음 → 생성 → 지금은 건너뛰기 2. #cnasg-alert 채널에서 /invite @Amazon Q 입력 후 초대 3. Slack 앱 → #cnasg-alert 채널 우클릭 → 채널 세부정보 보기 → 하단 채널 ID 확인 및 복사
Plain Text
복사
# Slack 앱에서 설정
SLACK_CHANNEL_ID=[각자 Slack 채널 ID] echo $SLACK_CHANNEL_ID
Bash
복사
# Slack 채널 ID 변수 선언
aws chatbot create-slack-channel-configuration \ --configuration-name cnasg-config-alert \ --slack-team-id ${SLACK_WORKSPACE_ID} \ --slack-channel-id ${SLACK_CHANNEL_ID} \ --iam-role-arn ${CHATBOT_ROLE_ARN} \ --sns-topic-arns ${SNS_TOPIC_ARN} \ --logging-level ERROR \ --region us-east-2
Bash
복사
# Chatbot Slack 채널 설정 생성
aws chatbot describe-slack-channel-configurations \ --query 'SlackChannelConfigurations[*].{Name:ConfigurationName,Channel:SlackChannelName,State:State}' \ --region us-east-2 \ --output table
Bash
복사
# Chatbot 채널 설정 확인
EventBridge 규칙 생성 (Config 탐지 → SNS)
aws events put-rule \ --name cnasg-config-compliance-change \ --event-pattern '{"source":["aws.config"],"detail-type":["Config Rules Compliance Change"]}' \ --state ENABLED
Bash
복사
# EventBridge 규칙 생성
aws events put-targets \ --rule cnasg-config-compliance-change \ --targets "Id=sns-target,Arn=${SNS_TOPIC_ARN}"
Bash
복사
# SNS 토픽을 EventBridge 타겟으로 등록
aws events describe-rule \ --name cnasg-config-compliance-change | jq
Bash
복사
# EventBridge 규칙 확인

3. 리소스 진단 및 대응

실습용 리소스를 생성한 후 [탐지] → [실행] → [알림] 과정을 거쳐 진단하고 대응합니다.

3.1. [Case 1] IAM 관리자급 정책 자동 격리

[탐지] Config Rule 생성
cat <<EOF > iam-config-rule.json { "ConfigRuleName": "cnasg-iam-no-admin-policy", "Source": { "Owner": "AWS", "SourceIdentifier": "IAM_POLICY_BLACKLISTED_CHECK" }, "InputParameters": "{\"policyArns\":\"arn:aws:iam::aws:policy/AdministratorAccess\"}", "Scope": { "TagKey": "Lab", "TagValue": "cnasg-16" } } EOF
Bash
복사
# Config Rule 설정 파일 생성 (AdministratorAccess 부착 여부 판단, 태그 스코프)
aws configservice put-config-rule \ --config-rule file://iam-config-rule.json
Bash
복사
# Config Rule 생성
aws configservice describe-config-rules \ --config-rule-names cnasg-iam-no-admin-policy | jq
Bash
복사
# Config Rule 확인
[실행] Remediation 연결 (자동 교정)
cat <<EOF > iam-remediation.json [ { "ConfigRuleName": "cnasg-iam-no-admin-policy", "TargetType": "SSM_DOCUMENT", "TargetId": "AWSConfigRemediation-RemoveUserPolicies", "Parameters": { "IAMUserID": { "ResourceValue": { "Value": "RESOURCE_ID" } }, "PolicyType": { "StaticValue": { "Values": ["Managed"] } }, "AutomationAssumeRole": { "StaticValue": { "Values": ["${REMEDIATION_ROLE_ARN}"] } } }, "Automatic": true, "MaximumAutomaticAttempts": 3, "RetryAttemptSeconds": 60 } ] EOF
Bash
복사
# Remediation 설정 파일 생성 (User에 부착된 관리형 정책 제거)
aws configservice put-remediation-configurations \ --remediation-configurations file://iam-remediation.json
Bash
복사
# Remediation 연결
aws configservice describe-remediation-configurations \ --config-rule-names cnasg-iam-no-admin-policy | jq
Bash
복사
# Remediation 설정 확인
실습용 IAM 자원 생성
cat <<'EOF' > create-iam-lab-resources.sh #!/bin/bash # LAB-USER 생성 (태그 포함, 이미 있으면 태그만 추가) aws iam create-user \ --user-name LAB-USER \ --tags Key=Lab,Value=cnasg-16 \ || aws iam tag-user --user-name LAB-USER --tags Key=Lab,Value=cnasg-16 # AdministratorAccess 관리형 정책을 직접 부착 (NON_COMPLIANT 상황 재현) aws iam attach-user-policy \ --user-name LAB-USER \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess echo "Done." EOF chmod +x create-iam-lab-resources.sh
Bash
복사
# 실습용 IAM 자원 생성 스크립트 작성
./create-iam-lab-resources.sh
Bash
복사
# 스크립트 실행
aws iam list-attached-user-policies \ --user-name LAB-USER
Bash
복사
# LAB-USER 부착 정책 확인 (cnasg-admin-policy)
Config 탐지 확인
aws configservice start-config-rules-evaluation \ --config-rule-names cnasg-iam-no-admin-policy
Bash
복사
# Config Rule 수동 평가 트리거
watch -d "aws configservice get-compliance-details-by-config-rule \ --config-rule-name cnasg-iam-no-admin-policy \ --query 'EvaluationResults[*].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,Status:ComplianceType}' \ --output table"
Bash
복사
# Config Rule 평가 결과 모니터링
Remediation 실행 및 결과 확인
aws configservice describe-remediation-execution-status \ --config-rule-name cnasg-iam-no-admin-policy | jq
Bash
복사
# Remediation 실행 상태 확인 (SUCCEEDED 확인)
aws iam list-attached-user-policies \ --user-name LAB-USER
Bash
복사
# LAB-USER 부착 정책 확인 (빈 상태 확인)
aws configservice start-config-rules-evaluation \ --config-rule-names cnasg-iam-no-admin-policy
Bash
복사
# COMPLIANT 전환 확인
watch -d "aws configservice get-compliance-details-by-config-rule \ --config-rule-name cnasg-iam-no-admin-policy \ --query 'EvaluationResults[*].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,Status:ComplianceType}' \ --output table"
Bash
복사
Slack #cnasg-alert 채널에서 NON_COMPLIANT → COMPLIANT 알림 수신 확인

3.2. [Case 2] 보안 그룹 SSH 퍼블릭 노출 자동 차단

[스크립트] Config Rule + Remediation 설정
curl -O https://raw.githubusercontent.com/cloudneta/ongja/refs/heads/main/setup-sg-config-remediation.sh chmod +x setup-sg-config-remediation.sh cat setup-sg-config-remediation.sh
Bash
복사
# 스크립트 다운로드 및 권한 설정
./setup-sg-config-remediation.sh
Bash
복사
# 스크립트 실행 (Config Rule 생성 + Remediation 연결)
aws configservice describe-config-rules \ --config-rule-names cnasg-sg-no-public-ssh | jq
Bash
복사
# Config Rule과 Remediation 설정 확인
aws configservice describe-remediation-configurations \ --config-rule-names cnasg-sg-no-public-ssh | jq
Bash
복사
실습용 보안 그룹 자원 생성
wget https://raw.githubusercontent.com/cloudneta/ongja/refs/heads/main/create-sg-lab-resources.sh chmod +x create-sg-lab-resources.sh cat create-sg-lab-resources.sh
Bash
복사
# 스크립트 다운로드 및 권한 생성
./create-sg-lab-resources.sh
Bash
복사
# 스크립트 실행 (정상 SG + 취약 SG 생성)
Config 탐지 확인
aws configservice start-config-rules-evaluation \ --config-rule-names cnasg-sg-no-public-ssh
Bash
복사
# Config Rule 수동 평가 트리거
watch -d "aws configservice get-compliance-details-by-config-rule \ --config-rule-name cnasg-sg-no-public-ssh \ --query 'EvaluationResults[*].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,Status:ComplianceType}' \ --output table"
Bash
복사
# [신규 터미널] Config Rule 평가 결과 모니터링 (NON_COMPLIANT 확인)
Remediation 실행 및 결과 확인
aws configservice describe-remediation-execution-status \ --config-rule-name cnasg-sg-no-public-ssh
Bash
복사
# Remediation 실행 상태 확인 (SUCCEEDED 확인)
VULN_SG_ID=$(aws ec2 describe-security-groups \ --filters "Name=group-name,Values=cnasg-vulnerable-sg" \ --query 'SecurityGroups[0].GroupId' \ --output text) echo $VULN_SG_ID
Bash
복사
# VULN_SG_ID 변수 재선언 (Remediation 결과 확인용)
aws ec2 describe-security-groups \ --group-ids ${VULN_SG_ID} \ --query 'SecurityGroups[0].IpPermissions'
Bash
복사
# 인바운드 규칙 확인 (제거 여부)
aws configservice start-config-rules-evaluation \ --config-rule-names cnasg-sg-no-public-ssh
Bash
복사
# COMPLIANT 전환 확인
watch -d "aws configservice get-compliance-details-by-config-rule \ --config-rule-name cnasg-sg-no-public-ssh \ --query 'EvaluationResults[*].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,Status:ComplianceType}' \ --output table"
Bash
복사
Slack #cnasg-alert 채널에서 NON_COMPLIANT 알림 수신 확인
echo "@Amazon Q ec2 describe-security-group-rules \ --filters Name=group-id,Values=${VULN_SG_ID}"
Bash
복사
를 입력해 출력된 값을 Slack #cnasg-alert 채널에서 직접 조회합니다.
NORMAL_SG_ID=$(aws ec2 describe-security-groups \ --filters "Name=group-name,Values=cnasg-normal-sg" \ --query 'SecurityGroups[0].GroupId' \ --output text) echo "@Amazon Q ec2 describe-security-group-rules \ --filters Name=group-id,Values=${NORMAL_SG_ID}"
Bash
복사
정상 보안 그룹도 조회할 수 있습니다.

4. 실습 환경 삭제

Chatbot 채널 설정 삭제
CHATBOT_CONFIG_ARN=$(aws chatbot describe-slack-channel-configurations \ --region us-east-2 \ --query 'SlackChannelConfigurations[0].ChatConfigurationArn' \ --output text) aws chatbot delete-slack-channel-configuration \ --chat-configuration-arn ${CHATBOT_CONFIG_ARN} \ --region us-east-2
Bash
복사
# Chatbot Slack 채널 설정 삭제
EventBridge 규칙 삭제
aws events remove-targets \ --rule cnasg-config-compliance-change \ --ids sns-target
Bash
복사
# EventBridge 타겟 제거
aws events delete-rule \ --name cnasg-config-compliance-change
Bash
복사
# EventBridge 규칙 삭제
SNS 토픽 삭제
aws sns delete-topic \ --topic-arn ${SNS_TOPIC_ARN}
Bash
복사
# SNS 토픽 삭제
Remediation 설정 및 Config Rule 삭제
aws configservice delete-remediation-configuration \ --config-rule-name cnasg-iam-no-admin-policy aws configservice delete-remediation-configuration \ --config-rule-name cnasg-sg-no-public-ssh
Bash
복사
# Remediation 설정 삭제
aws configservice delete-config-rule \ --config-rule-name cnasg-iam-no-admin-policy aws configservice delete-config-rule \ --config-rule-name cnasg-sg-no-public-ssh
Bash
복사
# Config Rule 삭제
실습용 IAM/보안 그룹 자원 삭제
aws iam detach-user-policy \ --user-name LAB-USER \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess \ 2>/dev/null || true aws iam delete-user --user-name LAB-USER
Bash
복사
# 실습용 IAM 자원 삭제
NORMAL_SG_ID=$(aws ec2 describe-security-groups \ --filters "Name=group-name,Values=cnasg-normal-sg" \ --query 'SecurityGroups[0].GroupId' \ --output text) VULN_SG_ID=$(aws ec2 describe-security-groups \ --filters "Name=group-name,Values=cnasg-vulnerable-sg" \ --query 'SecurityGroups[0].GroupId' \ --output text) aws ec2 delete-security-group --group-id ${NORMAL_SG_ID} aws ec2 delete-security-group --group-id ${VULN_SG_ID}
Bash
복사
# 실습용 보안그룹 삭제
Config Recorder 및 Delivery Channel 삭제
aws configservice stop-configuration-recorder \ --configuration-recorder-name cnasg-recorder
Bash
복사
# Recorder 중지
aws configservice delete-configuration-recorder \ --configuration-recorder-name cnasg-recorder
Bash
복사
# Recorder 삭제
aws configservice delete-delivery-channel \ --delivery-channel-name cnasg-delivery-channel
Bash
복사
# Delivery Channel 삭제
Config S3 버킷 삭제
aws s3 rm s3://cnasg-${NICKNAME}-config --recursive aws s3api delete-bucket --bucket cnasg-${NICKNAME}-config
Bash
복사
# Config 로그 S3 버킷 삭제
[Amazon Q] Slack 워크스페이스 연결 해제
[관리 콘솔] Amazon Q Developer in chat applications → Slack → WorkSpace → WorkSpace 구성 제거(클릭) → WorkSpace ID 입력 → WorkSpace 구성 제거(클릭)
Plain Text
복사
# 관리 콘솔에서 Amazon Q Developer in chat application 삭제
Slack 채널 삭제
Slack 앱 → #cnasg-alert 채널 우클릭 → 채널 세부정보 보기 → 설정 → 이 채널 삭제 → Check → 채널 삭제(클릭)
Plain Text
복사
# Slack 앱에서 실습용 채널 삭제
Terraform 자원 삭제
nohup sh -c "terraform destroy -auto-approve" > delete.log 2>&1 &
Bash
복사
# terraform 자원 삭제
Note:  Terraform 자원 삭제가 완료되면(약 3분 정도 대기) 정상적으로 자원 삭제가 되었는지 확인을 합니다.(cat delete.log)
여기까지 섹션 16 실습 - 리소스 점검 및 대응 - AWS Config & Amazon Q를 마칩니다.
수고하셨습니다 :)