가져온 디스크 수동으로 구성


Compute Engine으로 가상 디스크를 수동으로 가져온 다음 Compute Engine 환경에 고유한 기능을 사용할 수 있도록 이 이미지를 최적화해야 합니다.

목차

Compute Engine 게스트 환경 설치

게스트 환경을 설치해야 Compute Engine의 주요 기능을 사용할 수 있습니다. 수동으로 게스트 환경을 설치해야 하는 경우를 알아보려면 수동으로 게스트 환경을 설치 또는 업데이트해야 하는 시기를 참조하세요.

수동으로 기존 이미지를 가져온 후에 만든 실행 중인 VM 인스턴스에 게스트 환경을 설치합니다. 설치를 수행하려면 이미지를 가져오기 전에 만든 사용자 계정으로 SSH를 통해 VM 인스턴스에 액세스하거나 대화형 직렬 콘솔을 통해 VM 인스턴스에 액세스합니다.

가져온 이미지를 Compute Engine에 맞게 구성

추가적인 변경 없이 Compute Engine에서 부팅 디스크 이미지를 실행할 수 있지만 이미지가 Compute Engine 내에서 최적으로 실행되고 모든 Compute Engine 기능에 액세스할 수 있도록 최적화할 수도 있습니다.

  • server metadata.google.internal iburst Google NTP 서버 항목만 포함하도록 ntp.conf 파일을 수정합니다.

  • 시간대를 UTC로 설정합니다.

    sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
  • 네트워크 기능의 우수한 성능을 보장하기 위해 다음과 같은 권장 네트워크 구성을 사용합니다.

    • ISC DHCP 클라이언트를 사용합니다.
    • DHCP MTU를 네트워크 MTU로 설정합니다. Compute Engine DHCP 서버는 이 매개변수를 대부분의 클라이언트에서 사용하는 interface-mtu 옵션으로 제공합니다. 네트워크 MTU에 대한 자세한 내용은 최대 전송 단위 개요를 참조하세요.
    • IPv6 주소를 구성할 계획이 없다면 IPv6을 사용 중지합니다.
    • 인스턴스에 MAC 주소가 저장되지 않도록 영구 네트워크 규칙을 삭제합니다. 예를 들면 다음과 같습니다.

      rm -f /etc/udev/rules.d/70-persistent-net.rules
    • Compute Engine 방화벽 규칙에서 지원하지 않는 특정한 요구사항이 없으면 운영체제 방화벽을 사용 중지합니다. Compute Engine은 수신 및 발신 트래픽을 위한 방화벽을 제공합니다. 방화벽에 대한 자세한 내용은 방화벽 규칙 개요를 참조하세요.

  • 네트워크 및 디스크 기능의 우수한 성능을 보장하기 위해 irqbalance 데몬을 사용 중지하거나 삭제합니다. 이 데몬은 가상 머신(VM) 인스턴스의 게스트 운영체제에 대한 IRQ 요청을 올바르게 분산시키지 못합니다. 대신 게스트 환경에 포함된 스크립트를 사용해 가상 CPU의 IRQ 설정을 올바르게 조정합니다.

  • 기본 이미지에 대한 SSH 액세스를 다음과 같이 구성합니다.

    • 루트 SSH 로그인을 사용 중지합니다.
    • 비밀번호 인증을 사용 중지합니다.
    • 호스트 기반 인증을 사용 중지합니다.
    • 엄격한 호스트 키 확인을 사용 설정합니다.
    • ServerAliveInterval을 사용하여 연결을 열린 상태로 유지합니다.
    • 다른 사용자가 이미지의 공개 또는 비공개 키에 액세스할 수 없도록 이미지에서 SSH 키를 삭제합니다. 대신 Compute Engine을 사용해 인스턴스에 대한 액세스 권한을 관리합니다.

    • /etc/ssh/ssh_config 파일을 수정하여 다음 구성을 사용합니다.

      Host *
      Protocol 2
      ForwardAgent no
      ForwardX11 no
      HostbasedAuthentication no
      StrictHostKeyChecking no
      Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
      Tunnel no
      
      # Compute Engine times out connections after 10 minutes of inactivity.
      # Keep alive ssh connections by sending a packet every 7 minutes.
      ServerAliveInterval 420
      
    • /etc/ssh/sshd_config 파일을 수정하여 다음 구성을 사용합니다.

      # Disable PasswordAuthentication because ssh keys are more secure.
      PasswordAuthentication no
      
      # Disable root login. Using sudo provides better auditing.
      PermitRootLogin no
      
      PermitTunnel no
      AllowTcpForwarding yes
      X11Forwarding no
      
      # Compute Engine times out connections after 10 minutes of inactivity.
      # Keep alive ssh connections by sending a packet every 7 minutes.
      ClientAliveInterval 420
      

