반응형

개요

  • Terraform을 잘 사용하고 있는가?
  • 수정된 IaC 구성 방안
  • 보안을 강화하기 위한 방안
  • + Github Action (OIDC)
  • 정리

Terraform 을 잘 사용하고 있는가?

현재 우리회사에서 사용하고 있는 테라폼 구성은 아래와 같다.

ASIS

2024년 8~9월 부터 Terraform을 적용을 시작하면서,

기존 Git Repository + S3 를 시작으로 Terraform Cloud를 사용하기 시작하였다.

Terraform Cloud를 사용하면서, 정말 좋은기능도 많고 추후 여러부분에서 활용할만하다고 생각했지만...

몇몇 아쉬운 부분이 발생하였다.

 

리소스 증감에 따른 비용추가

Terraform Cloud는 총 4가지 plan이 제공된다.

주로 FreePlan으로도 많은 것을 할 수 있으나, Resource 500 부터는 Standard Plan을 사용해야 했다.

일단... 나는 IaC를 최소비용으로 구성하고 싶은 마음이 있었다. Resource 는 아래 사유로 계속 증가하였다.

  • 기존 리소스 IaC 구성 (Terraforming)
  • 새로운 서비스 증가

위 2개 업무를 틈날때 마다하니... 이건 뭐 달마다 300~400$ 넘어갔다.

물론 테라폼을 비용을 지불하면서 까지 잘 사용한다면 좋지만... 내 생각에는 효율대비 비싼 것 같다.

 

IaC Provisioning 속도

 

이 부분은 솔직히 조금 불편하였다.

terraform plan 을 진행하면, 기존 S3를 State 로 사용하는것보다 2~3배 느렸다.

뭐 당연한 부분이라고 생각하지만 ( Terraform -> Terraform Cloud -> Computing -> Plan ... )

뭔가 빠르게 IaC 를 구성하는 관점에서는 조금 답답한 부분인것 같다.

 

의외로 너무 복잡

Terraform Cloud는 제공하는 기능이 정말 많다.

Drift, RBAC, 팀 / 조직별 권한 제어, Infra Catalog 등등 너무 많다.

하지만 현재 우리조직의 단계는 위 항목들을 적용하는 것 보단, 빠르게 인프라를 구성하고 리뷰하고 적용하는 부분이다.

굳이 저 기능까지는 필요가 없다고 생각했다.

 


효과적인 IaC 구성방안

그래서 우리는 Terraform Cloud를 대체할만한 제품을 찾기 시작하였다.

Attlantis 도입

Attlantis 가 정답이라고 할 순 없지만, 현재 상황에서는 Terraform Cloud 보다는 더 낫다고 생각하였다.

 

그렇게 생각한 이유...

  1. 비용 절감 포인트
  2. GitOps 관점에서 더 쉬움

비용 절감 포인트

이건 뭐... 그냥 무료니까 (공짜가 좋음)

그리고 ECS Fargate Terraform module도 제공하니...

 

GitOps 관점에서 더 좋음

Terraform Cloud와 Attlantis 모두 여러 VCS와 통합이 가능하나, 동작 구성의 차이가 존재한다.

Terraform Cloud의 경우, 코드변경을 Push (Branch, Tag) 에 의해 동작이 결정된다 (Plan -> Apply)

Atlantis의 경우, PR (Pull Request) 기반의 작업 흐름을 만든다. PR을 기준으로 Plan을 실행하고 결과를 PR 댓글로 남긴다.

그 과정에서 변경사항이 Git 에 기록되면서 관리가 된다.

 

물론 TC (Terraform Cloud) 가 더 좋을 수는 있지만, 우리 팀에서는 Atlantis 형태가 더 조직에 성향에 맞다고 생각하였다.

 


 보안을 강화하기 위한 방안

Terraform을 사용하다보면, 아래 처럼 Provider를 구성하기 마련이다.

### use Credentials 
provider "aws" {
  access_key = ....
  secret_key = ....
  region = "ap-northeast-2"
}

### use Profile
provider "aws" {
  profile = ...
  region = "ap-northeast-2"
}

 

근데 위 방법은 어째선지... 좀 위험할 수도 있다고 생각스...

좀더 효과적인 방안이 없을까...

 

IAM Role을 사용한 접근 방법

 

IAM Role을 사용해서 대신 Provider를 구성할 수 있다.

구성된 IAM Role은 AssumeRole 을 활용하여 관련계정에 접근하고 (Trust Relation Ship), 

해당 계정은 PassRole을 사용하여 필요한 권한을 부여한다

 

관련 Git Repository 참조


 + Github Action (OIDC)

관련 Git Repository 참조

 

 

정리

위 구성을 Draw.io로 그려보면... (그리는거 쉽지 않네...)

 

반응형

+ Recent posts