Terraform sentinel 간단한 공유
2020년 12월 정리했던 자료이어서 최신 정보를 담고 있지 않다.
terraform sentinel 은 terraform 에 코드로 정책을 만들어서 제어할 수 있는 기능입니다. Terraform Cloud (TC)나 Terraform Enterprise(TE) 에서만 지원하는 기능이기 때문에 오픈소스 terraform을 쓸 때는 사용할 수 없는 기능입니다.
여기서 설명하는 가이드 문서에도 아래의 내용이 있습니다.
Note: This functionality is available in the Terraform Cloud Team & Governance tier, as well as Enterprise. Organization owners can enable a 30-day free trial in their settings under "Plan & Billing".
이 글에서는 TE, TC에 대한 설명은 넘어가고 sentinel을 실제 사용했던 경험을 간단히 공유합니다.
sentinel 이해하기 및 실습
sentinel 을 이해하기 위해서는 아래 가이드를 보고 실습이 필요합니다. TC와 연동하기 전에 먼저 local pc에서 테스팅을 해보는 것이 필요합니다.
Policy | Terraform | HashiCorp Developer
Install the Sentinel CLI : sentinel pc 개발환경에 설치(테라폼 코드). 중간에 실습을 할 수 있는 부분이 있는데 이 부분은 sentinel.hcl 파일에 mock data 를 지정하여 테스팅을 하는 것임. 여기에서 실제 실습을 해보는 것이 좋습니다. 그래야 sentinel에 대한 감이 옵니다. 실제 작업을 진행해보면 생각보다는 어렵지는 않습니다.
Download Policy Mock Data : TC 세팅하고 테스팅용 terraform 코드 실행을 한다. 그런 후 mock data를 다운로드 받는다. mock data는 로컬 pc 에서 sentinel 테스팅을 할 때 필요한 자료입니다.
Write a Sentinel policy for a Terraform deployment : sentinel policy 만들고 확인.
Test Sentinel Policies : 위의 경우는 TC를 설정하고 terraform 을 실행하여 확인을 해야 한다. 그런데 mock data (terraform 실행 내용이 담긴 데이타로 sentinel에서 이용)를 이용하여 로컬에서 sentinel을 테스팅 할 수 있다.
Upload your Sentinel policy set to Terraform Cloud : sentinel 코드를 github에 올리고 TC에서 연동을 하는 내용임.
Control Costs with Policies : TC에는 cost estimation 기능이 있다. cost 에 대한 policy를 만들어서 일정 금액 넘으면 경고를 만들거나 apply를 못하게 막을 수 있다.
위의 과정을 거치면 다음의 작업을 진행한 것이다.
TC workspace 설정. sentinel을 적용할 workspace 임
sentinel policy를 업로드한 github repo.
디렉토리에 개별 정책이 파일로 들어가고 sentinel.hcl 파일에 실제 사용할 policy, policy 에 적용할 정책(정책에 어긋나면 apply 못하게 할거냐, apply는 할 수 있게 해주냐, 로그만 보여줄 것이냐) 을 명시해야 한다.
TC와 sentinel policy 연동
이제 sentinel policy 를 업데이트하고 TE, TC에서 테스팅을 해보면 된다. sentinel 개발을 할 경우에는 mock data를 이용하여 테스팅을 하면 편리할 것이다. test 기능도 들어있는데 https://learn.hashicorp.com/tutorials/terraform/sentinel-testing?in=terraform/policy 참고.
sentinel 예제
sentinel example
https://www.terraform.io/docs/cloud/sentinel/examples.html
상세내용 : terraform-guides 에서 governance에 각 클라우드별 예제들이 있다.
https://github.com/hashicorp/terraform-guides/tree/master/governance
https://github.com/hashicorp/terraform-guides/tree/master/governance/third-generation/aws
The third-generation policies 가 v2 버전을 사용하고 sentinel modules 이용한다.
The third-generation policies were created in 2020 and use the v2 versions of those imports. The third-generation policies also use Sentinel Modules which allow the policies to be much shorter than the second-generation policies.
AWS 예제의 일부 policy에서 sentinel module을 이용하는 경우가 있어서 third-generation/common-functions , third-generation/aws/aws-functions 을 복사하고 sentinel.hcl에 function 쓰는 것 설정을 하여 사용을 했다.이 부분은 자신이 어떤 코드를 선택하느냐에 따라 다를 수 있다.
위와 같이 sentinel의 function 복사하고 sentinel.hcl 에 function 쓰는 것 설정을 해 주어야 한다.
https://github.com/hashicorp/terraform-guides/blob/master/governance/third-generation/aws/sentinel.hcl
sentinel 간단한 개인평
정책을 강제하는 것은 좋은 기능이다. apply 이전 단계에서 정책을 평가할 수 있기 때문에 약간이나마 정책준수를 확인하는데 비용은 줄어들 수 있을 것 같다. (리소스를 만들고 확인을 해야 한다면 리소스 생성 비용이 항상 들어감)
예제를 참고하여 간단한 rule은 복사해서 사용을 하면 된다. 그런데 복잡한 rule을 이용해야 할 경우 sentinel hcl 문법에 익숙해져야 하고 terraform-guides 에서 제공하는 function 등을 직접 만들어서 써야 할 수 있다.
TC에서 제공하는 Cost Estimation 기능이 있다. TC에서 생성할 리소스의 비용을 미리 체크할 수 있는 부분이다. 그런데 region이 다른 경우에도 가격이 동일하게 나오는 이슈가 있어서 2020.11. 18 hashicorp 에 문의한 상태이다.
https://www.terraform.io/docs/cloud/cost-estimation/inde x.html
참고자료
TC의 Cost Estimation에서 지원하는 AWS 리소스 종류
https://www.terraform.io/docs/cloud/cost-estimation/aws.html
hashicorp korea에서 만든 sentinel 영상.
비용을 잡아야 클라우드를 잡는다 : https://www.hashicorp.com/events/webinars/terraform-aws?fbclid=IwAR256wQ8HogeiT_UAuMIeaEuIzpOputsIjenxaBROHAI5rFXJ7mFwSP-4Yk
hashicorp snapshots : [한국어] Policy as Code with Terraform and Sentinel
아주 자세한 설명은 아니어서 Policy | Terraform | HashiCorp Developer 를 가지고 따라해보는 것이 필요합니다.
TE, TC 설정도 자동화하기
Terraform Enterprise 나 Terraform Cloud에서 workspace 설정 등도 terraform 코드를 이용하여 할 수 있습니다. sentinel policy의 경우는 tfe provider 에서 tfe_policy_set
를 이용하여 설정할 수 있습니다. 그러면 TE나 TC 설정도 자동화하고 코드로 관리할 수 있습니다.