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를 마칩니다.
수고하셨습니다 :)



