OPA로 Terraform 스캔

최근에 컴플라이언스 프로젝트 작업을 시작했고 작성된 IAC Terraform 코드가 CIS, SOC2 등과 같은 특정 표준을 준수함을 보여줄 수 있는 도구를 찾아야 했습니다. 컴플라이언스의 세계.

이 블로그에서는 is Open 에이전트 정책에 대해 설명합니다. 레고란? 보고서를 생성하기 위해 regula와 함께 사용하는 방법.

OPA 란 무엇입니까?
Open Policy Agent(OPA, "oh-pa"로 발음)는 스택 전반에 걸쳐 정책 적용을 통합하는 오픈 소스 범용 정책 엔진입니다. OPA는 정책을 코드 및 간단한 API로 지정할 수 있는 높은 수준의 선언적 언어를 제공합니다. 소프트웨어에서 정책 결정을 오프로드합니다. OPA를 사용하여 마이크로서비스, Kubernetes, CI/CD 파이프라인, API 게이트웨이 등에서 정책을 시행할 수 있습니다.

이것을 더 잘 이해하려면 레고를 이해해야 합니다.

레고 소개
Rego는 잘 알려진 수십 년 된 쿼리 언어인 Datalog에서 영감을 받았습니다. Rego는 Datalog를 확장하여 JSON과 같은 구조화된 문서 모델을 지원합니다.

Rego 쿼리는 OPA에 저장된 데이터에 대한 어설션입니다. 이러한 쿼리는 예상되는 시스템 상태를 위반하는 데이터 인스턴스를 열거하는 정책을 정의하는 데 사용할 수 있습니다.

레고를 사용하는 이유
  • 1. 읽고 쓰기가 쉽다.
  • 2. 중첩 문서 참조를 위한 강력한 지원
  • 3. 선언적

  • 규칙
    Regula는 배포 전에 잠재적인 AWS, Azure, Google Cloud 및 Kubernetes 보안 및 규정 준수 위반에 대한 코드 파일로 인프라를 평가하는 도구입니다.

    Regula는 다음 파일 형식을 지원합니다.

    CloudFormation JSON/YAML 템플릿
    Terraform HCL 코드
    Terraform JSON 계획
    Kubernetes YAML 매니페스트
    ARM(Azure Resource Manager) JSON 템플릿(미리 보기)
    규정 설치

    릴리스 페이지에서 플랫폼용 Regula 아카이브를 다운로드하십시오.
    다운로드한 아카이브를 추출합니다.
    추출된 정규 바이너리를 PATH의 어딘가로 이동합니다.
    또한 사용할 수 있습니다Homebrew.
    맥:

    #brew install regula
    


    리눅스:

    #sudo mv regula /usr/local/bin
    OR
    #brew install regula
    


    윈도우 cmd:

    md C:\regula\bin 
    move regula.exe C:\regula\bin 
    setx PATH "%PATH%;C:\regula\bin"
    


    이제 이 블로그의 주요 시나리오로 넘어가겠습니다. 오늘날 우리는 IAC를 사용하여 IAC를 작성하고 클라우드 환경에 배포하고 있습니다. 그러나 대부분의 경우 클라우드에 배포하기 전에 코드가 규정을 준수하고 모든 매개변수가 보호되는지 확인해야 합니다. 여기에 OPA가 도움이 됩니다.

    몇 가지 terraform 스크립트를 작성해 보겠습니다. 여기에서는 특정 세부 정보로 AWS ec2 인스턴스를 생성합니다.

    resource "aws_instance" "instance" {
      ami                         = "ami-0ddb956ac6be95761"
      instance_type               = "t2.small"
      key_name                    = "key-pair-name"
      vpc_security_group_ids      = "sg-name
      subnet_id                   = "subnet-xxxxxxx"
      associate_public_ip_address = true
    
      root_block_device {
        volume_size           = 50
        delete_on_termination = true
      }
    
      tags = {
        Name = "demo-server"
      }
    }
    


    위의 terraform 코드를 OPA 규칙과 비교하여 규칙을 작성하려면 파일 확장자가 rego인 규칙을 정의해야 합니다.

    package rules.tf_aws_ec2_instance_no_public_ip
    
    __rego__metadoc__ := {
       "id": "POLICY_ID01",
       "title": "Ensure instance have no public IP associated",
       "description": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
       "custom": {"severity": "Low"},
    }
    
    resource_type := "aws_instance"
    
    default allow = false
    
    allow {
       input.associate_public_ip_address == false
    }
    


    위의 규칙을 살펴 보겠습니다.

    package :- 패키지는 하나 이상의 모듈에 정의된 규칙을 특정 네임스페이스로 그룹화합니다. 규칙은 이름 공간이 있기 때문에 프로젝트 간에 안전하게 공유할 수 있습니다.
    rego__metadoc :- id, 제목 설명 사용자 지정 심각도 등과 같은 세부 정보를 사용하여 규칙 또는 정책 보고를 향상시킵니다.
    resource_type :- terraform에서 보고 있는 리소스입니다.
    위의 규칙은 associate_public_ip_address가 false로 설정되어 있는지 확인합니다. 그러면 모든 스캔이 통과됩니다. 그렇지 않은 경우 아래와 같은 오류 메시지가 표시됩니다.

    main.tf 파일에 대해 regula 명령을 실행합니다.

    #regula run main.tf
    POLICY_ID01: Ensure instance have no public IP associated [Low]
    
           in main.tf:1:1
    


    필요한 경우 이 출력을 JSON 형식으로 가져올 수도 있습니다.

    #regula run main.tf -f json
    "rule_id": "POLICY_ID01",
          "rule_message": "",
          "rule_name": "tf_aws_ec2_instance_no_public_ip",
          "rule_raw_result": false,
          "rule_result": "FAIL",
          "rule_severity": "Low",
          "rule_summary": "Ensure instance have no public IP associated",
          "source_location": [
            {
              "path": "main.tf",
              "line": 1,
              "column": 1
            }
          ]
        },
    


    tf_plan 파일로 regula를 실행할 수도 있습니다. 이를 위해서는 계획 및 정확한 계획 출력 파일을 실행해야 합니다.

    #terraform plan -out="plan.tfplan"
    #terraform show -json plan.tfplan > plan.json
    


    JSON 형식의 파일 plan.json이 있으면 regula와 비교할 수 있습니다. 출력은 동일합니다.

    #regula run plan.json
    


    결론



    IAC를 사용하여 배포를 더 빠르고 강력하게 만드는 것은 매우 중요합니다. 그러나 동시에 표준을 준수하는지 여부를 확인하는 것도 중요하며 OPA는 표준을 준수하고 사용 사례에 따라 성형할 수 있는 좋은 솔루션입니다.

    참조



    OPA — https://www.openpolicyagent.org/docs/latest/
    규칙 — https://regula.dev/

    좋은 웹페이지 즐겨찾기