Systems Manager 규정 준수와 함께 Chef InSpec 프로파일 사용 - AWS Systems Manager

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Systems Manager 규정 준수와 함께 Chef InSpec 프로파일 사용

AWS Systems Manager 와 통합됩니다. Chef InSpec Chef InSpec는 사람이 읽을 수 있는 프로필을 생성하여 Amazon Simple Storage Service (GitHubAmazon S3) 에 저장할 수 있는 오픈 소스 테스트 프레임워크입니다. Systems Manager를 사용하여 규정 준수 스캔을 수행하고 준수 및 비준수 노드를 확인할 수 있습니다. 프로파일은 컴퓨팅 환경에 대한 보안, 규정 준수 또는 정책 요구 사항입니다. 예를 들어 AWS Systems Manager의 기능인 Compliance를 통해 노드를 스캔할 때 다음을 확인하는 프로파일을 생성할 수 있습니다.

  • 특정 포트가 열려 있는지 또는 닫혀 있는지 확인

  • 특정 애플리케이션이 실행 중인지 확인

  • 특정 패키지가 설치되었는지 확인

  • 특정 속성에 대한 Windows 레지스트리 키 확인

Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스와 Systems Manager로 관리하는 온프레미스 서버 또는 가상 머신 (VM) 에 대한 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 DSL (InSpec 도메인별 언어) 을 사용하여 Ruby에서 이러한 컨트롤을 작성합니다. 대규모 사용자 커뮤니티에서 만든 프로필을 사용할 수도 있습니다. InSpec 예를 들어, 의 DevSec chef-os-hardeningGitHub프로젝트에는 노드를 보호하는 데 도움이 되는 수십 개의 프로필이 포함되어 있습니다. GitHub또는 Amazon S3에서 프로필을 작성하고 저장할 수 있습니다.

작동 방식

규정 준수와 함께 InSpec 프로필을 사용하는 프로세스의 작동 방식은 다음과 같습니다.

  1. 사용할 미리 정의된 InSpec 프로필을 식별하거나 직접 만들 수 있습니다. 에서 미리 정의된 프로필을 GitHub 사용하여 시작할 수 있습니다. 자체 InSpec 프로필을 만드는 방법에 대한 자세한 내용은 Chef Chef InSpec 프로필을 참조하세요.

  2. 프로필을 공개 또는 비공개 GitHub 리포지토리 또는 S3 버킷에 저장합니다.

  3. Systems Manager 문서 (SSM 문서) AWS-RunInspecChecks 를 사용하여 InSpec 프로파일에 대한 규정 준수를 실행하십시오. 온디맨드 검사의 경우 의 AWS Systems Manager기능을 사용하여 Run Command 규정 준수 검사를 시작하거나, 의 기능을 사용하여 State Manager 정기적인 규정 준수 검사를 예약할 수 있습니다. AWS Systems Manager

  4. 규정 준수 API 또는 규정 준수 콘솔을 사용하여 비준수 노드를 식별합니다.

참고

