백엔드 모범 사례 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

백엔드 모범 사례

적절한 원격 백엔드를 사용하여 상태 파일을 저장하는 것은 공동 작업을 활성화하고, 잠금을 통해 상태 파일 무결성을 보장하고, 신뢰할 수 있는 백업 및 복구를 제공하고, CI/CD 워크플로와 통합하고, HCP Terraform과 같은 관리형 서비스에서 제공하는 고급 보안, 거버넌스 및 관리 기능을 활용하는 데 중요합니다.

Terraform은 Kubernetes, HashiCorp Consul 및 HTTP와 같은 다양한 백엔드 유형을 지원합니다. 그러나이 가이드는 대부분의 AWS 사용자에게 최적의 백엔드 솔루션인 Amazon S3에 중점을 둡니다.

높은 내구성과 가용성을 제공하는 완전관리형 객체 스토리지 서비스인 Amazon S3는 Terraform 상태를 관리하기 위한 안전하고 확장 가능하며 저렴한 백엔드를 제공합니다 AWS. Amazon S3의 글로벌 공간 및 복원력은 대부분의 팀이 상태 스토리지를 자체 관리하여 달성할 수 있는 것보다 뛰어납니다. 또한 AWS 액세스 제어, 암호화 옵션, 버전 관리 기능 및 기타 서비스와 기본적으로 통합되므로 Amazon S3는 편리한 백엔드 선택입니다.

기본 대상 고객은 AWS 고객이므로이 가이드는 Kubernetes 또는 Consul과 같은 다른 솔루션에 대한 백엔드 지침을 제공하지 않습니다. 완전히에 있는 팀의 경우 AWS 클라우드 Amazon S3는 일반적으로 Kubernetes 또는 HashiCorp Consul 클러스터보다 이상적인 선택입니다. Amazon S3 상태 스토리지의 단순성, 복원력 및 긴밀한 AWS 통합은 AWS 모범 사례를 따르는 대부분의 사용자에게 최적의 기반을 제공합니다. 팀은 AWS 서비스의 내구성, 백업 보호 및 가용성을 활용하여 원격 Terraform 상태를 높은 복원력으로 유지할 수 있습니다.

이 섹션의 백엔드 권장 사항을 따르면 오류 또는 무단 수정의 영향을 제한하면서 더 협업적인 Terraform 코드 베이스가 됩니다. 팀은 잘 설계된 원격 백엔드를 구현하여 Terraform 워크플로를 최적화할 수 있습니다.

원격 스토리지에 Amazon S3 사용

Amazon S3에 Terraform 상태를 원격으로 저장하고 Amazon DynamoDB를 사용하여 상태 잠금 및 일관성 검사를 구현하면 로컬 파일 스토리지보다 큰 이점을 얻을 수 있습니다. 원격 상태를 사용하면 팀 협업, 변경 추적, 백업 보호 및 원격 잠금을 통해 안전성을 높일 수 있습니다.

임시 로컬 스토리지 또는 자체 관리형 솔루션 대신 Amazon S3를 S3 Standard 스토리지 클래스(기본값)와 함께 사용하면 99.999999999%의 내구성과 99.99%의 가용성 보호 기능을 제공하여 우발적 상태 데이터 손실을 방지할 수 있습니다. Amazon S3 및 DynamoDB와 같은 AWS 관리형 서비스는 대부분의 조직이 스토리지를 자체 관리할 때 달성할 수 있는 수준을 초과하는 서비스 수준 계약(SLAs)을 제공합니다. 이러한 보호 기능을 사용하여 원격 백엔드에 액세스할 수 있습니다.

원격 상태 잠금 활성화

상태 잠금은 동시 쓰기 작업을 방지하도록 액세스를 제한하고 여러 사용자의 동시 수정으로 인한 오류를 줄입니다. Terraform은 Amazon S3 백엔드에 대해 두 가지 잠금 메커니즘을 지원합니다.

  • Amazon S3 네이티브 상태 잠금(권장): Terraform 1.10.0부터 사용할 수 있으며, Amazon S3의 네이티브 잠금 기능을 사용합니다.

  • DynamoDB 상태 잠금(사용되지 않음): 향후 Terraform 버전에서 제거될 레거시 접근 방식

