Starter Kit를 사용하여 Chef 서버 구성 - AWS OpsWorks

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

Starter Kit를 사용하여 Chef 서버 구성

중요

AWS OpsWorks for Chef Automate는 2024년 5월 5일에 수명이 종료되었으며 신규 및 기존 고객 모두 사용할 수 없게 되었습니다. 기존 고객은 Chef SaaS 또는 대체 솔루션으로 마이그레이션하는 것이 좋습니다. 질문이 있는 경우 AWS re:Post 또는 Premium AWS Support를 통해 AWS Support 팀에 문의할 수 있습니다.

Chef 서버 생성이 아직 진행 중인 동안 AWS OpsWorks for Chef Automate 콘솔에서 Properties 페이지를 엽니다. 새 Chef 서버로 처음 작업할 때는 필요한 2가지 항목을 다운로드하라는 메시지가 Properties 페이지에 표시됩니다. Chef 서버가 온라인 상태가 되기 전에 이 항목을 다운로드하세요. 새 서버가 온라인 상태가 된 후에는 다운로드 버튼을 사용할 수 없습니다.

AWS OpsWorks for Chef Automate 새 서버 속성 페이지
  • Chef 서버의 자격 증명으로 로그인. 이 자격 증명을 사용하여 워크플로 및 규정 준수 스캔과 같은 Chef Automate 프리미엄 기능을 사용하는 Chef Automate 대시보드에 로그인합니다. AWS OpsWorks 는 이러한 자격 증명을 저장하지 않습니다. 자격 증명을 보고 다운로드할 수 있는 것은 이번이 마지막입니다. 필요할 경우, 로그인 후 이 자격 증명과 함께 제공되는 암호를 변경할 수 있습니다.

  • 스타터 키트. 스타터 키트에는 예제가 있는 README 파일, knife.rb 구성 파일, 주 사용자 또는 중심 사용자용 프라이빗 키가 포함되어 있습니다. Starter Kit를 다운로드할 때마다 새 키 페어가 생성되고 예전 키가 리셋됩니다.

Starter Kit .zip 파일에는 새 서버에서만 작동하는 자격 증명 외에도 모든 AWS OpsWorks for Chef Automate 서버에서 작동하는 Chef 저장소의 간단한 예가 포함되어 있습니다. Chef 리포지토리에 쿡북, 역할, 구성 파일 및 Chef로 노드를 관리하기 위한 그 밖의 아티팩트를 저장할 수 있습니다. 이 리포지토리는 Git 같은 버전 제어 시스템에 저장하고 소스 코드로 취급하는 것이 좋습니다. Git에서 추적되는 Chef 리포지토리 설정 방법에 대한 내용과 예제는 Chef 설명서의 chef-repo에 대하여를 참조하세요.

사전 조건 

  1. 서버 생성이 계속 진행 중이면 Chef 서버에 대한 로그인 자격 증명을 다운로드해 안전하고 편리한 위치에 저장합니다.

  2. 스타터 키트를 다운로드하고 작업 영역 디렉터리에 스타터 키트 .zip 파일의 압축을 풉니다. 스타터 키트의 프라이빗 키는 공유하지 마십시오. 다른 사용자가 Chef 서버를 관리하는 경우, 나중에 Chef Automate 대시보드에서 이러한 사용자를 관리자로 추가합니다.

  3. Chef 서버와 노드를 관리하는 데 사용할 컴퓨터에 Chef Workstation(이전에는 Chef Development Kit 또는 Chef DK로 알려짐)을 다운로드하여 설치합니다. 이 knife 유틸리티는 Chef Workstation의 일부입니다. Chef 웹 사이트에서 Chef Workstation 설치 지침 단원을 참조하세요.

스타터 키트 콘텐츠 탐색

