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
가능하면 파일 시스템 기능을 사용해 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
다음 단계
- 이미지를 프로덕션에서 사용할 준비를 마쳤으면 커스텀 이미지의 최종 버전을 만들고 업데이트된 버전의 커스텀 이미지를 쉽게 관리할 수 있도록 이미지 계열에 해당 이미지를 포함합니다.
- 이미지에서 인스턴스를 시작하는 방법 알아보기