기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CloudFormation Guard 정책을 사용하여 AWS Config 사용자 지정 규칙 생성
작성자: 앤드류 록 (AWS), 카일라쉬 하빌다르 (AWS), 니콜 브라운 (AWS), 타냐 하웰 (AWS)
코드 aws-config-custom-rule리포지토리 | 환경: PoC 또는 파일럿 | 기술: 보안, 자격 증명, 규정 준수, 관리 및 거버넌스 |
AWS 서비스: AWS CloudFormation, AWS Config |
요약
AWS Config규칙은 AWS 리소스와 대상 구성 상태를 평가하는 데 도움이 됩니다. 규칙에는 관리형 AWS Config 규칙과 사용자 지정이라는 두 가지 유형이 있습니다. AWS Lambda 함수를 사용하거나 AWS CloudFormation Guard
Guard로 생성한 규칙은 관리형 규칙보다 더 세밀한 제어를 제공하며, 일반적으로 완전 사용자 지정 Lambda 규칙보다 구성하기가 더 쉽습니다. 이 접근 방식을 통해 엔지니어와 아키텍트는 Lambda를 통해 사용자 지정 규칙을 배포하는 데 필요한 Python, NodeJS 또는 Java를 몰라도 규칙을 구축할 수 있습니다.
이 패턴은 Guard를 통해 사용자 지정 규칙을 채택하는 데 도움이 되는 실행 가능한 템플릿, 코드 샘플 및 배포 접근 방식을 제공합니다. 관리자는 이 패턴을 사용하여 구성 항목 속성이 있는 사용자 지정 규정 준수 규칙을 작성할 수 있습니다. AWS Config 예를 들어 개발자는 AWS Config 구성 항목에 대한 가드 정책을 사용하여 배포된 AWS 리소스와AWS 비리소스의 상태를 지속적으로 모니터링하고, 규칙 위반을 탐지하고, 자동으로 문제 해결을 시작할 수 있습니다.
목표:
이 패턴을 읽고 나면 다음을 할 수 있을 것입니다.
가드 정책 코드가 AWS Config 서비스와 상호 작용하는 방식을 이해하십시오.
Guard 구문을 사용하여 암호화된 볼륨의 규정 준수를 검증하는 AWS Config 사용자 지정 규칙인 시나리오 1을 배포하십시오. 이 규칙은 드라이브가 사용 중인지 확인하고 드라이브 유형이 gp3인지 확인합니다.
Guard 구문을 사용하여 Amazon GuardDuty 규정 준수를 검증하는 AWS Config 사용자 지정 규칙인 시나리오 2를 배포하십시오. 이 규칙은 GuardDuty 레코더에 아마존 심플 스토리지 서비스 (Amazon S3) 보호 및 아마존 엘라스틱 쿠버네티스 서비스 (Amazon EKS) 보호가 활성화되어 있는지 확인합니다.
사전 조건 및 제한 사항
사전 조건
액티브 AWS 계정
AWS Config, 귀하의 계정에 설정 AWS 계정
제한 사항
Guard 사용자 지정 규칙은 대상 구성 항목 JSON 레코드의 키-값 쌍만 쿼리할 수 있습니다.
아키텍처
Guard 구문을 AWS Config 규칙에 사용자 지정 정책으로 적용합니다. AWS Config 지정된 각 리소스의 계층적 JSON을 캡처합니다. AWS Config 구성 항목의 JSON에는 키-값 쌍이 포함되어 있습니다. 이러한 속성은 Guard 구문에서 해당 값에 할당되는 변수로 사용됩니다.
다음은 Guard 구문에 대한 설명입니다. 구성 항목 JSON의 변수가 사용되며 앞에 문자가 추가됩니다. %
# declare variable let <variable name> = <'value'> # create rule and assign condition and policy rule <rule name> when <CI json key> == <"CI json value"> { <top level CI json key>.<next level CI json key> == %<variable name> }
시나리오 1: 아마존 EBS 볼륨
시나리오 1은 Guard 구문을 사용하여 암호화된 볼륨의 규정 준수를 검증하는 AWS Config 사용자 지정 규칙을 배포합니다. 이 규칙은 드라이브가 사용 중인지 확인하고 드라이브 유형이 gp3인지 확인합니다.
다음은 시나리오 1의 AWS Config 구성 항목 예제입니다. 이 구성 항목에는 가드 정책에서 변수로 사용되는 세 개의 키-값 쌍이 있습니다:volumestatus
,volumeencryptionstatus
,. volumetype
또한 resourceType
키는 Guard 정책에서 필터로 사용됩니다.
{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-01-15T19:04:45.402Z", "configurationItemStatus": "ResourceDiscovered", "configurationStateId": "4444444444444", "configurationItemMD5Hash": "", "arn": "arn:aws:ec2:us-west-2:111111111111:volume/vol-222222222222", "resourceType": "AWS::EC2::Volume", "resourceId": "vol-222222222222", "awsRegion": "us-west-2", "availabilityZone": "us-west-2b", "resourceCreationTime": "2023-01-15T19:03:22.247Z", "tags": {}, "relatedEvents": [], "relationships": [ { "resourceType": "AWS::EC2::Instance", "resourceId": "i-33333333333333333", "relationshipName": "Is attached to Instance" } ], "configuration": { "attachments": [ { "attachTime": "2023-01-15T19:03:22.000Z", "device": "/dev/xvda", "instanceId": "i-33333333333333333", "state": "attached", "volumeId": "vol-222222222222", "deleteOnTermination": true, "associatedResource": null, "instanceOwningService": null } ], "availabilityZone": "us-west-2b", "createTime": "2023-01-15T19:03:22.247Z", "encrypted": false, "kmsKeyId": null, "outpostArn": null, "size": 8, "snapshotId": "snap-55555555555555555", "state": "in-use", "volumeId": "vol-222222222222", "iops": 100, "tags": [], "volumeType": "gp2", "fastRestored": null, "multiAttachEnabled": false, "throughput": null, "sseType": null }, "supplementaryConfiguration": {} }
다음은 Guard 구문을 사용하여 시나리오 1의 변수와 규칙을 정의하는 예제입니다. 이 예에서 다음과 같이 합니다.
처음 세 줄은
let
명령을 사용하여 변수를 정의합니다. 구성 항목의 속성에서 파생된 이름과 값이 할당됩니다.compliancecheck
규칙 블록은 일치하는resourceType
키-값 쌍을 찾는 when 조건부 종속성을 추가합니다.AWS::EC2::Volume
일치하는 항목이 발견되면 규칙은 나머지 JSON 속성을 살펴보고 다음 세 가지 조건, 및 에서 일치하는 항목을 찾습니다.state
encrypted
volumeType
let volumestatus = 'available' let volumetype = 'gp3' let volumeencryptionstatus = true rule compliancecheck when resourceType == "AWS::EC2::Volume" { configuration.state == %volumestatus configuration.encrypted == %volumeencryptionstatus configuration.volumeType == %volumetype }
이 사용자 지정 규칙을 구현하는 전체 Guard 사용자 지정 정책은 코드 awsconfig-guard-cft저장소의.yaml 또는 awsconfig-guard-tf-ec2vol.json을
시나리오 2: 규정 준수 GuardDuty
시나리오 2는 Guard 구문을 사용하여 Amazon GuardDuty 규정 준수를 검증하는 AWS Config 사용자 지정 규칙을 배포합니다. 이 규칙은 GuardDuty 레코더에 Amazon S3 보호 및 Amazon EKS 보호가 활성화되어 있는지 확인합니다. 또한 GuardDuty 조사 결과가 15분마다 게시되는지 확인합니다. 이 시나리오는 조직 전체 AWS 계정 및 조직 (내부 AWS Organizations) AWS 리전 에 배포할 수 있습니다.
다음은 시나리오 2의 AWS Config 구성 항목 예제입니다. 이 구성 항목에는 가드 정책에서 변수로 사용되는 세 개의 키-값 쌍이 있습니다:FindingPublishingFrequency
,S3Logs
,. Kubernetes
또한 resourceType
키는 정책에서 필터로 사용됩니다.
{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-11-27T13:34:28.888Z", "configurationItemStatus": "OK", "configurationStateId": "7777777777777", "configurationItemMD5Hash": "", "arn": "arn:aws:guardduty:us-west-2:111111111111:detector/66666666666666666666666666666666", "resourceType": "AWS::GuardDuty::Detector", "resourceId": "66666666666666666666666666666666", "resourceName": "66666666666666666666666666666666", "awsRegion": "us-west-2", "availabilityZone": "Regional", "resourceCreationTime": "2020-02-17T02:48:04.511Z", "tags": {}, "relatedEvents": [], "relationships": [], "configuration": { "Enable": true, "FindingPublishingFrequency": "FIFTEEN_MINUTES", "DataSources": { "S3Logs": { "Enable": true }, "Kubernetes": { "AuditLogs": { "Enable": true } } }, "Id": "66666666666666666666666666666666", "Tags": [] }, "supplementaryConfiguration": { "CreatedAt": "2020-02-17T02:48:04.511Z" } }
다음은 시나리오 2에서 Guard 구문을 사용하여 변수와 규칙을 정의하는 예제입니다. 이 예에서 다음과 같이 합니다.
처음 세 줄은
let
명령을 사용하여 변수를 정의합니다. 구성 항목의 속성에서 파생된 이름과 값이 할당됩니다.compliancecheck
규칙 블록은 일치하는resourceType
키-값 쌍을 찾는 when 조건부 종속성을 추가합니다.AWS::GuardDuty::Detector
일치하는 항목이 발견되면 규칙은 나머지 JSON 속성을 살펴보고 다음 세 가지 조건, 및 에서 일치하는 항목을 찾습니다.S3Logs.Enable
Kubernetes.AuditLogs.Enable
FindingPublishingFrequency
let s3protection = true let kubernetesprotection = true let publishfrequency = 'FIFTEEN_MINUTES' rule compliancecheck when resourceType == "AWS::GuardDuty::Detector" { configuration.DataSources.S3Logs.Enable == %s3protection configuration.DataSources.Kubernetes.AuditLogs.Enable == %kubernetesprotection configuration.FindingPublishingFrequency == %publishfrequency }
이 사용자 지정 규칙을 구현하는 전체 Guard 사용자 지정 정책은 코드 awsconfig-guard-cft-gd저장소의.yaml을 참조하십시오.
도구
AWS 서비스
AWS CloudFormation AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 전체 및 지역의 라이프사이클 전반에 걸쳐 리소스를 관리할 수 있도록 도와줍니다. AWS 계정
AWS Config내 리소스와 해당 리소스가 어떻게 구성되어 있는지를 자세히 보여줍니다. AWS 계정 리소스가 서로 관련되는 방식과 리소스의 구성이 시간이 지남에 따라 변경된 방식을 식별하는 데 도움이 됩니다.
기타 도구
HashiCorp Terraform은
코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 오픈 소스 코드형 인프라 (IaC) 도구입니다.
코드 리포지토리
이 패턴의 코드는 with 저장소에서 사용할 수 있습니다. GitHub AWS ConfigAWS CloudFormation Guard
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
(선택 사항) 규칙의 키-값 쌍을 선택합니다. | 사용자 지정 가드 정책을 정의하는 경우 이 단계를 완료하세요. 시나리오 1 또는 2의 샘플 정책 중 하나를 사용하는 경우 이 단계를 건너뛰십시오.
| AWS 관리자, 보안 엔지니어 |
사용자 지정 규칙 생성. | 이전에 식별한 키-값 쌍을 사용하거나 제공된 샘플 가드 정책 중 하나를 사용하여 사용자 지정 정책 규칙 생성의 지침에 따라 AWS Config 사용자 지정 규칙을 생성합니다. | AWS 관리자, 보안 엔지니어 |
사용자 지정 규칙을 확인합니다. | 다음 중 하나를 수행하여 사용자 지정 Guard 규칙을 검증하십시오.
| AWS 관리자, 보안 엔지니어 |
문제 해결
문제 | Solution |
---|---|
외부에서 Guard 정책을 테스트해 보십시오. AWS Config | 단위 테스트는 로컬 장치 또는 IDE와 같은 통합 개발 환경 (IDE) 에서 수행할 수 있습니다. AWS Cloud9 유닛 테스트를 수행하려면 다음과 같이 하세요.
|
사용자 지정 규칙 디버깅 AWS Config | Guard 정책에서 |
관련 리소스
AWS 설명서
AWS Config 사용자 지정 정책 규칙 생성 (AWS Config 문서)
AWS CloudFormation Guard 규칙 작성 (가드 문서)
AWS 블로그 게시물 및 워크샵
AWS CloudFormation Guard 2.0 소개
(AWS 블로그 게시물)
기타 리소스
AWS CloudFormation Guard
(GitHub) AWS CloudFormation Guard CLI 설명서
() GitHub