기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
백엔드 베스트 프랙티스
적절한 원격 백엔드를 사용하여 상태 파일을 저장하는 것은 협업을 가능하게 하고, 잠금을 통한 상태 파일 무결성을 보장하고, 안정적인 백업 및 복구를 제공하고, CI/CD 워크플로우와 통합하고, HCP Terraform과 같은 관리형 서비스에서 제공하는 고급 보안, 거버넌스 및 관리 기능을 활용하는 데 매우 중요합니다.
Terraform은 쿠버네티스, 영사, HTTP와 같은 다양한 백엔드 유형을 지원합니다. HashiCorp 하지만 이 가이드에서는 대부분의 AWS 사용자를 위한 최적의 백엔드 솔루션인 Amazon S3에 초점을 맞춥니다.
높은 내구성과 가용성을 제공하는 완전 관리형 객체 스토리지 서비스인 Amazon S3는 Terraform 상태를 관리하기 위한 안전하고 확장 가능하며 저렴한 백엔드를 제공합니다. AWS Amazon S3의 글로벌 입지와 복원력은 대부분의 팀이 상태 스토리지를 자체 관리함으로써 달성할 수 있는 수준을 능가합니다. 또한 AWS 액세스 제어, 암호화 옵션, 버전 관리 기능 및 기타 서비스와 기본적으로 통합되므로 Amazon S3는 편리한 백엔드 선택이 될 수 있습니다.
주요 대상 고객이 고객이기 때문에 이 안내서에서는 Kubernetes 또는 Consul과 같은 다른 솔루션에 대한 백엔드 지침을 제공하지 않습니다. AWS 완전히 소속된 팀의 경우 Amazon S3는 일반적으로 Kubernetes 또는 HashiCorp Consul 클러스터보다 이상적인 선택입니다. AWS 클라우드 Amazon S3 상태 스토리지의 단순성, 탄력성 및 긴밀한 AWS 통합은 AWS 모범 사례를 따르는 대부분의 사용자에게 최적의 기반을 제공합니다. 팀은 AWS 서비스의 내구성, 백업 보호 및 가용성을 활용하여 원격 Terraform 상태를 매우 탄력적으로 유지할 수 있습니다.
이 섹션의 백엔드 권장 사항을 따르면 오류나 무단 수정으로 인한 영향을 제한하면서 보다 협력적인 Terraform 코드 기반을 구축할 수 있습니다. 잘 설계된 원격 백엔드를 구현함으로써 팀은 Terraform 워크플로를 최적화할 수 있습니다.
Amazon S3를 원격 스토리지로 사용
Terraform 상태를 Amazon S3에 원격으로 저장하고 Amazon DynamoDB를 사용하여 상태 잠금
임시 로컬 스토리지 또는 자체 관리형 솔루션 대신 S3 표준 스토리지 클래스 (기본값) 와 함께 Amazon S3를 사용하면 99.999999999% 의 내구성과 99.99% 가용성 보호가 제공되어 우발적인 상태 데이터 손실을 방지할 수 있습니다. AWS Amazon S3 및 DynamoDB와 같은 관리형 서비스는 대부분의 조직이 스토리지를 자체 관리할 때 달성할 수 있는 수준을 초과하는 서비스 수준 계약 (SLA) 을 제공합니다. 이러한 보호 기능을 활용하여 원격 백엔드에 계속 액세스할 수 있습니다.
원격 상태 잠금을 활성화합니다.
DynamoDB 잠금은 상태 액세스를 제한하여 동시 쓰기 작업을 방지합니다. 이렇게 하면 여러 사용자가 동시에 수정하는 것을 방지하고 오류를 줄일 수 있습니다.
상태 잠금을 사용하는 백엔드 구성 예시:
terraform { backend "s3" { bucket = "myorg-terraform-states" key = "myapp/production/tfstate" region = "us-east-1" dynamodb_table = "TerraformStateLocking" } }
버전 관리 및 자동 백업 활성화
추가 보호를 위해 AWS Backup Amazon S3 백엔드에서 를 사용하여 자동 버전 관리 및 백업을 활성화하십시오. 버전 관리는 변경이 있을 때마다 모든 이전 버전의 상태를 보존합니다. 또한 필요한 경우 이전 작동 상태 스냅샷을 복원하여 원치 않는 변경 사항을 롤백하거나 사고 시 복구할 수 있습니다.
필요한 경우 이전 버전을 복원할 수 있습니다.
버전이 지정된 Amazon S3 상태 버킷을 사용하면 이전에 알려진 정상 상태 스냅샷을 복원하여 변경 내용을 쉽게 되돌릴 수 있습니다. 이는 우발적인 변경을 방지하는 데 도움이 되며 추가 백업 기능을 제공합니다.
HCP 테라폼을 사용하세요.
HCP Terraform은 자체 상태 저장소를 구성하는
HCP Terraform을 사용하면 기본적으로 상태가 원격으로 저장되므로 조직 전체에서 상태를 공유하고 잠글 수 있습니다. 세부 정책 제어를 통해 상태 액세스 및 변경을 제한할 수 있습니다.
추가 기능으로는 버전 제어 통합, 정책 가드레일, 워크플로 자동화, 변수 관리, SAML과의 Single Sign-On 통합 등이 있습니다. Sentinel 정책을 코드로 사용하여 거버넌스 제어를 구현할 수도 있습니다.
HCP Terraform은 SaaS (Software as a Service) 플랫폼을 사용해야 하지만 많은 팀에서 보안, 액세스 제어, 자동화된 정책 검사 및 협업 기능과 관련된 이점을 활용하면 Amazon S3 또는 DynamoDB를 사용한 자체 관리 상태 스토리지보다 HCP Terraform이 최적의 선택입니다.
팀 워크플로우 개선을 위해 클라우드 GitHub 및 SaaS 도구를 완전히 채택한 사용자에게는 사소한 구성과 같은 GitLab 서비스와의 손쉬운 통합도 매력적입니다.
팀 협업을 촉진하세요
원격 백엔드를 사용하여 Terraform 팀의 모든 구성원과 상태 데이터를 공유하세요. 이렇게 하면 팀 전체가 인프라 변경에 대한 가시성을 확보할 수 있으므로 협업이 용이해집니다. 공유 백엔드 프로토콜은 상태 기록 투명성과 결합되어 내부 변경 관리를 단순화합니다. 모든 인프라 변경은 확립된 파이프라인을 통해 진행되므로 기업 전체의 비즈니스 민첩성이 향상됩니다.
다음을 사용하여 책임감을 개선하십시오. AWS CloudTrail
Amazon S3 AWS CloudTrail 버킷과 통합하여 상태 버킷에 대한 API 호출을 캡처합니다. PutObject
추적할 CloudTrail 이벤트 DeleteObject,
및 기타 관련 호출을 필터링합니다.
CloudTrail 로그에는 상태 변경을 위해 각 API를 호출한 보안 주체의 AWS ID가 표시됩니다. 사용자 ID는 컴퓨터 계정이나 백엔드 스토리지와 상호 작용하는 팀원과 일치시킬 수 있습니다.
CloudTrail 로그를 Amazon S3 상태 버전 관리와 결합하여 인프라 변경 사항을 적용한 보안 주체와 연결합니다. 여러 수정 버전을 분석하여 모든 업데이트의 출처를 시스템 계정 또는 담당 팀원의 몫으로 지정할 수 있습니다.
의도하지 않은 변경이나 시스템 중단이 발생하는 경우 상태 버전 관리를 통해 롤백 기능을 사용할 수 있습니다. CloudTrail 사용자의 변경 사항을 추적하므로 예방 차원의 개선 사항을 논의할 수 있습니다.
또한 IAM 권한을 적용하여 상태 버킷 액세스를 제한하는 것이 좋습니다. 전반적으로 S3 버전 관리 및 CloudTrail 모니터링은 인프라 변경 전반에 대한 감사를 지원합니다. 팀은 Terraform 상태 기록에 대한 책임, 투명성 및 감사 기능을 향상할 수 있습니다.
각 환경에 맞게 백엔드를 분리하십시오.
각 애플리케이션 환경에 대해 고유한 Terraform 백엔드를 사용하십시오. 별도의 백엔드는 개발, 테스트 및 프로덕션 간에 상태를 분리합니다.
영향 범위를 줄이세요.
상태를 격리하면 하위 환경의 변경이 프로덕션 인프라에 영향을 주지 않도록 할 수 있습니다. 개발 및 테스트 환경에서의 사고 또는 실험은 영향이 제한적입니다.
프로덕션 액세스를 제한하세요
프로덕션 상태 백엔드의 권한을 대부분의 사용자에 대한 읽기 전용 액세스로 잠급니다. 프로덕션 인프라를 CI/CD 파이프라인으로 수정하고 Break Glass 역할을 수행할 수 있는 사용자를 제한하십시오.
액세스 제어를 간소화합니다.
백엔드 수준에서 권한을 관리하면 환경 간 액세스 제어가 간소화됩니다. 애플리케이션과 환경별로 별도의 S3 버킷을 사용하면 전체 백엔드 버킷에 광범위한 읽기 또는 쓰기 권한을 부여할 수 있습니다.
워크스페이스를 공유하지 마세요.
Terraform 작업 영역을
환경 백엔드를 완전히 격리하면 단일 장애 또는 침해로 인한 영향을 최소화할 수 있습니다. 또한 별도의 백엔드는 액세스 제어를 환경의 민감도 수준에 맞게 조정합니다. 예를 들어 프로덕션 환경에는 쓰기 보호를 제공하고 개발 및 테스트 환경에는 더 넓은 액세스를 제공할 수 있습니다.
원격 상태 활동을 능동적으로 모니터링합니다.
원격 상태 활동을 지속적으로 모니터링하는 것은 잠재적 문제를 조기에 발견하는 데 매우 중요합니다. 비정상적인 잠금 해제, 변경 또는 액세스 시도를 찾아보십시오.
의심스러운 잠금 해제 시 알림 받기
대부분의 상태 변경은 CI/CD 파이프라인을 통해 실행되어야 합니다. 개발자 워크스테이션을 통해 상태 잠금이 직접 해제되면 알림을 생성하여 승인되지 않았거나 테스트되지 않은 변경을 알릴 수 있습니다.
액세스 시도를 모니터링합니다.
상태 버킷의 인증 실패는 정찰 활동을 의미할 수 있습니다. 여러 계정이 상태에 액세스하려고 하거나 비정상적인 IP 주소가 나타나 자격 증명이 손상되었다는 신호인지 확인하십시오.