Compute Engine에서 부팅 디스크를 구성하고 최적화한 후 부팅 디스크에서 이미지를 만들면 이미지를 만들 때마다 각 인스턴스를 구성할 필요 없이 완전히 최적화된 이미지 버전에서 인스턴스를 만들 수 있습니다.

보안 권장사항 구성

항상 안전한 운영체제 환경을 제공해야 하지만 보안과 액세스 가능성이 균형을 이룬 환경을 유지하기란 어려울 수 있습니다. 안전하지 않은 가상 머신은 공격에 취약하며 고가의 리소스가 소비될 수 있습니다. 따라서 다음과 같은 보안 권장사항을 준수하는 이미지를 사용하는 것이 좋습니다.

  • 기본적으로 설치되는 소프트웨어 양을 최소화합니다(예: 최소한의 OS 설치 수행).
  • 자동 업데이트를 사용 설정합니다.
  • SSH, DHCP, NTPD를 제외한 모든 네트워크 서비스는 기본적으로 사용 중지되어 있습니다. 메일 서버(예: Postfix)가 localhost로부터의 연결만 허용하는 경우 메일 서버를 실행하도록 허용할 수 있습니다.
  • sshd를 제외한 외부 리스닝 포트는 허용하면 안 됩니다.
  • denyhosts 패키지를 설치해 SSH 무작위 공격 로그인 시도를 방지합니다.
  • 기본 설치에서 불필요한 비사용자 계정을 모두 삭제합니다.
  • /etc/passwd에서 모든 비사용자 계정의 셸을 /sbin/nologin 또는 /usr/sbin/nologin으로 설정합니다(OS에서 nologin을 설치한 위치에 따라 다름).
  • /etc/shadow에서 비밀번호에 솔트 처리된 SHA512를 사용하도록 OS를 구성합니다.
  • 안전한 비밀번호를 사용하도록 pam_cracklib를 설정하고 구성합니다.
  • 3회 실패 후 계정이 5분간 잠기도록 pam_tally를 설정하고 구성합니다.
  • /etc/shadow에서 기본적으로 루트 계정이 잠기도록 구성합니다. 다음 명령어를 실행해 루트 계정을 잠급니다.

    usermod -L root
  • 다음 행을 추가하여 /etc/ssh/sshd_config에서 루트를 거부합니다.

    PermitRootLogin no
  • 실행 중인 모든 기본 네트워크 연결 서비스의 AppArmor 또는 SELinux을 만듭니다.

  • 가능하면 파일 시스템 기능을 사용해 S*ID 비트의 필요성을 없애고 보다 세밀한 제어를 제공합니다.

  • 네트워크용 소프트웨어를 컴파일할 때 컴파일러 및 런타임 악용 완화 옵션을 사용 설정합니다. 예를 들어 GCC(GNU Compiler Collection)에서 제공하는 완화 옵션과 이를 사용 설정하는 방법은 다음과 같습니다.

    • 스택 스매시 보호: -fstack-protector로 사용 설정합니다. 기본적으로 이 옵션은 스택에 할당된 버퍼가 8바이트를 초과하는 함수를 보호합니다. 버퍼가 4바이트 이상인 함수까지 보호를 강화하려면 --param=ssp-buffer-size=4를 추가합니다.
    • ASLR(Address Space Layout Randomization): 이 기능은 -fPIC -pie로 위치 독립적인 실행 파일을 만들어 사용 설정합니다.
    • Glibc 보호: 이 보호는 -D_FORTIFY_SOURCE=2로 사용 설정합니다.
    • GOT(Global Offset Table) 보호: 이 런타임 로더 기능은 -Wl,-z,relro,-z,now로 사용 설정합니다.
    • 형식 문자열 누락으로 인한 컴파일 시간 오류: -Wformat -Wformat-security -Werror=format-security
  • 커널 모듈의 로드 및 언로드를 허용하는 CAP_SYS_MODULE을 사용 중지합니다. 이 기능을 사용 중지하려면 /etc/sysctl.conf 파일을 수정하고 다음 설정을 포함합니다.

    kernel.modules_disabled = 1
  • 커널 기호 테이블을 삭제합니다.

    sudo rm /boot/System.map

다음 단계