terraform { backend "s3" { bucket = "myorg-terraform-states" key = "myapp/production/tfstate" region = "us-east-1" use_lockfile = true } }

마이그레이션 중에 이전 버전과의 호환성을 위해 Amazon S3 잠금과 DynamoDB 잠금을 동시에 구성할 수 있습니다. 그러나 DynamoDB 기반 잠금은 더 이상 사용되지 않으므로 Amazon S3 네이티브 잠금으로 마이그레이션하는 것이 좋습니다.

버전 관리 및 자동 백업 활성화

추가 보호를 위해 Amazon S3 백엔드 AWS Backup 에서를 사용하여 자동 버전 관리백업을 활성화합니다. 버전 관리는 변경이 이루어질 때마다 모든 이전 버전의 상태를 유지합니다. 또한 원치 않는 변경 사항을 롤백하거나 사고로부터 복구해야 하는 경우 이전 작업 상태 스냅샷을 복원할 수 있습니다.

필요한 경우 이전 버전 복원

버전이 지정된 Amazon S3 상태 버킷을 사용하면 이전에 알려진 정상 상태 스냅샷을 복원하여 변경 사항을 쉽게 되돌릴 수 있습니다. 이렇게 하면 우발적인 변경으로부터 보호하고 추가 백업 기능을 제공할 수 있습니다.

HCP Terraform 사용

HCP Terraform은 자체 상태 스토리지를 구성하는 대신 완전 관리형 백엔드 대안을 제공합니다. HCP Terraform은 추가 기능을 잠금 해제하면서 상태의 보안 스토리지와 암호화를 자동으로 처리합니다.

HCP Terraform을 사용하면 상태가 기본적으로 원격으로 저장되므로 조직 전체에서 상태 공유 및 잠금이 가능합니다. 세부 정책 제어는 상태 액세스 및 변경을 제한하는 데 도움이 됩니다.

추가 기능에는 버전 관리 통합, 정책 가드레일, 워크플로 자동화, 변수 관리, SAML과의 Single Sign-On 통합이 포함됩니다. Sentinel 정책을 코드로 사용하여 거버넌스 제어를 구현할 수도 있습니다.

HCP Terraform은 서비스형 소프트웨어(SaaS) 플랫폼을 사용해야 하지만 많은 팀에서 보안, 액세스 제어, 자동화된 정책 확인 및 공동 작업 기능에 대한 이점을 통해 Amazon S3 또는 DynamoDB를 사용한 자체 관리 상태 스토리지보다 최적의 선택입니다.

GitHub 및 GitLab과 같은 서비스와 마이너 구성으로 쉽게 통합하면 더 나은 팀 워크플로를 위해 클라우드 및 SaaS 도구를 완전히 수용하는 사용자에게도 유용합니다.

팀 협업 촉진

원격 백엔드를 사용하여 Terraform 팀의 모든 구성원 간에 상태 데이터를 공유합니다. 이렇게 하면 전체 팀에 인프라 변경 사항에 대한 가시성을 제공하기 때문에 협업이 용이해집니다. 상태 기록 투명성과 결합된 공유 백엔드 프로토콜은 내부 변경 관리를 간소화합니다. 모든 인프라 변경은 확립된 파이프라인을 통과하여 기업 전반의 비즈니스 민첩성을 높입니다.

를 사용하여 책임 개선 AWS CloudTrail

Amazon S3 버킷 AWS CloudTrail 과 통합하여 상태 버킷에 대한 API 호출을 캡처합니다. CloudTrail 이벤트를 필터링하여 및 기타 관련 호출PutObjectDeleteObject,을 추적합니다.

