Systems Manager Compliance와 함께 Chef InSpec 프로파일 사용
AWS Systems Manager은 Chef
InSpec
-
특정 포트가 열려 있는지 또는 닫혀 있는지 확인
-
특정 애플리케이션이 실행 중인지 확인
-
특정 패키지가 설치되었는지 확인
-
특정 속성에 대한 Windows 레지스트리 키 확인
Systems Manager를 사용하여 관리하는 온프레미스 서버 또는 가상 머신 및 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대해 InSpec 프로파일을 생성할 수 있습니다. 다음의 Chef InSpec 프로파일 예제는 포트 22가 열려 있는지 확인합니다.
control 'Scan Port' do impact 10.0 title 'Server: Configure the service port' desc 'Always specify which port the SSH server should listen to. Prevent unexpected settings.' describe sshd_config do its('Port') { should eq('22') } end end
InSpec에는 검사 및 감사 컨트롤을 빠르게 작성할 수 있는 리소스 모음이 들어 있습니다. InSpec은 InSpec 도메인 전용 언어(DSL)
작동 방식
다음은 Compliance에서 InSpec 프로파일을 사용하는 프로세스가 어떻게 이루어지는지를 보여줍니다.
-
미리 정의된 InSpec 프로파일을 지정하여 사용하거나 직접 만들 수 있습니다. GitHub에서 사전 정의 프로파일
을 사용하여 시작할 수 있습니다. 고유한 InSpec 프로파일을 생성하는 방법에 대한 자세한 내용은 ChefChef InSpec 프로파일 을 참조하세요. -
프로파일을 퍼블릭 또는 프라이빗 GitHub 리포지토리 또는 S3 버킷에 저장합니다.
-
Systems Manager 문서(SSM 문서)
AWS-RunInspecChecks
를 사용하여 InSpec 프로파일로 Compliance를 실행합니다. AWS Systems Manager의 기능인 Run Command(온디맨드 검사의 경우)를 사용하여 Compliance를 시작하거나, AWS Systems Manager의 기능인 State Manager를 사용하여 정규 Compliance 검사를 예약할 수 있습니다. -
규정 준수 API 또는 규정 준수 콘솔을 사용하여 비준수 노드를 식별합니다.
참고
다음 정보를 참고하세요.
-
Chef는 노드의 클라이언트를 사용하여 프로파일을 처리합니다. 클라이언트를 설치할 필요가 없습니다. Systems Manager가 SSM 문서
AWS-RunInspecChecks
를 실행할 때 시스템에서 클라이언트가 설치되었는지 확인합니다. 설치되어 있지 않은 경우 Systems Manager는 검사 중 Chef 클라이언트를 설치하고, 검사가 완료되면 클라이언트를 제거합니다. -
이 주제에 설명된 대로 SSM 문서
AWS-RunInspecChecks
를 실행하면 각 대상 노드에Custom:Inspec
유형의 규정 준수 항목이 할당됩니다. 이 규정 준수 유형을 할당하기 위해 문서는 PutComplianceItems API 작업을 호출합니다.
InSpec 규정 준수 검사 실행
이 섹션에서는 Systems Manager 콘솔과 AWS Command Line Interface(AWS CLI)를 사용하여 InSpec 규정 준수 검사를 실행하는 방법을 설명합니다. 콘솔 절차는 State Manager를 구성하여 검사를 실행하는 방법을 보여줍니다. AWS CLI 절차는 Run Command를 구성하여 검사를 실행하는 방법을 보여줍니다.
State Manager(콘솔)로 InSpec 규정 준수 검사 실행
AWS Systems Manager 콘솔을 사용해 State Manager에서 InSpec 규정 준수를 실행하려면
AWS Systems Manager 콘솔(https://console.aws.amazon.com/systems-manager/
)을 엽니다. 탐색 창에서 State Manager를 선택합니다.
-
연결 생성을 선택합니다.
-
연결 세부 정보 제공 섹션에 이름을 입력합니다.
-
[문서(Document)] 목록에서
AWS-RunInspecChecks
를 선택합니다. -
문서 버전 목록에서 실행 시간 시 최신 버전을 선택합니다.
-
파라미터 섹션의 소스 유형 목록에서 GitHub 또는 S3를 선택합니다.
GitHub를 선택한 후 소스 정보 필드에 퍼블릭 또는 프라이빗 GitHub 리포지토리의 InSpec 프로파일 경로를 입력합니다. 다음은 Systems Manager 팀이 https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck
에서 제공하는 퍼블릭 프로파일 경로의 예입니다. {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}
S3를 선택한 경우 소스 정보 필드의 S3 버킷에 InSpec 프로파일에 대한 유효한 URL을 입력합니다.
Systems Manager가 GitHub 및 Amazon S3와 통합되는 방법에 대한 자세한 내용은 GitHub에서 스크립트 실행 섹션을 참조하세요.
Targets(대상) 섹션에서, 태그를 지정하거나, 수동으로 인스턴스나 엣지 디바이스를 선택하거나, 리소스 그룹을 지정하여 이 작업을 실행할 관리형 노드를 식별합니다.
작은 정보
예상한 관리형 노드가 목록에 없으면 관리형 노드 가용성 문제 해결에서 문제 해결 팁을 참조하세요.
-
[일정 지정(Specify schedule)] 섹션에서 일정 작성기 옵션을 사용하여 Compliance 검사를 실행할 때를 지정하는 일정을 생성합니다.
Rate control(속도 제어)에서
-
Concurrency(동시성)에서 명령을 동시에 실행할 관리형 노드의 백분율 또는 개수를 지정합니다.
참고
관리형 노드에 적용할 태그를 지정하거나, AWS 리소스 그룹을 지정하여 대상을 선택하였지만 대상으로 지정할 관리형 노드 수를 잘 모를 경우에는 백분율을 지정하여 동시에 문서를 실행할 수 있는 대상 수를 제한합니다.
-
Error threshold(오류 임계값)에서, 명령이 노드의 개수 또는 백분율에서 실패한 후 다른 관리형 노드에서 해당 명령의 실행을 중지할 시간을 지정합니다. 예를 들어 세 오류를 지정하면 네 번째 오류를 받았을 때 Systems Manager가 명령 전송을 중지합니다. 여전히 명령을 처리 중인 관리형 노드도 오류를 전송할 수 있습니다.
-
(선택 사항) Output options(출력 옵션)에서 명령 출력을 파일에 저장하려면 Write command output to an S3 bucket(S3 버킷에 명령 출력 쓰기) 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.
참고
데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아니라 인스턴스에 할당된 인스턴스 프로파일(EC2 인스턴스용) 또는 IAM 서비스 역할(하이브리드 정품 인증 시스템)의 권한입니다. 자세한 내용은 Systems Manager에 필요한 인스턴스 권한 구성이나 하이브리드 환경을 위한 IAM 서비스 역할 생성을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정에 있는 경우 관리형 노드와 연결된 인스턴스 프로파일 또는 IAM 서비스 역할은 해당 버킷에 쓸 수 있는 권한이 있어야 합니다.
-
연결 생성을 선택합니다. 시스템에서 연결을 생성하고 규정 준수 검사를 자동으로 실행합니다.
-
검사가 완료될 때까지 몇 분 정도 기다린 후 탐색 창에서 규정 준수를 선택합니다.
-
해당 관리형 인스턴스에서 Compliance Type 열이 Custom:Inspec인 노드를 찾습니다.
-
노드 ID를 선택하여 비준수 상태 정보를 봅니다.
Run Command(AWS CLI)로 InSpec 규정 준수 검사 실행
아직 하지 않은 경우 AWS Command Line Interface(AWS CLI)를 설치하고 구성합니다.
자세한 내용은 최신 버전의 AWS CLI 설치 또는 업데이트를 참조하세요.
-
다음 명령 중 하나를 실행하여 GitHub 또는 Amazon S3에서 InSpec 프로파일을 실행합니다.
명령은 다음 파라미터를 사용합니다.
-
sourceType: GitHub 또는 Amazon S3
-
sourceInfo: GitHub 또는 S3 버킷에 있는 InSpec 프로파일 폴더에 대한 URL. 이 폴더에는 기본 InSpec 파일(*.yml)과 기타 모든 관련 컨트롤(*.rb)이 있어야 합니다.
GitHub
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:
tag_name
","Values":["tag_value
"]}]' --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name
\", \"repository\":\"repository_name
\", \"path\": \"Inspec.yml_file
"}"]}'다음 예를 참고하세요
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters '{"sourceType":["GitHub"],"getOptions":"branch:master","sourceInfo":["{\"owner\":\"awslabs\", \"repository\":\"amazon-ssm\", \"path\": \"Compliance/InSpec/PortCheck\"}"]}'
Amazon S3
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:
tag_name
","Values":["tag_value
"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain
/amzn-s3-demo-bucket
/Inspec.yml_file
\"}"]}'다음 예를 참고하세요
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.
aws-api-domain
/amzn-s3-demo-bucket/InSpec/PortCheck.yml\"}"]}' -
-
다음 명령을 실행하여 규정 준수 검사에 대한 요약 정보를 봅니다.
aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
-
다음 명령을 실행하여 규정을 준수하지 않는 노드의 세부 정보를 확인합니다.
aws ssm list-compliance-items --resource-ids
node_ID
--resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks