본문 바로가기
IaC/Terraform

[Terraform] 4-2. 다중 리전에서 동작하는 S3 버킷 구성하기

by okms1017 2024. 7. 7.
728x90

✍ Posted by Immersive Builder  Seong

 

 

1. 실습 소개

이번 실습에서는 다중 리전(Multi-Region)에서 동작하는 S3 버킷을 구성합니다. 

 

 

  • 단일 프로바이더의 다중 정의 
  • 다중 리전 액세스 포인트 정의 

 


2. 다중 리전에서 동작하는 S3 버킷 구성하기 

단일 프로바이더의 다중 정의 

서울 리전(ap-northeast-2)과 싱가포르 리전(ap-southeast-1) 2개의 리전에서 동작하는 S3 버킷을 구성할 예정입니다. 

S3 버킷은 동일한 AWS 프로바이더를 사용하지만 대상 리전이 다르므로 프로바이더 선언에서 alias를 명시하고 리소스와 데이터 소스에서는 provider 메타인수를 사용해 대상 리전을 지정할 수 있습니다. 

 

  • 프로바이더 선언 (alias)

먼저 다음과 같이 각 리전에 해당하는 프로바이더를 선언합니다. 

 


        provider "aws" {
        region = "ap-northeast-2"
        alias  = "primary_region"
        }

        provider "aws" {
        region = "ap-southeast-1"
        alias  = "secondary_region"
        }
 

 

AWS 프로바이더 내에 alias를 명시하여 대상 리전을 구분합니다. 

primary_region서울 리전(ap-northeast-2)을 가리키고, secondary_region싱가포르 리전(ap-southeast-1)을 가리킵니다. 이후 리소스에서는 aws.primary_region, aws.secondary_region 형식으로 참조하게 됩니다. 

 

 

  • 리소스 선언 (provider 메타인수)

S3 버킷을 생성하는 리소스를 선언합니다. 

 


        resource "aws_s3_bucket" "seoul_bucket" {
        provider = aws.primary_region

        bucket = "seoul-region-primary-bucket"
        }

        resource "aws_s3_bucket" "singapore_bucket" {
        provider = aws.secondary_region

        bucket = "singapore-region-secondary-bucket"
        }
 

 

S3 버킷 리소스 블록 내에 provider 메타인수를 사용하여 대상 리전을 다르게 구성합니다. 

seoul_bucket 리소스는 aws.primary_region 프로바이더를 참조하여 서울 리전(ap-northeast-2)에 seoul-region-primary-bucket 명의 버킷을 생성합니다. 

singapore_bucket 리소스는 aws.secondary_region 프로바이더를 참조하여 싱가포르 리전(ap-southeast-1)에 singapore-region-secondary-bucket 명의 버킷을 생성합니다. 

 

단, 주의할 점은 생성하는 버킷명은 모든 리전에서 고유하여야 합니다. 

 

 

  • S3 버킷 생성 확인 (Console)

$ aws s3 ls | grep region
2024-07-07 02:50:54 seoul-region-primary-bucket
2024-07-07 02:50:55 singapore-region-secondary-bucket

 

다중 리전 S3 버킷 생성 확인

 

다중 리전 액세스 포인트 정의 

다중 리전 액세스 포인트(Multi-Region Access Point)는 여러 리전에서 발생하는 클라이언트 또는 어플리케이션의 S3 버킷 요청을 처리하기 위한 글로벌 엔드포인트를 제공합니다. 글로벌 엔드포인트는 S3 버킷 요청을 AWS 글로벌 네트워크를 통해 액티브(Active) 상태의 가장 가까운 S3 버킷으로 자동으로 라우팅합니다. 

 

  • 다중 리전 액세스 포인트 선언

Active-Active 상태의 서울 리전(ap-northeast-2)과 싱가포르 리전(ap-southeast-1)의 버킷을 집합하여 다중 리전 액세스 포인트를 구성합니다.

 


        resource "aws_s3control_multi_region_access_point" "multi_region_ap" {
        details {
            name = "multi-region-ap"

            region {
            bucket = aws_s3_bucket.seoul_bucket.id
            }

            region {
            bucket = aws_s3_bucket.singapore_bucket.id
            }

            public_access_block {
            block_public_acls = false
            ignore_public_acls = false
            block_public_policy = false
            restrict_public_buckets = false
            }
        }
        }
 

 

다중 리전 액세스 포인트는 multi-region-ap 이름으로 생성되며, 각 리전의 버킷 ID를 참조하여 seoul-region-primary-bucket과 singapore-region-secondary-bucket을 구성요소로 지정합니다.

 

다중 리전 액세스 포인트 구성 시 주의할 점은 각 리전에서 정확히 하나의 버킷과 연결되어야 하는 점입니다. 

 

또한 기본적으로 퍼블릭 액세스 차단 설정이 되므로 인터넷을 통한 외부 접근을 원한다면 설정을 비활성화할 수 있습니다. 

위와 같이 public_access_block 블록을 추가하고 block_public_acls, ignore_public_acls, block_public_policy, restrict_public_buckets 값을 false로 설정하면 됩니다. 

 

  • block_public_acls : 새 ACL을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
  • ignore_public_acls : 임의의 ACL을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
  • block_public_policy : 새 퍼블릭 버킷 또는 다중 리전 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
  • restrict_public_buckets : 임의의 퍼블릭 버킷 또는 다중 리전 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 및 교차 계정 액세스 차단

참고로 다중 리전 액세스 포인트를 생성한 후에는 퍼블릭 액세스 차단 설정을 변경할 수 없습니다. 

 

 

  • 다중 리전 액세스 포인트 구성 확인 

다중 리전 액세스 포인트 구성 확인 1
다중 리전 액세스 포인트 구성 확인 2
다중 리전 액세스 포인트 - 퍼블릭 액세스 차단 설정 (비활성)

 

🤔  조금 더 고민해보기 

서울 리전의 버킷과 싱가포르 리전의 버킷 간에 S3 Replication을 테라폼으로 구현할 수는 없을까 ?

 


▶ 소스코드: 개인 GitHub

 


[출처]

1) https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3control_multi_region_access_point

 

Terraform Registry

 

registry.terraform.io

2) https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_public_access_block

 

Terraform Registry

 

registry.terraform.io

3) https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/MultiRegionAccessPoints.html

 

Amazon S3의 다중 리전 액세스 포인트 - Amazon Simple Storage Service

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

728x90