다음 정보를 참고하세요.

  • Chef노드의 클라이언트를 사용하여 프로필을 처리합니다. 클라이언트를 설치할 필요가 없습니다. Systems Manager가 SSM 문서 AWS-RunInspecChecks를 실행할 때 시스템에서 클라이언트가 설치되었는지 확인합니다. 그렇지 않은 경우 Systems Manager는 검색 중에 Chef 클라이언트를 설치한 다음 검사가 완료된 후 클라이언트를 제거합니다.

  • 이 주제에 설명된 대로 SSM 문서 AWS-RunInspecChecks를 실행하면 각 대상 노드에 Custom:Inspec 유형의 규정 준수 항목이 할당됩니다. 이 규정 준수 유형을 할당하기 위해 문서에서는 API 작업을 호출합니다. PutComplianceItems

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 규정 준수 검사를 실행하려면
  1. https://console.aws.amazon.com/systems-manager/ 에서 AWS Systems Manager 콘솔을 엽니다.

  2. 탐색 창에서 State Manager를 선택합니다.

    -또는-

    AWS Systems Manager 홈 페이지가 먼저 열리면 메뉴 아이콘 ( 
    The menu icon
  ) 을 선택하여 탐색 창을 연 다음 선택하십시오 State Manager.

  3. 연결 생성을 선택합니다.

  4. 연결 세부 정보 제공 섹션에 이름을 입력합니다.

  5. [문서(Document)] 목록에서 AWS-RunInspecChecks를 선택합니다.

  6. 문서 버전 목록에서 실행 시간 시 최신 버전을 선택합니다.

  7. 매개 변수 섹션의 소스 유형 목록에서 둘 중 하나 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가 Amazon GitHub S3와 통합되는 방법에 대한 자세한 내용은 을 참조하십시오GitHub에서 스크립트 실행.

  8. Targets(대상) 섹션에서, 태그를 지정하거나, 수동으로 인스턴스나 엣지 디바이스를 선택하거나, 리소스 그룹을 지정하여 이 작업을 실행할 관리형 노드를 식별합니다.

    작은 정보

    예상한 관리형 노드가 목록에 없으면 관리형 노드 가용성 문제 해결에서 문제 해결 팁을 참조하세요.

  9. [일정 지정(Specify schedule)] 섹션에서 일정 작성기 옵션을 사용하여 Compliance 검사를 실행할 때를 지정하는 일정을 생성합니다.

  10. Rate control(속도 제어)에서

    • Concurrency(동시성)에서 명령을 동시에 실행할 관리형 노드의 백분율 또는 개수를 지정합니다.

      참고

      관리형 노드에 적용할 태그를 지정하거나, AWS 리소스 그룹을 지정하여 대상을 선택하였지만 대상으로 지정할 관리형 노드 수를 잘 모를 경우에는 백분율을 지정하여 동시에 문서를 실행할 수 있는 대상 수를 제한합니다.

    • Error threshold(오류 임계값)에서, 명령이 노드의 개수 또는 백분율에서 실패한 후 다른 관리형 노드에서 해당 명령의 실행을 중지할 시간을 지정합니다. 예를 들어 세 오류를 지정하면 네 번째 오류를 받았을 때 Systems Manager가 명령 전송을 중지합니다. 여전히 명령을 처리 중인 관리형 노드도 오류를 전송할 수 있습니다.

  11. (선택 사항) Output options(출력 옵션)에서 명령 출력을 파일에 저장하려면 Write command output to an S3 bucket(S3 버킷에 명령 출력 쓰기) 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.

    참고

    데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아니라 인스턴스에 할당된 인스턴스 프로파일(EC2 인스턴스용) 또는 IAM 서비스 역할(하이브리드 정품 인증 시스템)의 권한입니다. 자세한 내용은 Systems Manager에 대한 인스턴스 권한 구성 또는 하이브리드 환경을 위한 IAM 서비스 역할 생성을 참조하세요. 또한 지정된 S3 버킷이 다른 버킷에 있는 경우 AWS 계정, 관리형 노드와 연결된 인스턴스 프로필 또는 IAM 서비스 역할에 해당 버킷에 쓰는 데 필요한 권한이 있는지 확인하십시오.

  12. 연결 생성을 선택합니다. 시스템에서 연결을 생성하고 규정 준수 검사를 자동으로 실행합니다.

  13. 검사가 완료될 때까지 몇 분 정도 기다린 후 탐색 창에서 규정 준수를 선택합니다.

  14. 해당 관리형 인스턴스에서 Compliance Type 열이 Custom:Inspec인 노드를 찾습니다.

  15. 노드 ID를 선택하여 비준수 상태 정보를 봅니다.

Run Command()AWS CLI를 사용하여 InSpec 규정 준수 스캔 실행

  1. 아직 설치하지 않았다면 AWS Command Line Interface (AWS CLI) 를 설치하고 구성하십시오.

    자세한 내용은 최신 버전의 AWS CLI설치 또는 업데이트를 참조하세요.

  2. 다음 명령 중 하나를 실행하여 둘 중 하나 GitHub 또는 Amazon S3에서 InSpec 프로필을 실행합니다.

    명령은 다음 파라미터를 사용합니다.

    • 소스 유형GitHub: 또는 Amazon S3

    • SourceInfo: 버킷 또는 S3 InSpec 버킷에 GitHub 있는 프로필 폴더의 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/DOC-EXAMPLE-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/DOC-EXAMPLE-BUCKET/InSpec/PortCheck.yml\"}"]}'
  3. 다음 명령을 실행하여 규정 준수 검사에 대한 요약 정보를 봅니다.

    aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
  4. 다음 명령을 실행하여 규정을 준수하지 않는 노드의 세부 정보를 확인합니다.

    aws ssm list-compliance-items --resource-ids node_ID --resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks