⚙️ ALPACO 플랫폼 - 운영 매뉴얼 ⚙️
목차:
- 소개
- 운영자를 위한 사전 준비 사항
- AWS 관리 콘솔 접근
- 핵심 운영 작업
- 일반적인 문제 해결
- 운영자를 위한 보안 모범 사례
- 연락처 및 지원
1. 소개
1.1. 이 매뉴얼의 목적
이 매뉴얼은 ALPACO 플랫폼의 관리자 및 운영자를 위한 운영 지침을 제공합니다. AWS 관리 콘솔을 사용하여 모니터링, 데이터 관리, 사용자 관리 및 기본 문제 해결과 관련된 일반적인 작업을 다룹니다.
1.2. 시스템 개요
ALPACO는 AI 기반 알고리즘 학습 환경을 제공하도록 설계된 클라우드 네이티브 서버리스 애플리케이션입니다. 다음과 같은 AWS 서비스를 광범위하게 활용합니다:
- 컴퓨팅: AWS Lambda - 백엔드 마이크로서비스(문제 생성, 코드 실행, 커뮤니티 API, 챗봇 등) 실행.
- API 계층: Amazon API Gateway 및 Lambda 함수 URL (CloudFront 연동) - 서비스 노출.
- 데이터베이스: Amazon DynamoDB - 문제 데이터, 사용자 제출물, 커뮤니티 콘텐츠 저장.
- 인증: Amazon Cognito - 사용자 가입, 로그인 및 관리.
- 스토리지 및 호스팅: Amazon S3 - 프론트엔드 정적 자산 호스팅 및 Terraform 상태 저장.
- 네트워킹 및 콘텐츠 전송: Amazon CloudFront - CDN, SSL/TLS 종료, Lambda 함수 URL 보안 접근. Amazon Route 53 - DNS 관리.
- 모니터링: Amazon CloudWatch - 로그 및 지표 수집.
- 코드형 인프라 (IaC): Terraform - 모든 AWS 리소스 정의 및 관리. 배포는 일반적으로 GitHub Actions를 통해 자동화됩니다.
운영자는 주로 모니터링을 위해 CloudWatch, 데이터 검사/수정을 위해 DynamoDB, 사용자 관리를 위해 Cognito, 그리고 때때로 도메인/CDN 관련 작업을 위해 Route 53/CloudFront와 상호 작용합니다.
2. 운영자를 위한 사전 준비 사항
- AWS 계정 접근 권한: 관련 AWS 서비스(CloudWatch, DynamoDB, Cognito, S3, CloudFront, Route 53)에 접근할 수 있는 적절한 권한을 가진 IAM 사용자 자격 증명.
- AWS 콘솔 이해: AWS 관리 콘솔 탐색에 대한 기본적인 익숙함.
- Terraform 출력 값: Terraform 배포로부터 얻은 출력 값(예: 특정 S3 버킷 이름, DynamoDB 테이블 이름, CloudFront 배포 ID, Cognito 사용자 풀 ID)에 대한 접근 권한. 이 값들은 일반적으로 각 Terraform 모듈 내의
output.txt
파일(예:infrastructure/app/output.txt
,infrastructure/backend-setup/output.txt
)에 저장되거나 배포팀으로부터 제공됩니다.
3. AWS 관리 콘솔 접근
- 웹 브라우저를 열고 https://aws.amazon.com/으로 이동합니다.
- “콘솔에 로그인”을 클릭합니다.
- IAM 사용자 자격 증명을 입력합니다.
4. 핵심 운영 작업
4.1. 시스템 상태 및 로그 모니터링 (CloudWatch)
CloudWatch는 애플리케이션의 상태, 성능 모니터링 및 문제 해결에 필수적입니다.
- 로그 접근:
- AWS 콘솔에서 “CloudWatch”를 검색하여 이동합니다.
- 왼쪽 탐색 창에서 “로그 그룹 (Log groups)”을 클릭합니다.
- 다양한 서비스에 대한 로그 그룹을 찾을 수 있습니다. 일반적인 패턴은 다음과 같습니다:
- Lambda 함수:
/aws/lambda/alpaco-<함수-이름>-<환경>
- 예시:
/aws/lambda/alpaco-createPost-production
(커뮤니티 API용) - 예시:
/aws/lambda/alpaco-problem-generator-v3-production
- 예시:
/aws/lambda/alpaco-chatbot-query-production
- 예시:
/aws/lambda/alpaco-code-grader-production
- 예시:
- API Gateway:
/aws/api-gateway/<API-이름>/<스테이지-이름>
(실행 로깅이 활성화된 경우)- 예시:
/aws/api-gateway/alpaco-CommunityAPI-production/production
- 예시:
- CloudFront: 접근 로그는 일반적으로 S3 버킷으로 전달되도록 구성됩니다. 필요한 경우 CloudFront 배포 설정에서 S3 버킷 세부 정보를 확인하십시오.
- Lambda 함수:
- 로그 보기:
- 로그 그룹 이름을 클릭합니다.
- 그러면 로그 스트림 목록이 표시됩니다 (일반적으로 Lambda 컨테이너 인스턴스 또는 기간당 하나).
- 로그 스트림을 클릭하여 로그 이벤트를 봅니다.
- 필터 표시줄을 사용하여 특정 오류, 요청 ID 또는 키워드를 검색합니다.
- 주요 확인 사항:
- 오류 메시지, 스택 트레이스.
- Lambda 호출 시간, 메모리 사용량.
- API Gateway 요청/응답 세부 정보.
4.2. 데이터 관리 (DynamoDB)
ALPACO는 DynamoDB를 사용하여 애플리케이션 데이터를 저장합니다. 운영자는 관리 목적으로 항목을 보거나, 추가, 편집 또는 삭제해야 할 수 있습니다. 주의: 프로덕션 데이터의 직접 수정은 극도의 주의를 기울여 수행해야 하며, 가능하다면 애플리케이션 인터페이스를 통해 수행하는 것이 이상적입니다. 변경하기 전에 항상 데이터를 백업하거나 영향을 완전히 이해하십시오.
- DynamoDB 테이블 접근:
- AWS 콘솔에서 “DynamoDB”를 검색하여 이동합니다.
- 왼쪽 탐색 창에서 “테이블 (Tables)”을 클릭합니다.
- 필터/검색 창을 사용하여 특정 테이블을 찾습니다. 테이블 이름은
alpaco-<서비스명>-<환경>
패턴을 따릅니다.
4.2.1. 문제 데이터 관리
- 테이블 이름:
alpaco-Problems-v3-production
(또는 유사한 이름,problem-generator-v3
모듈의 Terraform 출력 확인). - 목적: AI가 생성한 문제(설명, 테스트 케이스, 솔루션, 난이도 등)를 저장합니다.
- 기본 키:
problemId
(문자열) - 일반적인 작업:
- 문제 보기:
- 테이블을 선택합니다.
- “테이블 항목 탐색 (Explore table items)” 탭을 클릭합니다.
- “스캔 (Scan)” 또는 “쿼리 (Query)” 옵션을 사용합니다. 특정 문제의 경우
problemId
를 파티션 키로 사용하여 “쿼리”합니다.
- 문제 편집:
- 위와 같이 항목을 찾습니다.
- 항목을 선택합니다.
- “작업 (Actions)” -> “항목 편집 (Edit item)”을 클릭합니다.
- JSON 또는 양식 보기에서 속성을 수정합니다. 주요 속성:
title
,description
,difficulty
,finalTestCases
(JSON 문자열),validatedSolutionCode
,startCode
,constraints
(JSON 문자열).
- 문제 삭제:
- 항목을 찾습니다.
- 항목을 선택합니다.
- “작업 (Actions)” -> “항목 삭제 (Delete item)”를 클릭하고 삭제를 확인합니다.
- 문제 추가 (수동 - AI 생성 콘텐츠에는 권장되지 않음):
- “항목 생성 (Create item)”을 클릭합니다.
documents/services/gen-problem.md
의ProblemDetailAPI
스키마에 따라 모든 필수 속성을 수동으로 입력합니다. 이는 복잡하고 오류가 발생하기 쉽습니다.
- 문제 보기:
- 유용한 GSI (쿼리용):
CompletedProblemsByCreatedAtGSI
: (PK:generationStatus
, SK:createdAt
) - “completed” 상태의 모든 문제를 생성 시간순으로 찾습니다.CreatorIdCreatedAtGSI
: (PK:creatorId
, SK:createdAt
) - 특정 생성자가 만든 문제를 찾습니다.
4.2.2. 커뮤니티 데이터 관리 (게시물 및 댓글)
- 테이블 이름:
alpaco-Community-production
(또는 유사한 이름,api
모듈의 Terraform 출력 확인). - 목적: 커뮤니티 게시물, 댓글, 좋아요를 저장합니다.
- 기본 키:
PK
(문자열 -postId
),SK
(문자열 - 게시물의 경우"POST"
, 댓글의 경우"COMMENT#{commentId}"
). - 일반적인 작업:
- 게시물/댓글 보기:
- 테이블을 선택하고 “테이블 항목 탐색 (Explore table items)”으로 이동합니다.
- 모든 게시물을 보려면:
GSI1PK = "POST"
로postOnlyIndex
GSI를 쿼리합니다. - 특정 게시물과 해당 댓글을 보려면:
PK = "<postId>"
로 기본 테이블을 쿼리합니다.
- 게시물/댓글 편집:
- 항목을 찾습니다.
- 선택 후 “작업 (Actions)” -> “항목 편집 (Edit item)”을 클릭합니다.
title
,content
등을 수정합니다. 소유권을 위해userId
와author
를 기억하십시오.
- 게시물/댓글 삭제:
- 항목을 찾습니다.
- 선택 후 “작업 (Actions)” -> “항목 삭제 (Delete item)”를 클릭합니다.
- 참고: API를 통해 게시물을 삭제하면 관련 댓글도 삭제됩니다. 수동 삭제 시에는 게시물 항목(
SK="POST"
)과 모든 댓글 항목(SK
가COMMENT#
로 시작)을 삭제해야 합니다.
- 좋아요 관리:
likesCount
(숫자) 및likedUsers
(문자열 집합 - 사용자 ID) 속성은 게시물 항목에 있습니다.
- 게시물/댓글 보기:
- 유용한 GSI:
postOnlyIndex
: (PK:GSI1PK="POST"
, SK:GSI1SK="createdAt"
) - 모든 게시물 목록 표시용.commentSortIndex
: (PK:PK="postId"
, SK:createdAt
) - 게시물의 댓글을 생성 시간순으로 정렬하여 목록 표시용.
4.2.3. 제출 데이터 관리
- 테이블 이름:
alpaco-Submissions-production
(또는 유사한 이름,code-execution-service
모듈의 Terraform 출력 확인). - 목적: 사용자 코드 제출 결과를 저장합니다.
- 기본 키:
submissionId
(문자열). - 일반적인 작업:
- 제출물 보기:
- 테이블을 선택하고 “테이블 항목 탐색 (Explore table items)”으로 이동합니다.
- 모든 제출물을 보려면 (데이터가 클 수 있음):
AllSubmissionsByTimeIndex
GSI (PK:is_submission
, SK:submissionTime
)를 쿼리합니다. - 특정 사용자의 제출물을 보려면:
UserIdSubmissionTimeIndex
GSI (PK:userId
, SK:submissionTime
)를 쿼리합니다. - 특정 문제의 제출물을 보려면:
ProblemIdSubmissionTimeIndex
GSI (PK:problemId
, SK:submissionTime
)를 쿼리합니다. - 특정 제출물을 보려면:
submissionId
로 기본 테이블을 쿼리합니다.
- 제출물 편집/삭제: 잘못된 데이터를 수정하는 경우를 제외하고는 일반적으로 권장되지 않습니다. 표준 DynamoDB 항목 편집/삭제 절차를 따릅니다. 주요 속성:
status
,userCode
,results
(테스트 케이스 결과 배열).
- 제출물 보기:
- 유용한 GSI (
documents/services/submission.md
기반 쿼리용):ProblemIdSubmissionTimeIndex
UserIdSubmissionTimeIndex
AllSubmissionsByTimeIndex
AuthorSubmissionTimeIndex
ProblemTitleSubmissionTimeIndex
ProblemTitleTranslatedSubmissionTimeIndex
4.2.4. Terraform 상태 잠금 테이블 관리 (참고용)
- 테이블 이름:
alpaco-tfstate-lock-table
(backend-setup
출력값). - 목적: Terraform이 인프라 상태에 대한 동시 수정을 방지하기 위해 사용합니다.
- 운영자 작업: 일반적으로 이 테이블을 수동으로 수정하지 마십시오. 오래된 잠금으로 인해 Terraform 실행이 중단된 경우 수동으로 잠금을 제거해야 할 수 있지만, 이는 Terraform의 잠금 메커니즘(
terraform force-unlock
)을 이해하고 극도의 주의를 기울여 수행해야 합니다. 개발/DevOps 팀과 상의하십시오.
4.3. 사용자 관리 (Amazon Cognito)
Cognito는 사용자 ID, 인증(Google 연동), 사용자 그룹을 관리합니다.
- Cognito 사용자 풀 접근:
- AWS 콘솔에서 “Cognito”를 검색하여 이동합니다.
- “사용자 풀 (User pools)”을 클릭합니다.
- 사용자 풀(일반적으로
alpaco-user-pool-production
또는 유사한 이름,cognito
모듈 출력 확인)을 선택합니다.
- 일반적인 작업:
- 사용자 보기: “사용자 (Users)” 탭으로 이동합니다. 사용자를 검색하고 필터링할 수 있습니다.
- 사용자 세부 정보 보기:
사용자 이름
(이메일이 아닌 Google의sub
)을 클릭합니다. 속성, 그룹 멤버십 등을 볼 수 있습니다. - 사용자 비활성화/활성화:
- 사용자를 찾습니다.
- 사용자를 선택합니다.
- “작업 (Actions)” -> “사용자 비활성화 (Disable user)” 또는 “사용자 활성화 (Enable user)”를 클릭합니다.
- 그룹 멤버십 관리:
- 사용자를 찾습니다.
- 사용자 이름을 클릭합니다.
- 사용자 세부 정보 페이지 내의 “그룹 (Groups)” 탭으로 이동합니다.
- “사용자를 그룹에 추가 (Add user to group)”를 클릭합니다. 그룹(예:
alpaco-Admins-production
)을 선택하고 추가합니다.alpaco-GeneralUsers-production
그룹은 일반적으로 Lambda 트리거를 통해 가입 시 자동으로 할당됩니다.
- 호스팅된 UI/도메인: Cognito 사용자 풀 도메인(예:
alpaco-auth-prod.auth.ap-northeast-2.amazoncognito.com
)이 구성되어 있습니다. 이는 애플리케이션이 Google 로그인 흐름을 시작하는 데 사용됩니다. - 자격 증명 공급자 (Identity Providers): “로그인 환경 (Sign-in experience)” -> “연동 자격 증명 공급자 로그인 (Federated identity provider sign-in)”에서 Google이 구성된 것을 볼 수 있습니다. 클라이언트 ID 및 시크릿은 Terraform을 통해 관리됩니다.
- 앱 클라이언트: “앱 통합 (App integration)” -> “앱 클라이언트 및 분석 (App clients and analytics)”에서 앱 클라이언트(예:
alpaco-app-client-production
)를 찾습니다. 콜백 URL, OAuth 범위 등을 보여줍니다.
4.4. 애플리케이션 접근 및 도메인 관리
이는 Route 53 (DNS), ACM (SSL/TLS 인증서), CloudFront (CDN)를 포함합니다. ALPACO의 기본 도메인은 alpaco.us
입니다.
4.4.1. DNS 관리 (Route 53)
- 호스팅 영역 접근:
- AWS 콘솔에서 “Route 53”을 검색하여 이동합니다.
- 왼쪽 탐색 창에서 “호스팅 영역 (Hosted zones)”을 클릭합니다.
alpaco.us
에 대한 호스팅 영역을 선택합니다.
- 주요 레코드:
- 프론트엔드 애플리케이션용 CloudFront 배포를 가리키는
alpaco.us
및www.alpaco.us
에 대한A
레코드. - ACM 인증서 유효성 검사용
CNAME
레코드 (일반적으로 Terraform에서 관리). auth.alpaco.us
하위 도메인도 ACM 인증서의 일부이며, 사용자 지정 도인이 Cognito 도메인에 매핑된 경우 사용될 수 있습니다 (현재 Cognito는 자체 AWS 도메인 사용).
- 프론트엔드 애플리케이션용 CloudFront 배포를 가리키는
- 운영자 작업: 일반적으로 DNS 레코드는 Terraform에서 관리합니다. 수동 변경은 드물지만 문제 해결이나 외부 서비스 도메인 확인에 필요할 수 있습니다.
4.4.2. SSL/TLS 인증서 관리 (ACM)
- 인증서 접근:
- AWS 콘솔에서 “Certificate Manager (ACM)”를 검색하여 이동합니다.
- 중요: CloudFront와 함께 사용되는 인증서의 경우, 다른 리소스가 배포된 위치와 관계없이 반드시 미국 동부 (버지니아 북부)
us-east-1
리전에 있어야 합니다. alpaco.us
(및www.alpaco.us
,auth.alpaco.us
)에 대한 인증서를 찾습니다.
- 주요 정보:
- 상태 (Status): “발급됨 (Issued)”이어야 합니다.
- 사용 중? (In use?): CloudFront 배포와 연결된 경우 “예 (Yes)”로 표시되어야 합니다.
- 갱신 (Renewal): ACM은 유효성 검사를 위해 생성된 CNAME 레코드가 Route 53에 남아 있는 한 DNS 유효성 검사 인증서의 자동 갱신을 처리합니다.
- 운영자 작업: 대부분 모니터링입니다. 갱신에 실패하면 종종 Route 53의 DNS 유효성 검사 레코드 문제 때문입니다.
4.4.3. 콘텐츠 전송 네트워크 (CloudFront)
CloudFront는 프론트엔드 애플리케이션을 제공하고 백엔드 Lambda 함수 URL(챗봇 및 문제 생성기용)에 대한 보안 액세스를 제공합니다.
- 배포 접근:
- AWS 콘솔에서 “CloudFront”를 검색하여 이동합니다.
- 여러 배포를 찾을 수 있습니다:
- 프론트엔드 앱:
alpaco-frontend-production-alpaco-frontend-bucket
의 배포와 유사한 이름 (ID 예:E3Q5IEHTZGF1U5
는app
모듈 출력 확인). 도메인은d2rgzjzynamwq2.cloudfront.net
과 유사하며alpaco.us
로 별칭 지정됩니다. - 챗봇 서비스: 해당 CloudFront 도메인은
chatbot
모듈 출력 확인. - 문제 생성기 서비스: 해당 CloudFront 도메인은
problem-generator-v3
모듈 출력 확인.
- 프론트엔드 앱:
- 주요 설정 확인 (프론트엔드 배포용):
- 원본 (Origins): 프론트엔드 자산용 S3 버킷 (OAC 구성됨).
- 동작 (Behaviors): 기본 동작은 S3 원본을 가리킵니다.
뷰어 프로토콜 정책 (Viewer Protocol Policy)
(redirect-to-HTTPS여야 함),허용된 HTTP 메서드 (Allowed HTTP Methods)
를 확인합니다. 뷰어 요청에 연결된url_rewrite_function
CloudFront 함수에 유의하십시오. - 사용자 지정 오류 응답 (Custom Error Responses): 403/404 오류에 대해
/index.html
을 200 상태로 반환하도록 구성되어 Next.js 클라이언트 측 라우팅을 지원합니다. - 보안 (Security) -> 원본 액세스 (Origin access): OAC 구성.
- 일반 (General) -> 별칭 (Aliases):
alpaco.us
,www.alpaco.us
. - 일반 (General) -> SSL 인증서 (SSL Certificate): 사용자 지정 SSL 인증서 (ACM
us-east-1
에서 발급).
- 캐시 무효화 (프론트엔드 업데이트 시 중요):
- S3를 통해 배포된 프론트엔드 업데이트(일반적으로 GitHub Actions에 의해)는 사용자가 변경 사항을 즉시 보려면 CloudFront 캐시 무효화가 필요합니다.
- 수동 무효화 방법:
- 프론트엔드 CloudFront 배포를 선택합니다.
- “무효화 (Invalidations)” 탭으로 이동합니다.
- “무효화 생성 (Create invalidation)”을 클릭합니다.
- 전체 사이트 업데이트의 경우 객체 경로로
/*
를 입력합니다. - “무효화 생성 (Create invalidation)”을 클릭합니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다.
- GitHub Actions 워크플로 (
.github/workflows/deploy.yml
)는 프론트엔드 배포 시 이를 자동으로 처리해야 합니다.
4.5. 프론트엔드 애플리케이션 호스팅 (S3)
Next.js 프론트엔드는 정적으로 내보내져 S3 버킷에 호스팅됩니다.
- S3 버킷 접근:
- AWS 콘솔에서 “S3”를 검색하여 이동합니다.
alpaco-frontend-production-alpaco-frontend-bucket
(또는 유사한 이름,app
모듈 출력)이라는 이름의 버킷을 찾습니다.
- 운영자를 위한 주요 사항:
- 직접 퍼블릭 액세스 차단됨: 버킷은
block_public_acls = true
등으로 구성됩니다. 콘텐츠는 Origin Access Control (OAC)을 사용하여 CloudFront를 통해서만 제공됩니다. - 콘텐츠:
frontend
디렉터리의npm run build
출력(HTML, CSS, JS, 이미지)을 포함합니다. - 관리: 콘텐츠 업데이트는 주로 CI/CD 파이프라인(GitHub Actions)에서 처리합니다. 긴급 수정 외에는 수동 업로드가 일반적으로 필요하지 않으며, 그 경우에도 CloudFront 무효화가 필요합니다.
- 직접 퍼블릭 액세스 차단됨: 버킷은
5. 일반적인 문제 해결
- 애플리케이션 로드 안 됨 / 오류 발생:
- CloudWatch 로그 확인: 관련 서비스의 Lambda 함수 로그부터 확인합니다 (예: 커뮤니티 페이지 실패 시
alpaco-getAllPosts-production
및alpaco-getPost-production
확인). 활성화된 경우 API Gateway 로그도 확인합니다. - 브라우저 개발자 콘솔: JavaScript 오류, 네트워크 요청 실패(4xx, 5xx 오류), CORS 문제를 찾습니다.
- AWS 서비스 상태 대시보드:
ap-northeast-2
리전에 진행 중인 AWS 장애가 있는지 확인합니다.
- CloudWatch 로그 확인: 관련 서비스의 Lambda 함수 로그부터 확인합니다 (예: 커뮤니티 페이지 실패 시
- 데이터가 올바르게 표시되지 않음:
- DynamoDB에서 확인: 관련 DynamoDB 테이블을 직접 확인하여 데이터가 존재하고 올바르게 포맷되었는지 확인합니다.
- Lambda 로그 확인: 해당 데이터를 가져오거나 쓰는 Lambda 함수에 오류가 있을 수 있습니다.
- 로그인 문제:
- Cognito 사용자 풀 확인: 사용자가 확인되었습니까? 올바른 그룹에 속해 있습니까?
- Cognito 앱 클라이언트 설정 확인: 콜백 URL, 활성화된 ID 공급자.
- 브라우저 개발자 콘솔: OAuth 흐름 또는 토큰 획득과 관련된 오류를 찾습니다.
- 도메인/SSL 문제 (
alpaco.us
):- Route 53:
alpaco.us
및www.alpaco.us
에 대한 DNS 레코드가 CloudFront 배포를 올바르게 가리키는지 확인합니다. - ACM (
us-east-1
리전): SSL 인증서가 “발급됨 (Issued)” 상태이고 만료되지 않았는지 확인합니다. 문제가 발생하면 DNS 유효성 검사 상태를 확인합니다. - CloudFront 배포: “배포됨 (Deployed)” 상태이고 별칭 및 ACM 인증서가 올바르게 구성되었는지 확인합니다.
- Route 53:
- 느린 성능:
- CloudWatch 지표: Lambda 실행 시간, API Gateway 지연 시간을 확인합니다.
- DynamoDB 용량/스로틀링: 프로비저닝된 용량을 사용하는 경우(ALPACO는 요청당 지불(PAY_PER_REQUEST)을 사용하므로 프로비저닝된 용량 문제는 덜 발생하지만, 요청이 많을 경우 여전히 스로틀링 확인). GSI 효율성을 확인합니다.
- CloudFront 캐싱: 정적 자산에 대해 캐싱이 적절하게 구성되었는지 확인합니다. 이 설정에서 Lambda의 동적 콘텐츠는 일반적으로 CloudFront에 의해 캐시되지 않습니다.
6. 운영자를 위한 보안 모범 사례
- 최소 권한: IAM 사용자가 운영 작업에 필요한 권한만 갖도록 합니다. 루트 계정 사용을 피합니다.
- MFA: IAM 사용자에 대해 다중 인증(Multi-Factor Authentication)을 활성화합니다.
- 자격 증명: AWS 자격 증명을 공유하지 마십시오. 보안 시스템 외부에서 접근 가능한 코드나 구성 파일에 자격 증명을 포함시키지 마십시오.
- 비밀 관리: 애플리케이션 비밀(예:
GOOGLE_AI_API_KEY
,GOOGLE_CLIENT_SECRET
)은 Terraform에서 관리합니다 (변수로 전달되며, GitHub Secrets 또는 더 고급 설정에서는 HashiCorp Vault에서 가져올 수 있음). 운영자는 배포 후 Terraform을 재구성하지 않는 한 일반적으로 이러한 비밀을 직접 처리할 필요가 없습니다. - IAM 권한 정기 검토: 누가 어떤 접근 권한을 가지고 있는지 주기적으로 검토합니다.
- CloudTrail 모니터링: AWS CloudTrail은 계정의 API 활동을 기록합니다. 의심스러운 활동이 있는지 검토합니다.
7. 연락처 및 지원
- 내부 개발팀(팀 우서용): 애플리케이션 관련 문제 문의.
- AWS 지원: AWS 서비스 장애 관련 문제 문의.
이 매뉴얼은 시작점을 제공합니다. 특정 운영 절차는 변경될 수 있습니다. 복잡한 문제의 경우 항상 최신 프로젝트 문서를 참조하고 개발팀과 상의하십시오.