2323## Infrastructure Diagrams
2424
2525<details >
26- <summary >🔧 개발 환경 구성도 (Development Mode) </summary >
26+ <summary > 환경 구성도 </summary >
2727
2828> ** 주의** : 개발 목적으로 RDS 포트(5432)와 NPM 관리 포트(81)가 외부에 노출되어 있습니다.
2929
@@ -129,131 +129,16 @@ graph TB
129129- RDS 외부 접근
130130 - ` publicly_accessible = true `
131131
132- </details >
133-
134- <details >
135- <summary >🔒 프로덕션 환경 구성도 (Production Mode)</summary >
136-
137- > ** 보안** : 프로덕션 환경에서는 RDS와 NPM 관리 포트가 내부에서만 접근 가능합니다.
138-
139- ** 프로덕션 권장 설정값:**
140- - PORT
141- - ` expose_rds_port = false ` 🔒
142- - ` expose_npm_config = false ` 🔒
143- - RDS 외부 접근
144- - ` publicly_accessible = false `
145-
146- ** 접근 방법:**
147- - RDS: EC2를 통한 터널링 또는 VPN
148- - NPM 관리: EC2 SSH 터널링
149-
150- ``` mermaid
151- graph TB
152- %% External
153- Internet([Internet])
154- User([사용자])
155-
156- %% AWS Cloud boundary
157- subgraph AWS["AWS Cloud"]
158- %% VPC
159- subgraph VPC["VPC (10.0.0.0/16)"]
160- IGW[Internet Gateway]
161- RT[Route Table]
162-
163- %% Subnets in different AZs
164- subgraph AZ1["AZ-a (EC2, RDS 배치)"]
165- Subnet1["Public Subnet 1<br/>(10.0.0.0/24)"]
166- EC2["EC2 Instance<br/>(t3.micro)<br/>Amazon Linux 2023<br/>Docker, Redis, NPM"]
167- RDS["🔒 PostgreSQL RDS<br/>db.t3.micro Single-AZ<br/>PRIVATE ACCESS<br/>AZ-a 배치"]
168- end
169-
170- subgraph AZ2["AZ-b"]
171- Subnet2["Public Subnet 2<br/>(10.0.1.0/24)"]
172- end
173-
174- subgraph AZ3["AZ-c"]
175- Subnet3["Public Subnet 3<br/>(10.0.2.0/24)"]
176- end
177-
178- subgraph AZ4["AZ-d"]
179- Subnet4["Public Subnet 4<br/>(10.0.3.0/24)"]
180- end
181-
182- %% Security Groups
183- SG_MAIN["Main Security Group (sg_1)<br/>HTTP-80, HTTPS-443 항상 허용<br/>🔒 RDS-5432, NPM-81 차단<br/>EC2와 RDS 모두 적용"]
184- SG_EC2_RDS[EC2-RDS 전용 Security Groups<br/>EC2 ↔ RDS 내부 통신<br/>Port 5432]
185-
186- %% RDS Subnet Group
187- RDS_SG[RDS Subnet Group<br/>Subnet1 + Subnet2]
188-
189- %% IAM Role
190- IAM_ROLE[IAM Role<br/>S3FullAccess<br/>SSM Access]
191- end
192-
193- %% S3 and CloudFront
194- S3[S3 Bucket<br/>Static Files]
195- CF[CloudFront<br/>CDN Distribution]
196- OAI[Origin Access Identity]
197-
198- %% EIP
199- EIP[Elastic IP]
200- end
201-
202- %% Connections
203- User --> Internet
204- Internet --> CF
205- Internet --> IGW
206- IGW --> RT
207- RT --> Subnet1
208- RT --> Subnet2
209- RT --> Subnet3
210- RT --> Subnet4
211-
212- EC2 --> EIP
213- EIP --> Internet
214-
215- EC2 --> SG_MAIN
216- EC2 --> SG_EC2_RDS
217- RDS --> SG_MAIN
218- RDS --> SG_EC2_RDS
219- RDS --> RDS_SG
220-
221- CF --> OAI
222- OAI --> S3
223-
224- EC2 -.->|IAM Role| IAM_ROLE
225- IAM_ROLE -.->|Access| S3
226- EC2 -.->|Internal Connect| RDS
227-
228- %% Styling
229- classDef aws fill:#ff9900,stroke:#232f3e,stroke-width:2px,color:#fff
230- classDef compute fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
231- classDef storage fill:#4ecdc4,stroke:#2b8a3e,stroke-width:2px,color:#fff
232- classDef network fill:#74c0fc,stroke:#1864ab,stroke-width:2px,color:#fff
233- classDef database fill:#51cf66,stroke:#2b8a3e,stroke-width:2px,color:#fff
234- classDef secure fill:#51cf66,stroke:#2b8a3e,stroke-width:3px,color:#fff
235-
236- class AWS aws
237- class EC2,EIP,IAM_ROLE compute
238- class S3,CF storage
239- class VPC,IGW,RT,Subnet1,Subnet2,Subnet3,Subnet4,SG_MAIN,SG_EC2_RDS network
240- class RDS,RDS_SG secure
241- ```
242-
243132** 프로덕션 권장 설정값:**
244133- ` expose_rds_port = false ` 🔒
245134- ` expose_npm_config = false ` 🔒
246135- ` publicly_accessible = false ` (RDS)
247136
248- ** 접근 방법:**
249- - RDS: EC2를 통한 터널링 또는 VPN
250- - NPM 관리: EC2 SSH 터널링
251-
252137</details >
253138
254139## Variables Configuration
255140
256- ### terraform.tfvars 설정 가이드
141+ ### - terraform.tfvars 설정 가이드
257142
258143` terraform.tfvars.default ` 파일을 복사하여 ` terraform.tfvars ` 파일을 생성한 후, 아래 변수들을 설정하세요.
259144
@@ -269,17 +154,22 @@ graph TB
269154| ` db_username ` | 데이터베이스 사용자명 | ` "db_user" ` |
270155| ` nginx_admin_email ` | Nginx Proxy Manager 관리자 이메일
| ` "[email protected] " ` | 271156
272- #### 보안 토글 변수
273- | 변수명 | 기본값 | 설명 |
274- | --------| --------| ------|
275- | ` expose_rds_port ` | ` true ` | 🔓 개발용 / ` false ` 🔒 프로덕션용 |
276- | ` expose_npm_config ` | ` true ` | 🔓 개발용 / ` false ` 🔒 프로덕션용 |
277-
278157> ⚠️ ** 보안 주의사항**
279158> * 해당 파일은 민감한 정보를 포함합니다
280159> * 절대 Git 저장소에 커밋하지 마세요
281160> * 외부로 유출되지 않도록 주의하세요
282161
162+ ### - variables.tf 설정 가이드
163+ #### 보안 토글 변수
164+ | 변수명 | 기본값 | 설명 |
165+ | ----------------------| ---------| --------------------------|
166+ | ` expose_rds_port ` | ` true ` | RDS 포트를 외부에 개방합니다. |
167+ | ` expose_npm_config ` | ` true ` | NPM 포트를 외부에 개방합니다. |
168+ | ` bucket_key_enabled ` | ` false ` | false 시 기본 암호화가 적용됩니다. |
169+ | ` is_s3_private ` | ` true ` | 외부와 S3 간 상호작용 여부를 결정합니다. |
170+ | ` enable_s3_acl ` | ` false ` | S3 버킷 ACL 활성화 여부를 결정합니다. |
171+
172+
283173## Usage
284174#### 1. AWS 자격 증명 설정
285175 * AWS CLI를 통해 자격 증명을 설정합니다.
@@ -353,6 +243,9 @@ terraform apply -target=aws_instance.main
353243 * IAMFullAccess
354244 * VPCFullAccess
355245
246+ or
247+ * AdministratorAccess
248+
356249</details >
357250
358251<details >
0 commit comments