DevOps Bootcamp · 강의

거버넌스를 위한 Sentinel 정책

Terraform 배포 전반에서 규정 준수와 거버넌스를 보장하도록 HashiCorp Sentinel을 사용해 정책을 코드로 작성하고 적용하는 방법을 학습합니다.

레슨 2/411개 단계

거버넌스를 위한 Sentinel 정책은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.

코드로서의 정책 및 Sentinel 소개

인프라 배포가 특정 규칙을 충족하는지 자동으로 확인할 수 있다면 어떨까요? 이것이 바로 코드로서의 정책(PaC)의 힘입니다. PaC는 인프라 생성 및 수정에 대한 규칙을 프로그래밍 가능한 방식으로 정의하여 거버넌스를 개발 워크플로에 통합합니다. HashiCorp Sentinel은 이러한 목적에 맞게 설계된 강력한 PaC 프레임워크입니다.

Terraform에서 Sentinel의 역할

Sentinel은 Terraform Cloud 및 Terraform Enterprise와 직접 통합됩니다. Sentinel은 게이트키퍼 역할을 하며, 클라우드 환경에 변경 사항을 적용하기 전에 Terraform 실행 계획을 평가합니다. 이 중요한 단계는 규정을 준수하지 않거나 안전하지 않은 인프라가 프로비저닝되는 것을 사전에 방지하고, 규칙을 선제적으로 적용합니다.

정책 및 적용 수준

Sentinel 정책은 Sentinel 언어로 작성된 규칙 집합입니다. 정책이 실행되면 true(통과) 또는 false(실패)를 반환합니다. 정책은 서로 다른 적용 수준으로 구성할 수 있습니다.

  • 권고: 위반을 경고하지만 작업은 계속 진행할 수 있습니다.
  • 소프트 필수: 규정을 준수하지 않는 변경을 진행하려면 명시적인 재정의가 필요합니다.
  • 하드 필수: 규정을 준수하지 않는 작업을 완전히 차단하며 정책 준수를 요구합니다.

Sentinel 정책 구조

Sentinel 정책은 .sentinel 파일에 정의합니다. 일반적으로 가져오기, 규칙 및 기본 조건을 포함합니다. main 규칙은 정책의 통과 또는 실패 결과를 결정합니다.

기본적인 정책은 다음과 같은 형태입니다.

import "tfplan"

main = rule {
  tfplan.resource_changes is empty
}

Terraform 계획 데이터에 액세스하기

tfplan 가져오기는 Terraform 실행 계획을 구조화된 형태로 제공합니다. 정책은 이 데이터를 사용하여 다음을 검사합니다.

  • tfplan.resource_changes: 생성, 업데이트 또는 삭제되는 리소스에 대한 세부 정보입니다.
  • tfplan.variables: 구성에 제공된 입력 변수입니다.
  • tfplan.outputs: 구성에서 출력되는 값입니다.

이 데이터는 Terraform이 수행하려는 작업을 바탕으로 정보에 근거한 정책 결정을 내리는 데 매우 중요합니다.

예제: 승인되지 않은 리전 거부

모든 AWS 리소스가 us-east-1에만 배포되도록 Sentinel 정책을 작성해 보겠습니다. 이 정책은 계획에서 각 AWS 리소스에 구성된 리전을 확인합니다.

import "tfplan/v2" as tfplan

allowed_regions = ["us-east-1"]

is_region_allowed = func(resource_change) {
  if resource_change.provider.name is "aws" {
    region = resource_change.provider.config.region else "us-east-1"
    return region in allowed_regions
  }
  return true # Not an AWS resource, allow
}

all_regions_compliant = all tfplan.resource_changes as _, rc {
  is_region_allowed(rc)
}

main = rule {
  all_regions_compliant
}

정책 함수 및 연산자

