OPA로 Terraform 스캔
5137 단어 terraformcomplianceiacopa
이 블로그에서는 is Open 에이전트 정책에 대해 설명합니다. 레고란? 보고서를 생성하기 위해 regula와 함께 사용하는 방법.
OPA 란 무엇입니까?
Open Policy Agent(OPA, "oh-pa"로 발음)는 스택 전반에 걸쳐 정책 적용을 통합하는 오픈 소스 범용 정책 엔진입니다. OPA는 정책을 코드 및 간단한 API로 지정할 수 있는 높은 수준의 선언적 언어를 제공합니다. 소프트웨어에서 정책 결정을 오프로드합니다. OPA를 사용하여 마이크로서비스, Kubernetes, CI/CD 파이프라인, API 게이트웨이 등에서 정책을 시행할 수 있습니다.
이것을 더 잘 이해하려면 레고를 이해해야 합니다.
레고 소개
Rego는 잘 알려진 수십 년 된 쿼리 언어인 Datalog에서 영감을 받았습니다. Rego는 Datalog를 확장하여 JSON과 같은 구조화된 문서 모델을 지원합니다.
Rego 쿼리는 OPA에 저장된 데이터에 대한 어설션입니다. 이러한 쿼리는 예상되는 시스템 상태를 위반하는 데이터 인스턴스를 열거하는 정책을 정의하는 데 사용할 수 있습니다.
레고를 사용하는 이유
규칙
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/
Reference
이 문제에 관하여(OPA로 Terraform 스캔), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amaze_singh41/scan-terraform-with-opa-9d7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)