가상 머신의 디스크를 암호화하는 방법(gcloud, cryptsetup):

가상 머신의 디스크를 암호화하는 방법(gcloud, cryptsetup):

Google 클라우드 서비스(컴퓨팅 인스턴스)는 기본적으로 디스크 저장소에 대한 암호화를 제공하며, 고객은 이 기능을 통해 자체 키를 제공할 수 있습니다.고객이 제공한 암호화(상세한여기반품).

디스크 암호화를 적용하는 방법비밀번호 설정Google에 암호화 키를 제공하지 않습니까?

답변1

Linux에서는 암호화된 디스크(luks)를 사용할 때 부팅 시 비밀번호로 잠금이 해제됩니다. 여기서 아이디어는 다음 명령을 사용하여 디스크를 암호화하는 것입니다.비밀번호 설정Google 시스템(기본적으로 암호화됨) 위에서 인스턴스에 조기 액세스하여 부팅 시 드라이브 잠금을 해제할 수 있습니다. 이는 원격 직렬 콘솔 기능을 통해 달성할 수 있습니다(이 가이드에서는 opensuse VM을 사용하므로 단계는 다른 배포판과 다르지 않습니다).

결점:

  • 디스크 속도가 10~15% 감소됩니다.
  • 시작/다시 시작 시 직렬 세션을 통해 암호화된 비밀번호를 도입해야 합니다.
  • 실패/마이그레이션 시 다시 시작하려면 자동이 아닌 경우 수동으로 비밀번호를 입력해야 할 수 있습니다.

전문적인:

  • 데이터 액세스는 실제로 고객/소유자로 제한됩니다.
  • 미사용 고객 개인 디스크 암호화.
  • 고객은 스냅샷 백업 및 이미지에 대한 개인 디스크 암호화를 보유하고 있습니다.
  • Google은 디스크의 데이터에 액세스할 수 없습니다(또는 적어도 매우 어려울 것입니다).
  • 디스크 암호화 키는 Google에 제공되지 않습니다.
  • 사용자 정의 가능한 암호화 방법, 알고리즘 및 키 크기.
  • 데이터 보호 개선 등

구현 요약:

  • 0 기존 VM 인스턴스가 있음
  • 1 인스턴스/VM 직렬 액세스 활성화
  • 2 추가(대상) 암호화 하드 디스크 생성
  • 3 현재 하드 드라이브를 암호화된 하드 드라이브에 복사합니다.
  • 4 기존 드라이브를 새 드라이브로 교체
  • 5 VM을 시작하고 직렬 콘솔을 통해 비밀번호를 입력합니다.