Sentinel은 복잡한 논리를 작성할 수 있도록 강력한 기본 제공 함수와 연산자를 제공합니다.

  • 컬렉션 함수: 목록 또는 맵을 순회하기 위한 all, any, filter, map입니다.
  • 형식 함수: 데이터 형식을 확인하기 위한 is, type_of입니다.
  • 연산자: 논리 연산자(and, or, not)와 비교 연산자(==, !=, >, <)입니다.

이러한 기능을 사용하면 다양한 시나리오를 다루는 견고하고 표현력 있는 정책을 작성할 수 있습니다.

예제: 필수 태그 적용

일반적인 거버넌스 요구 사항 중 하나는 비용 할당 또는 식별을 위해 리소스에 특정 태그를 적용하는 것입니다. 이 정책은 새로 생성되거나 업데이트되는 모든 aws_instance 리소스에 Project 태그가 있는지 확인합니다.

import "tfplan/v2" as tfplan

required_tags = ["Project"]

resource_has_required_tags = func(resource_change) {
  if resource_change.type is "aws_instance" {
    # Check if 'tags' attribute exists in the planned state
    if not ("tags" in resource_change.change.after) {
      return false
    }
    
    missing_tags = filter required_tags as tag {
      not (tag in resource_change.change.after.tags)
    }
    return missing_tags is empty
  }
  return true # Not an aws_instance, allow
}

all_instances_tagged = all tfplan.resource_changes as _, rc {
  (rc.change.actions contains "create" or rc.change.actions contains "update") ?
    resource_has_required_tags(rc) :
    true # Only check on create/update actions
}

main = rule {
  all_instances_tagged
}

로컬 정책 테스트

Terraform Cloud/Enterprise에 정책을 배포하기 전에 Sentinel CLI를 사용하여 로컬에서 테스트할 수 있습니다. sentinel test 명령을 사용하면 모의 tfplan 데이터를 사용하여 테스트 사례를 정의할 수 있습니다. 이를 통해 정책 동작을 확인하고 오류를 조기에 발견하여 실제 환경에 영향을 주지 않고 정책이 의도한 대로 작동하는지 확인할 수 있습니다.

정책 논리 확인

공개 읽기 액세스가 설정된 AWS S3 버킷이 생성되지 않도록 Sentinel 정책을 작성해야 합니다. 이를 적용하려면 tfplan 데이터의 어느 부분을 주로 검사해야 합니까?

복습: Sentinel을 사용한 거버넌스

강력한 거버넌스용 코드로서의 정책 프레임워크인 HashiCorp Sentinel을 살펴보았습니다.

  • Terraform Cloud/Enterprise와 통합하여 규칙을 적용합니다.
  • 정책은 인프라가 적용되기 전에 tfplan을 평가합니다.
  • 서로 다른 적용 수준(권고, 소프트, 하드)을 통해 정책의 영향 범위를 제어합니다.
  • 리전을 거부하고 태그를 적용하는 등 다양한 정책을 작성할 수 있습니다.
  • 로컬 테스트를 통해 배포 전에 정책이 의도한 대로 작동하는지 확인할 수 있습니다.

Sentinel은 인프라 배포 전반에서 규정 준수, 보안 및 운영 표준을 유지하는 데 핵심적인 역할을 합니다.

무료로 시작

AI 튜터와 함께 DevOps Bootcamp을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
142
레슨
568

자주 묻는 질문

“거버넌스를 위한 Sentinel 정책” 강의는 무료인가요?

네 — “거버넌스를 위한 Sentinel 정책” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.

“거버넌스를 위한 Sentinel 정책”에서 뭘 배우나요?

Terraform 배포 전반에서 규정 준수와 거버넌스를 보장하도록 HashiCorp Sentinel을 사용해 정책을 코드로 작성하고 적용하는 방법을 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“거버넌스를 위한 Sentinel 정책” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 멀티 클라우드 및 하이브리드 클라우드 패턴
  2. 거버넌스를 위한 Sentinel 정책
  3. Terraform Cloud와 Enterprise
  4. 사용자 지정 프로바이더 구축
← DevOps Bootcamp(으)로 돌아가기