Skip to content

Commit bcf0bc0

Browse files
authored
[CHORE]: 인프라 수정 및 CD 수정 (#130)
* chore: CD 수정 - 로그 파일이 저장되는 디렉토리(/tmp) 내부 파일이 인스턴스가 꺼지고 다시 켜지게 되면 날아가는 현상 수정 * chore: NPM 포트 외부 접근 차단 - 링크로 접속이 가능하므로 포트 노출 불필요 * chore: S3 관련 권한 조정 - S3관련 FullAccess 삭제 - BE 내부적으로 저장(Put), 삭제(Delete), 필요 시 불러오기(Get) 허용 - S3에서 EC2 관련 권한 명시 * chore: 서울 리전 적용하도록 수정
1 parent 2576f1d commit bcf0bc0

File tree

5 files changed

+72
-14
lines changed

5 files changed

+72
-14
lines changed

.github/workflows/Backend-CD.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ jobs:
228228
# ---------------------------------------------------------
229229
# 0) 실행 로그(라인 타임스탬프 부착)
230230
# ---------------------------------------------------------
231-
LOG="/tmp/ssm-$(date +%Y%m%d_%H%M%S).log"
231+
LOG="/var/log/relife/ssm-$(date +%Y%m%d_%H%M%S).log"
232232
exec > >(awk '{ fflush(); print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }' | tee -a "$LOG")
233233
exec 2> >(awk '{ fflush(); print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }' | tee -a "$LOG" >&2)
234234

infra/aws/terraform/cloudfront.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ resource "aws_cloudfront_distribution" "cloudfront_distribution" {
7474
# PriceClass_100: 미국, 캐나다, 유럽
7575
# PriceClass_200: PriceClass_100 + 아시아, 중동, 아프리카
7676
# PriceClass_All: 전세계
77-
price_class = "PriceClass_100"
77+
price_class = "PriceClass_200"
7878

7979
# CDN 도메인 설정
8080
aliases = [var.cdn_domain]

infra/aws/terraform/ec2.tf

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,45 @@ resource "aws_iam_role" "ec2_role_1" {
3232
####################
3333
# EC2 - Policy 설정
3434
####################
35-
# EC2 역할에 AmazonS3FullAccess 정책을 부착
36-
# 생성된 인스턴스는 S3에 대한 완전한 액세스 권한을 가짐.
37-
resource "aws_iam_role_policy_attachment" "s3_full_access" {
35+
resource "aws_iam_policy" "ec2_s3_access_policy" {
36+
name = "${var.prefix}-ec2-s3-access-policy"
37+
description = "EC2 instance S3 access policy"
38+
39+
policy = jsonencode({
40+
Version = "2012-10-17",
41+
Statement = [
42+
{
43+
Sid = "ListSpecificBucket",
44+
Effect = "Allow",
45+
Action = [
46+
"s3:ListBucket",
47+
"s3:GetBucketLocation"
48+
],
49+
Resource = aws_s3_bucket.s3_1.arn
50+
},
51+
{
52+
Sid = "AccessableBucketObjectsPermissions",
53+
Effect = "Allow",
54+
Action = [
55+
"s3:GetObject",
56+
"s3:DeleteObject",
57+
"s3:PutObject"
58+
],
59+
Resource = "${aws_s3_bucket.s3_1.arn}/*"
60+
}
61+
]
62+
})
63+
64+
tags = merge(local.common_tags, {
65+
Name = "${var.prefix}-ec2-s3-access-policy"
66+
})
67+
}
68+
69+
# EC2 역할에 커스텀 정책을 부착
70+
# 생성된 인스턴스는 특정 S3에 대한 읽기/쓰기/삭제 권한을 가짐.
71+
resource "aws_iam_role_policy_attachment" "s3_access" {
3872
role = aws_iam_role.ec2_role_1.name
39-
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
73+
policy_arn = aws_iam_policy.ec2_s3_access_policy.arn
4074
}
4175

4276
# EC2 역할에 AmazonEC2RoleforSSM 정책을 부착
@@ -113,7 +147,6 @@ resource "aws_instance" "ec2_1" {
113147
volume_type = "gp2"
114148
volume_size = 30 # 볼륨 크기를 30GB로 설정
115149
encrypted = true
116-
delete_on_termination = false
117150
}
118151

119152
user_data = local.ec2_user_data

infra/aws/terraform/s3.tf

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,52 @@ resource "aws_s3_bucket_ownership_controls" "s3_1_ownership" {
3838
# CloudFront OAI가 S3 버킷에 접근할 수 있도록 허용
3939
# EC2 인스턴스가 파일 업로드/관리 가능
4040
# AWS 계정 소유자 및 Admin 사용자 접근 허용
41-
# Presigned URL을 통한 접근 차단
41+
# 일반 사용자의 직접적인 접근 차단
4242
resource "aws_s3_bucket_policy" "s3_1_policy" {
4343
bucket = aws_s3_bucket.s3_1.id
4444
policy = jsonencode({
45-
Version = "2012-10-17",
45+
Version = "2012-10-17",
4646
Statement = [
4747
# 1. CloudFront OAI: S3 객체 읽기 (CDN 콘텐츠 제공)
4848
{
49-
Sid = "AllowCloudFrontOAIReadOnly",
50-
Effect = "Allow",
49+
Sid = "AllowCloudFrontOAIReadOnly",
50+
Effect = "Allow",
5151
Principal = {
5252
AWS = aws_cloudfront_origin_access_identity.oai_1.iam_arn
5353
},
54-
Action = [
54+
Action = [
5555
"s3:GetObject",
5656
"s3:ListBucket"
5757
],
58-
Resource = [
58+
Resource = [
5959
aws_s3_bucket.s3_1.arn,
6060
"${aws_s3_bucket.s3_1.arn}/*"
6161
]
62+
},
63+
{
64+
Sid = "AllowEC2Access",
65+
Effect = "Allow",
66+
Principal = {
67+
AWS = aws_iam_role.ec2_role_1.arn
68+
},
69+
Action = [
70+
"s3:ListBucket",
71+
"s3:GetBucketLocation"
72+
],
73+
Resource = aws_s3_bucket.s3_1.arn
74+
},
75+
{
76+
Sid = "AllowEC2ObjectAccess",
77+
Effect = "Allow",
78+
Principal = {
79+
AWS = aws_iam_role.ec2_role_1.arn
80+
},
81+
Action = [
82+
"s3:GetObject",
83+
"s3:DeleteObject",
84+
"s3:PutObject"
85+
],
86+
Resource = "${aws_s3_bucket.s3_1.arn}/*"
6287
}
6388
]
6489
})

infra/aws/terraform/variables.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ variable "expose_rds_port" {
122122
variable "expose_npm_config" {
123123
description = "Nginx Proxy Manager 설정 페이지 외부 노출 여부"
124124
type = bool
125-
default = true
125+
default = false
126126
}
127127

128128
variable "expose_redis_port" {

0 commit comments

Comments
 (0)