가상 머신의 디스크를 암호화하는 방법(gcloud, cryptsetup):

  • 전제 조건:

    • 대상 지역에 새 임시 VM을 만듭니다(대상 머신의 복사본이어야 하며 스냅샷으로 디스크를 백업한 다음 스냅샷을 새 디스크에 복원할 수 있음).
    • 새 빈 디스크를 만듭니다(나중에 암호화됨). 이는 대상 디스크입니다. 크기는 소스 디스크(새 /boot 파티션의 경우)보다 최소 256MB 이상 커야 하며, 공간을 확장하려면 더 커야 합니다.
    • 두 디스크를 임시 가상 머신에 마운트하고 시작합니다.
      Temporary VM Config:
      /dev/sda : main disk, copy of the original source disk 
      /dev/sdb : new empty disk larger than /dev/sda
      
  • 직렬 콘솔:

    • 요약:직렬 포트 연결을 활성화하고 직렬 포트(문서 1,문서 2,문서 3)
    • 아래에메타데이터serial-port-enable값 추가 TRUE(및 인스턴스 옵션에서 직렬 포트 활성화)
    • ssh직렬 포트에 /connect를 사용하세요 gcloud. 예:
      gcloud compute --project=prj-name connect-to-serial-port vm-name --zone=us-central2-b
      
  • 그럽 구성 업데이트:

    • 요약:직렬 콘솔 활성화(직렬 콘솔을 통해 grub에 액세스할 수 있도록 설정)
    • 이 콘텐츠를 다음에 추가/수정하세요./etc/default/grub
      # ...Enabling serial console... 
      GRUB_TIMEOUT=15
      GRUB_TERMINAL="serial"
      GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
      # ...End
      
    • 설정 적용grub2-mkconfig -o /boot/grub2/grub.cfg
    • 재부팅하고 직렬 콘솔에서 grub에 액세스할 수 있는지 확인하세요.
  • 대상 디스크를 포맷합니다.

    • 요약:/boot기존 시스템에 이미 별도의 파티션이 있는지 여부에 관계없이 시스템용 (암호화되지 않음)과 시스템용 /(암호화됨) 으로 구성된 2개의 파티션을 생성해야 합니다. /boot새 시스템에서는 시스템이 grub을 시작하고 비밀번호를 입력하도록 요청해야 합니다. 암호화된 파티션의 잠금을 해제합니다.
    • 빈 디스크를 포맷하고 2개의 파티션을 생성합니다. 하나는 크기가 256MB 이상(포함 /boot)이고 다른 하나는 나머지 공간을 포함합니다.fdisk /dev/sdb이렇게 하려면 256MB 이상의 첫 번째 파티션을 기본 파티션으로 생성하고 활성화합니다.부팅 가능한 플래그;그런 다음 남은 공간과 동일한 크기로 두 번째 기본 파티션을 만듭니다. (이전 시스템에서 스왑 파티션을 사용하는 경우 이 파티션도 만들어야 합니다.)
      /dev/sda :
      /dev/sdb :
            |- sdb1 : 256 MB primary and bootable (empty)
            |- sdb2 : xx GB primary (empty)
      
    • 부팅 파티션의 파일 시스템을 ext4로 설정mkfs.ext4 /dev/sdb1
    • 보안 강화를 위해 두 번째 파티션 지우기
      dd if=/dev/urandom of=/dev/sdb2 bs=4096 status=progress
      
    • sdb2암호화를 다음 으로 설정
      cryptsetup -y -v --cipher aes-xts-plain64 --key-size 256 --pbkdf-force-iterations=100200 --hash sha256 --type luks1 --label=linux --use-random luksFormat /dev/sdb2
      
      필요에 맞게 비밀번호, 키 크기, 암호화 유형 등을 변경하세요.
    • 암호화된 파티션 확인cryptsetup luksDump /dev/sdb2
    • 암호화된 파티션 잠금 해제cryptsetup luksOpen /dev/sdb2 crypteddisk
    • 암호화 매핑 파티션을 ext4로 설정mkfs.ext4 /dev/mapper/crypteddisk
    • 암호화된 파티션 끄기cryptsetup close /dev/mapper/crypteddisk
  • 소스 디스크를 복제합니다.

    • 요약:/시스템을 새로운 암호화된 파티션(sdb2)에 복사해야 합니다 /dev/mapper/crypteddisk. 이 단계에서는 다양한 도구를 사용할 수 있습니다. 이 가이드 dd에서는중요한 팁dd여기서 오류 없이 디스크를 복사 하려면 원본 파티션을 마운트 해제해야 합니다. 네가 원한다면데이터 손실 방지다른 임시 가상 머신을 생성하고 소스 및 대상 디스크를 추가 디스크로 연결하여 이 단계를 수행할 수 있습니다... 그렇지 않으면 마이그레이션 프로세스가 너무 길어지는 것을 피하기 위해 실행 중인 프로세스 대부분을 종료하고dd 소스가 있는 경우 사용합니다. 파티션을 마운트 해제한 다음(권장하지 않음) fsck소스를 마운트 해제하지 않아 발생한 오류를 수정하는 데 사용됩니다.
    • 암호화된 파티션 잠금 해제cryptsetup luksOpen /dev/sdb2 crypteddisk
    • 다음 명령을 사용하여 소스 파티션을 대상에 복사합니다( /라고 가정 /dev/sda1).
      dd if=/dev/sda1 of=/dev/mapper/crypteddisk bs=4096 status=progress
      
    • 새로운 암호화된 파티션 확인 및 복구fsck /dev/mapper/crypteddisk
    • 디스크 구조를 확인하세요 fdisk -l(암호화된 디스크 크기에 주의하지 마세요. 나중에 수정하겠습니다).
  • 파티션 UUID:

    • 모든 파티션에 대한 모든 UUID를 가져오고 해당 정보를 유지합니다.
      blkid /dev/sda 
      blkid /dev/sda1
      blkid /dev/sdb
      blkid /dev/sdb1
      blkid /dev/sdb2
      blkid /dev/mapper/crypteddisk
      
  • 디스크 크기를 조정합니다.

    • 요약:이 단계에서는 새로운 암호화된 파티션의 크기를 확장합니다.
    • 암호화된 파티션 확장
      cryptsetup resize crypteddisk -v
      e2fsck -f /dev/mapper/crypteddisk
      resize2fs /dev/mapper/crypteddisk
      
  • 백업 MBR:

    • 필수는 아니지만 유용할 수 있습니다.
      dd if=/dev/sdb of=/backup/location/sdb.mbr count=1
      dd if=/dev/sda of=/backup/location/sda.mbr count=1
      
  • 부팅 파티션을 설정합니다:

    • 새 부팅 파티션을 마운트하고 /boot내용을 복사합니다.
      mkdir /tmp/boot
      mount /dev/sdb1 /tmp/boot
      cp -a /boot/* /tmp/boot/
      ls -l /tmp/boot/*
      umount /tmp/boot
      rmdir /tmp/boot
      
    • 기존 /boot폴더 내용을 삭제하고 설치 위치로 유지하세요.
      mkdir /tmp/system
      mount /dev/mapper/crypteddisk /tmp/system
      rm -rf /tmp/system/boot/*
      ls -l /tmp/system/boot/*
      umount /tmp/system
      rmdir /tmp/system
      
  • Chroot를 실행하고 새 시스템을 설정합니다.

    • 새 암호화된 디스크를 현재 디스크(chroot)로 마운트하고 새 시스템 구성, 암호화 등을 적용하도록 설정합니다( /mnt계속하기 전에 비어 있는지도 확인하세요).

      mount /dev/mapper/crypteddisk /mnt/
      mount /dev/sdb1 /mnt/boot
      for i in sys dev proc; do mount --bind /$i /mnt/$i; done
      chroot  /mnt
      

      이제부터 우리는 새로운 시스템을 사용할 것입니다(구성 파일의 sdb는 sda로 처리되어야 함을 기억하십시오).

    • 구성을 업데이트하고 /etc/fstab(sda1 대신 sdb1 uuid를 사용해야 함) cat /etc/fstab출력은 다음과 같습니다.

      # Main Partition ----------------------
      # Entry for /dev/mapper/crypteddisk (sda2) :
      UUID=CHANGE-THIS-WITH-CRYPTEDDISK-UUID / ext4 noatime,acl 0 0
      
      # Boot Partition ----------------------
      # Entry for /dev/sda1 :
      #/dev/sda1 /boot ext4 defaults 1 2
      UUID=CHANGE-THIS-WITH-THE-CURRENT-SDB1-UUID /boot ext4 noatime,acl 1 2
      
      # Swap Partition/File -----------------
      /swap/swapfile swap swap defaults 0 0
      # 
      
    • /etc/crypttab구성을 업데이트하고 ( crypttab파일이 없는 경우 -rw-r--r--권한을 사용하여 생성) sda1 또는 crypteddisk 대신 sdb2 uuid를 사용해야 합니다. cat /etc/crypttab출력은 다음과 같습니다.

      crypteddisk UUID=CHANGE-THIS-WITH-CURRENT-SDB2-UUID
      
    • grub 구성을 업데이트하고 /etc/default/grub변경하면 됩니다 GRUB_ENABLE_CRYPTODISK. GRUB_CMDLINE_LINUX출력은 GRUB_DISABLE_OS_PROBER다음과 같습니다 cat /etc/default/grub.

      GRUB_DISTRIBUTOR=My-Custom-Server...
      # .................................... Command line
      #GRUB_CMDLINE_LINUX=" root=/dev/sda1 disk=/dev/sda resume=swap console=ttyS0,38400n8 quiet"
      GRUB_CMDLINE_LINUX=" root=/dev/mapper/crypteddisk luks_root=/dev/sda2 luks="root" disk=/dev/sda resume=swap console=ttyS0,38400n8 quiet"
      # .................................... Options
      GRUB_DEFAULT=0
      GRUB_HIDDEN_TIMEOUT=0
      GRUB_HIDDEN_TIMEOUT_QUIET=true
      GRUB_GFXMODE=800x600
      GRUB_GFXPAYLOAD_LINUX=keep
      GRUB_THEME=/boot/grub2/theme/theme.txt
      GRUB_BACKGROUND=
      # .................................... Enabling serial console... 
      GRUB_TIMEOUT=30
      GRUB_TERMINAL="serial"
      GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
      # .................................... Enabling cryptsetup
      GRUB_ENABLE_CRYPTODISK="y"
      # .................................... Ignore other os
      GRUB_DISABLE_OS_PROBER="true"
      # ....................................
      
    • 그럽 변경 사항을 적용합니다.

      grub2-mkconfig -o /boot/grub2/grub.cfg
      
    • 초기화 램 디스크를 업데이트하고 암호화 모듈을 강제로 포함합니다.

      mkinitrd -d /dev/mapper/crypteddisk -f "dm luks"
      
    • MBR을 업데이트하고 새 디스크에 grub을 다시 설치하여 부팅 가능하게 만드세요.

      grub2-install /dev/sdb
      
    • chroot를 종료하고 모든 것을 제거하십시오.

      exit
      cd /
      for i in sys dev proc; do umount /mnt/$i; done
      unmount /mnt/boot
      unmount /mnt
      

      파티션을 마운트 해제하는 동안 문제가 발생하면 -l다음 옵션을 사용하십시오.umount -l /mnt/sys

  • 마법 시전:

    • 임시 가상 머신을 종료하고 모든 디스크를 분리합니다. 암호화된 디스크를 부팅 디스크로 연결합니다.
    • 임시 가상 머신을 열고 직렬 콘솔을 사용하여 연결하세요! (부팅 시 암호화된 파티션의 잠금을 해제하려면 비밀번호를 묻는 메시지가 표시됩니다).
    • 모든 것이 제대로 작동하는지 테스트한 다음 프로덕션 가상 머신에서 새 암호화된 디스크를 사용하고 임시 복사본 디스크와 임시 가상 머신을 삭제합니다.
    • 추가 정보도 제공됩니다여기그리고여기. 즐기다;)

관련 정보