스타터 키트에는 다음과 같은 콘텐츠가 있습니다.

  • cookbooks/ - 생성하는 쿡북의 디렉터리. cookbooks/폴더에는 Chef Supermarket 웹 사이트의 nginx 쿡북에 따라 달라지는 래퍼 쿡북인 opsworks-webserver 쿡북이 들어 있습니다. cookbooks/ 디렉토리에서 쿡북 종속성을 사용할 수 없는 경우 Policyfile.rb은 기본적으로 Chef 슈퍼마켓을 보조 소스로 사용합니다.

  • Policyfile.rb - 노드에 대한 정책이 되는 쿡북, 종속성 및 속성을 정의하는 Ruby 기반 정책 파일.

  • userdata.shuserdata.ps1 - Chef Automate 서버를 시작한 후 사용자 데이터 파일을 사용하여 노드를 자동으로 연결할 수 있습니다. userdata.sh는 Linux기반 노드 부트스트래핑용이고 userdata.ps1은 Windows 기반 노드용입니다.

  • Berksfile - Berkshelf 및 berks 명령을 사용하여 쿡북과 쿡북의 종속성을 업로드하려는 경우 이 파일을 사용할 수 있습니다. 이 연습에서는 Policyfile.rb 및 Chef 명령을 사용하여 쿡북, 종속성 및 속성을 업로드합니다.

  • README.md, 스타터 키트를 사용하여 Chef Automate 서버를 처음으로 설정하는 방법을 설명하는 Markdown 기반 파일입니다.

  • .chef는 knife 구성 파일(knife.rb)과 보안 인증 키 파일(.pem)이 포함된 숨은 디렉터리입니다.

    • .chef/knife.rb - knife 구성 파일(knife.rb). knife.rb파일은 Chef의 knife도구 작업이 AWS OpsWorks for Chef Automate 서버에서 실행되도록 구성됩니다.

    • .chef/ca_certs/opsworks-cm-ca-2020-root.pem - AWS OpsWorks가 제공하는, 인증 기관(CA)이 서명한 SSL 프라이빗 키. 이 키를 사용하여 서버는 서버가 관리하는 노드의 Chef Infra 클라이언트 에이전트에게 인증할 수 있습니다.

Chef 리포지토리 설정

Chef 리포지토리에는 몇 개의 디렉터리가 포함되어 있습니다. Starter Kit의 모든 디렉터리에는 디렉터리의 용도와 Chef를 통한 시스템 관리에 디렉터리를 사용하는 방법을 설명하는 README 파일이 포함되어 있습니다. 다음 두 가지 방법으로 Chef 서버에 쿡북을 설치할 수 있습니다. knife 명령을 실행하거나, Chef 명령을 실행하여 지정된 쿡북을 다운로드하고 설치하는 정책 파일(Policyfile.rb)을 서버에 업로드하는 것입니다. 이 안내서에서는 Chef 명령과 Policyfile.rb를 사용하여 쿡북을 서버에 설치합니다.

  1. 로컬 컴퓨터에 쿡북을 저장할 디렉터리를 만듭니다(예: chef-repo). 쿡북, 역할 및 기타 파일을 이 리포지토리에 추가한 후에는 CodeCommit Git 또는 Amazon S3와 같은 버전이 지정된 안전한 시스템에 업로드하거나 저장하는 것이 좋습니다.

  2. chef-repo 디렉터리에서 다음 디렉터리를 생성합니다.

    • cookbooks/ - 쿡북을 저장합니다.

    • roles/ - .rb 또는 .json 형식으로 역할을 저장합니다.

    • environments/ - .rb 또는 .json 형식으로 환경을 저장합니다.

Policyfile.rb를 사용하여 원격 소스에서 쿡북 가져오기