CloudTrail 로그에는 상태 변경을 위해 각 API를 호출한 보안 주체의 AWS 자격 증명이 표시됩니다. 사용자의 자격 증명은 시스템 계정 또는 백엔드 스토리지와 상호 작용하는 팀원과 일치시킬 수 있습니다.

CloudTrail 로그를 Amazon S3 상태 버전 관리와 결합하여 인프라 변경 사항을 적용한 보안 주체와 연결합니다. 여러 개정을 분석하여 모든 업데이트를 시스템 계정 또는 담당 팀원에게 귀속할 수 있습니다.

의도하지 않거나 방해가 되는 변경이 발생하면 상태 버전 관리는 롤백 기능을 제공합니다. CloudTrail은 사용자에 대한 변경 사항을 추적하므로 예방 개선 사항에 대해 논의할 수 있습니다.

또한 IAM 권한을 적용하여 상태 버킷 액세스를 제한하는 것이 좋습니다. 전반적으로 S3 버전 관리 및 CloudTrail 모니터링은 인프라 변경 전반에 걸쳐 감사를 지원합니다. 팀은 Terraform 상태 기록에 대한 책임, 투명성 및 감사 기능을 개선합니다.

각 환경의 백엔드 분리

각 애플리케이션 환경에 대해 고유한 Terraform 백엔드를 사용합니다. 별도의 백엔드는 개발, 테스트 및 프로덕션 간에 상태를 격리합니다.

영향 범위 축소

상태를 격리하면 하위 환경의 변경 사항이 프로덕션 인프라에 영향을 주지 않도록 할 수 있습니다. 개발 및 테스트 환경의 사고 또는 실험은 영향이 제한적입니다.

프로덕션 액세스 제한

프로덕션 상태 백엔드에 대한 권한을 대부분의 사용자에 대한 읽기 전용 액세스로 잠급니다. 프로덕션 인프라를 CI/CD 파이프라인으로 수정하고 유리 역할을 해제할 수 있는 사람을 제한합니다.

액세스 제어 간소화

백엔드 수준에서 권한을 관리하면 환경 간 액세스 제어가 간소화됩니다. 각 애플리케이션 및 환경에 대해 고유한 S3 버킷을 사용하면 전체 백엔드 버킷에 광범위한 읽기 또는 쓰기 권한을 부여할 수 있습니다.

공유 워크스페이스 방지

Terraform 워크스페이스를 사용하여 환경 간에 상태를 분리할 수 있지만 고유한 백엔드는 더 강력한 격리를 제공합니다. 워크스페이스를 공유한 경우에도 사고는 여러 환경에 영향을 미칠 수 있습니다.

환경 백엔드를 완전히 격리된 상태로 유지하면 단일 장애 또는 위반의 영향을 최소화할 수 있습니다. 또한 별도의 백엔드는 환경의 민감도 수준에 맞게 액세스 제어를 조정합니다. 예를 들어 프로덕션 환경에 대한 쓰기 보호와 개발 및 테스트 환경에 대한 광범위한 액세스를 제공할 수 있습니다.

원격 상태 활동을 적극적으로 모니터링

잠재적 문제를 조기에 감지하려면 원격 상태 활동을 지속적으로 모니터링하는 것이 중요합니다. 비정상적인 잠금 해제, 변경 또는 액세스 시도가 있는지 확인합니다.

의심스러운 잠금 해제에 대한 알림 받기

대부분의 상태 변경은 CI/CD 파이프라인을 통해 실행되어야 합니다. 개발자 워크스테이션을 통해 직접 상태 잠금 해제가 발생하면 알림을 생성하여 무단 또는 테스트되지 않은 변경 사항을 알릴 수 있습니다.

액세스 시도 모니터링

상태 버킷의 인증 실패는 정찰 활동을 나타낼 수 있습니다. 여러 계정이 상태에 액세스하려고 하거나 비정상적인 IP 주소가 나타나 손상된 자격 증명을 나타내는지 확인합니다.