티스토리 뷰

반응형

이번에는 다소 간단한 구성이다. 물론 결합한 것도 조만간 할듯..?

 

시나리오

1) 사용자는 CloudFront에서 제공하는 Domain Name을 통해 Request를 보낸다.

    예를 들면, http://cloudfront.example.com/test.mp4와 같은 Request! 

2) CloudFront는 Behavior 목록에서 /test.mp4에 일치하는 Path Pattern을 찾는다.

3) 찾은 항목의 Origin에 설정된 Origin Domain Name & Path 로 전달한다.

 

사용자는 S3 Bucket에 직접 접근할 수 없고, CloudFront를 통해서만 접근할 수 있다. 이때 CloudFront에 보호 계층을 추가해 전체적인 인프라 구성에 보안성을 향상시킬 수 있다.

 

자세한 내용은 CloudFront 포스팅을 참고하자.

ch4njun.tistory.com/207

 

[AWS] CloudFront에 대한 기본적인 정리

AWS 사용설명서에 나와있는 CloudFront에 대한 설명을 살펴보면, 라고 합니다. 즉, CloudFront는 웹 애플리케이션 개발자가 콘텐츠를 배포할 수 있는 방법을 제공한다는 것이다. 여기에 비용 절감과 속

ch4njun.tistory.com

 

 

 


s3.tf

# original이라는 이름의 S3 Bucket을 생성
resource "aws_s3_bucket" "original" {
    bucket = "chanjun-project-original"
    acl = "private"

    versioning {
        enabled = true
    }
    cors_rule {
        allowed_headers = [ "*" ]
        allowed_methods = [ "GET" ]
        allowed_origins = [ "*" ]
        max_age_seconds = 3000
    }
    website {
        index_document = "index.html"
    }
}

# original Bucket의 정책을 설정
# 해보니 Public Access가 가능하다는 경고가 표시되는데.. 외부에서 직접 접근도 가능하고..
# 이 부분을 해결할 방법을 찾아야겠다.
resource "aws_s3_bucket_policy" "b" {
    bucket = aws_s3_bucket.original.id
    policy = <<-EOF
{
            "Version": "2012-10-17",
            "Statement": [
                {
                # 한마디로 누구나 original Bucket안에 저장된 모든 파일을 Get할수 있다는 것!!
                    "Sid": "AddPerm",
                    "Effect": "Allow",
                    "Principal": "*",
                    "Action": "s3:GetObject",
                    "Resource": [
                    "arn:aws:s3:::${aws_s3_bucket.original.id}/*"
                    ]
                }
            ]
        }
    EOF 
}

# 테스트용 파일 업로드 (source는 Terraform 폴더 같은 경로에 존재해야한다.)
resource "aws_s3_bucket_object" "test" {
    bucket = aws_s3_bucket.original.id
    key = "test.mp4"
    source = "test.mp4"
}

 

cloudfront.tf

# CloudFront Distribution을 생성
resource "aws_cloudfront_distribution" "myCloudFront" {
	# 이게 아마 Default Origin을 생성하는 과정인걸로...?
    origin {
        domain_name = aws_s3_bucket.original.bucket_domain_name
        origin_id = "chanjun-project"
        
        # 이건 도통 뭔지 모르겠음...ㅠ 일단 임의로 넣어주긴함(잘됨)
        s3_origin_config {
            origin_access_identity = aws_cloudfront_origin_access_identity.chanjun-origin-access.cloudfront_access_identity_path
        }
    }

    enabled = true
	
    default_cache_behavior {
        allowed_methods = [ "GET", "HEAD" ]
        cached_methods = [ "GET", "HEAD" ]
        target_origin_id = "chanjun-project"
        viewer_protocol_policy = "allow-all"
        forwarded_values {
            query_string = false
            headers = [ "Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method" ]
            cookies {
                forward = "none"
            }
        }
    }

    restrictions {
        geo_restriction {
            restriction_type = "none"
        }
    }
    viewer_certificate {
        cloudfront_default_certificate = true
    }
    retain_on_delete = true
}

data "aws_iam_policy_document" "s3_policy" {
    statement {
        actions = [ "s3:GetObject" ]
        resources = [ "${aws_s3_bucket.original.arn}/*" ]
        effect = "Allow"
        principals {
            identifiers = [ "*" ]
            type = "*"
        }
    }
    statement {
        actions = [ "s3:GetObject" ]
        resources = [ "${aws_s3_bucket.original.arn}/*" ]
        principals {
            identifiers = [ aws_cloudfront_origin_access_identity.chanjun-origin-access.iam_arn ]
            type = "AWS"
        }
    }
}

# 이것도 왜만든거지ㅋㅋㅋㅋ 기억상실증..
resource "aws_s3_bucket_policy" "example" {
    bucket = aws_s3_bucket.original.id
    policy = data.aws_iam_policy_document.s3_policy.json
}

# 임의로 생성.. 뭔지 모르겠다
resource "aws_cloudfront_origin_access_identity" "chanjun-origin-access" {
    comment = "chanjun-project"
}
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함