이 단원에서는 Policyfile.rb를 편집하여 쿡북을 지정한 다음, Chef 명령을 실행하여 파일을 서버에 업로드하고 쿡북을 설치합니다.

  1. 스타터 키트에서 Policyfile.rb를 봅니다. 기본적으로, Policyfile.rb에는 opsworks-webserver 래퍼 쿡북이 포함되며, 이 쿡북은 Chef Supermarket 웹 사이트에서 사용할 수 있는 nginx 쿡북에 의존합니다. nginx 쿡북은 관리형 노드에서 웹 서버를 설치하고 구성합니다. 관리형 노드에 Chef Infra 클라이언트 에이전트를 설치하는 필수 chef-client 쿡북도 지정됩니다.

    또한 Policyfile.rb는 노드에서 규정 준수 검사를 설정하는 데 사용할 수 있는 선택적 Chef Audit 쿡북을 가리킵니다. 규정 준수 검사를 설정하고 관리형 노드의 규정 준수 결과를 가져오는 방법에 대한 자세한 내용은 컴플라이언스 스캔 입력 AWS OpsWorks for Chef Automate 단원을 참조하세요. 규정 준수 검사 및 감사를 지금 바로 구성하지 않으려는 경우 'audit'run_list 섹션에서 삭제하고, 파일 끝에서 audit 쿡북 속성을 지정하지 마십시오.

    # Policyfile.rb - Describe how you want Chef to build your system. # # For more information about the Policyfile feature, visit # https://docs.chef.io/policyfile.html # A name that describes what the system you're building with Chef does. name 'opsworks-demo-webserver' # The cookbooks directory is the preferred source for external cookbooks default_source :chef_repo, "cookbooks/" do |s| s.preferred_for "nginx", "windows", "chef-client", "yum-epel", "seven_zip", "build-essential", "mingw", "ohai", "audit", "logrotate", "cron" end # Alternative source default_source :supermarket # run_list: chef-client runs these recipes in the order specified. run_list 'chef-client', 'opsworks-webserver', 'audit' # add 'ssh-hardening' to your runlist to fix compliance issues detected by the ssh-baseline profile # Specify a custom source for a single cookbook: cookbook 'opsworks-webserver', path: 'cookbooks/opsworks-webserver' # Policyfile defined attributes # Define audit cookbook attributes default["opsworks-demo"]["audit"]["reporter"] = "chef-server-automate" default["opsworks-demo"]["audit"]["profiles"] = [ { "name": "DevSec SSH Baseline", "compliance": "admin/ssh-baseline" } ]

    다음은 nginx 웹 서버만 지금 구성하려는 경우 audit 쿡북과 속성이 없는 Policyfile.rb의 예제입니다.

    # Policyfile.rb - Describe how you want Chef to build your system. # # For more information on the Policyfile feature, visit # https://docs.chef.io/policyfile.html # A name that describes what the system you're building with Chef does. name 'opsworks-demo-webserver' # Where to find external cookbooks: default_source :supermarket # run_list: chef-client will run these recipes in the order specified. run_list 'chef-client', 'opsworks-webserver' # Specify a custom source for a single cookbook: cookbook 'opsworks-webserver', path: 'cookbooks/opsworks-webserver'

    Policyfile.rb를 변경하는 경우 파일을 저장해야 합니다.

  2. Policyfile.rb에 정의된 쿡북을 다운로드하고 설치합니다.

    chef install

    모든 쿡북은 쿡북의 metadata.rb 파일에 버전이 지정되어 있습니다. 쿡북을 변경할 때마다 쿡북의 metadata.rb에 있는 쿡북 버전을 올려야 합니다.

  3. 규정 준수 검사를 구성하도록 선택하고 audit 쿡북 정보를 정책 파일에 보관한 경우 정책 opsworks-demo를 서버에 푸시합니다.

    chef push opsworks-demo
  4. 3단계를 완료한 경우 정책 설치를 확인합니다. 다음 명령을 실행합니다.

    chef show-policy

    결과는 다음과 비슷해야 합니다.

    opsworks-demo-webserver ======================= * opsworks-demo: ec0fe46314
  5. 이제 노드를 Chef Automate 서버에 추가하고 부트스트래핑할 준비가 되었습니다. 노드를 자동으로 추가합니다. AWS OpsWorks for Chef Automate의 단계를 수행하여 노드 연결을 자동화하거나, 노드를 개별적으로 추가의 단계를 수행하여 한 번에 한 개의 노드를 추가할 수 있습니다.

(대체 방법) Berkshelf를 사용하여 원격 소스에서 쿡북 가져오기

Berkshelf는 쿡북과 쿡북의 종속성을 관리하기 위한 도구입니다. Policyfile.rb 대신 Berkshelf를 사용하여 쿡북을 로컬 스토리지에 설치하려는 경우 이전 단원 대신 이 단원의 절차를 사용하세요. Chef 서버에 사용할 쿡북과 버전을 지정하고 업로드할 수 있습니다. 스타터 키트에는 쿡북을 나열하는 데 사용할 수 있는 Berksfile이라는 파일이 포함되어 있습니다.

  1. 시작하려면 chef-client 쿡북을 포함된 Berksfile에 추가합니다. chef-client 쿡북은 Chef Automate 서버에 연결하는 각 노드에서 Chef Infra 클라이언트 에이전트 소프트웨어를 구성합니다. 이 쿡북에 대해 자세히 알아보려면 Chef Supermarket에서 Chef Client Cookbook 단원을 참조하세요.

  2. 텍스트 편집기를 사용하여 웹 서버 애플리케이션을 설치하는 다른 쿡북을 Berksfile에 추가합니다(예: Apache 웹 서버를 설치하는 apache2 쿡북). Berksfile은 다음과 유사합니다.

    source 'https://supermarket.chef.io' cookbook 'chef-client' cookbook 'apache2'
  3. 로컬 컴퓨터에 쿡북을 다운로드하고 설치합니다.

    berks install
  4. Chef 서버에 쿡북을 업로드합니다.

    Linux에서 다음 명령을 실행합니다.

    SSL_CERT_FILE='.chef/ca_certs/opsworks-cm-ca-2020-root.pem' berks upload

    Windows에서는 세션에서 다음 Chef 워크스테이션 명령을 실행합니다. PowerShell 명령을 실행하기 전에 실행 정책을 로 PowerShell 설정해야 RemoteSigned 합니다. Chef Workstation 유틸리티 명령을 사용할 수 있도록 chef shell-init 하려면 PowerShell 추가하십시오.

    $env:SSL_CERT_FILE="ca_certs\opsworks-cm-ca-2020-root.pem" chef shell-init berks upload Remove-Item Env:\SSL_CERT_FILE
  5. Chef Automate 서버에서 현재 사용할 수 있는 쿡북 목록을 표시하여 쿡북이 설치되었는지 확인합니다. 다음 knife 명령을 실행하여 이 작업을 수행할 수 있습니다.

    이제 AWS OpsWorks for Chef Automate 서버로 관리할 노드를 추가할 준비가 되었습니다.

    knife cookbook list

(선택 사항) 사용자 지정 도메인을 사용하도록 knife 구성

Chef Automate 서버에서 사용자 지정 도메인을 사용하는 경우 서버의 인증서 체인을 서명한 루트 CA의 PEM 인증서 또는 인증서가 자체 서명된 경우 서버 PEM 인증서를 추가해야 할 수 있습니다. ca_certs는 Chef knife 유틸리티에서 신뢰할 수 있는 CA(인증 기관)가 포함된 chef/의 하위 디렉토리입니다.

사용자 지정 도메인을 사용하지 않거나 운영 체제에서 신뢰할 수 있는 루트 CA에서 사용자 지정 인증서가 서명된 경우 이 섹션을 건너뛸 수 있습니다. 그렇지 않은 경우 다음 단계에서 설명한 것과 같이 Chef Automate 서버 SSL 인증서를 신뢰하도록 knife를 구성합니다.

  1. 다음 명령을 실행합니다.

    knife ssl check

    결과가 다음과 유사한 경우 이 절차의 나머지 부분을 건너뛰고 다음으로 이동합니다. Chef 서버가 관리할 노드 추가.

    Connecting to host my-chef-automate-server.my-corp.com:443 Successfully verified certificates from 'my-chef-automate-server.my-corp.com'

    다음과 유사한 오류 메시지가 나타나면 다음 단계로 이동하세요.

    Connecting to host my-chef-automate-server.my-corp.com:443 ERROR: The SSL certificate of my-chef-automate-server.my-corp.com could not be verified. ...
  2. knife ssl fetch를 실행하여 AWS OpsWorks for Chef Automate 서버의 인증서를 신뢰합니다. 또는 서버의 루트 CA PEM 형식 인증서를 knife ssl check의 출력에서 trusted_certs_dir 값인 디렉토리로 수동 복사할 수 있습니다. 기본적으로 이 디렉토리는 스타터 키트의 .chef/ca_certs/에 있습니다. 출력은 다음과 같을 것입니다.

    WARNING: Certificates from my-chef-automate-server.my-corp.com will be fetched and placed in your trusted_cert directory (/Users/username/starterkit/.chef/../.chef/ca_certs). Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading. Adding certificate for my-chef-automate-server in /Users/users/starterkit/.chef/../.chef/ca_certs/servv-aqtswxu20swzkjgz.crt Adding certificate for MyCorp_Root_CA in /Users/users/starterkit/.chef/../.chef/ca_certs/MyCorp_Root_CA.crt
  3. knife ssl check를 다시 실행합니다. 출력은 다음과 같을 것입니다.

    Connecting to host my-chef-automate-server.my-corp.com:443 Successfully verified certificates from 'my-chef-automate-server.my-corp.com'

    Chef Automate 서버에 knife를 사용할 준비가 되었습니다.