이 페이지에서는 Google 엔지니어가 보안 셸 (SSH)을 통해 Distributed Cloud 연결 영역의 노드에 액세스하고 문제를 해결할 수 있도록 Google Distributed Cloud 연결 배포에서 배스천 호스트를 구성하는 방법을 설명합니다.
Google에서는 비즈니스 요구사항에 따라 맞춤설정된 배스천 호스트 가상 머신을 빌드할 수 있는 전체 소스 코드를 제공합니다.
기본 요건
이 섹션에는 Distributed Cloud 연결 배스천 호스트 솔루션을 배포하기 위한 기본 요건이 나와 있습니다.
액세스 승인 사용 설정
배스천 호스트 기능은 액세스 투명성의 액세스 승인 기능을 사용하여 Google이 데이터에 대한 액세스를 요청하도록 합니다. 배스천 호스트 가상 머신을 배포하기 전에 Google Cloud 프로젝트에서 액세스 투명성과 액세스 승인을 사용 설정해야 합니다. 자세한 내용은 다음 페이지를 참조하세요.
가상 머신 사양
Distributed Cloud 연결 배스천 호스트 솔루션에는 다음 사양의 small 크기 OpenStack 배포와 동일한 항목이 필요합니다.
- CPU: 1 vCPU
- RAM: 2GB
- 디스크: 20GB
신뢰성을 높이기 위해 Google Cloud 리전당 N+1 배스천 호스트 가상 머신을 배포하는 것이 좋습니다.
네트워킹 요구사항
Distributed Cloud 연결 배스천 호스트 솔루션에서는 각 배스천 호스트 가상 머신에 대해 다음 네트워크 피어링 세션을 구성해야 합니다.
- Northbound 배스천 호스트 가상 머신을 인터넷에 연결합니다. 인터넷 액세스가 필요하며 Google에서 배스천 호스트 솔루션 디스크 이미지 및 소스 코드 패키지의 일부로 제공하는 특정 IP 주소에서 포트 22로의 연결을 허용해야 합니다.
- Southbound 포트 22를 통해 배스천 호스트 가상 머신을 단일 Google Cloud 리전의 해당 Distributed Cloud 연결 영역에 연결합니다.
- 관리. 작업 및 유지관리 목적으로 배스천 호스트 가상 머신을 로컬 네트워크에 연결합니다. 조직의 보안 정책에 따라 이 피어링 세션을 구성합니다.
보안 권장사항
조직의 보안 정책 외에도 Distributed Cloud 연결 배포에서 배스천 호스트 솔루션을 구성할 때는 이 섹션에 설명된 보안 권장사항을 따르는 것이 좋습니다.
- 최소 권한 규칙을 따르고 사용자의 업무를 명확하게 구분합니다.
- 관리자를 제외한 모든 사용자 계정의 경우 인증서 기반 인증만 사용하고, 비밀번호 기반 인증과 배스천 호스트 가상 머신에 대한 루트 액세스를 사용 중지합니다.
- Google에서 제공하는 지원 IP 주소 목록에 포함되지 않은 북바운드 피어링 세션의 모든 IP로부터의 액세스를 거부합니다.
- 포트 22 (SSH)를 제외한 모든 포트를 다운스트림 피어링 세션에서 닫고 Google 제공 지원 IP 주소 목록의 IP 주소에 대해서만 허용합니다.
- 모든 배스천 호스트 가상 머신을 최신 상태로 유지합니다. Google은 각 보안 패치 및 버전 업데이트와 함께 새로운 소스 코드 패키지를 제공합니다.
- 조직의 보안 정책을 모두 충족하는 알림 및 감사 솔루션을 구성합니다.
배스천 호스트 지원 사용 설정
Distributed Cloud 연결 배포에서 배스천 호스트 지원을 사용 설정하려면 요청을 제출하세요.
Distributed Cloud에 연결된 각 영역에 대해 배스천 호스트 지원을 개별적으로 사용 설정하고 구성해야 합니다. 이를 통해 각 Distributed Cloud 연결 영역에 조직의 비즈니스 요구사항에 가장 적합한 다양한 액세스 및 네트워크 구성을 배포할 수 있습니다.
배스천 호스트 소프트웨어 가져오기
배스천 호스트 소프트웨어 패키지는 Google 지원팀이 Distributed Cloud 연결 배포의 배스천 호스트 기능을 활성화한 후 전송됩니다. 패키지에는 다음이 포함됩니다.
- 소스 코드 비즈니스 요구사항에 따라 자체 배스천 호스트 가상 머신 이미지를 맞춤설정하고 빌드할 수 있습니다.
- 문서 인증서 구성과 같은 작업에 대한 추가 문서입니다.
배스천 호스트 가상 머신 이미지 빌드
이 섹션에서는 Google에서 제공하는 소스 코드에서 배스천 호스트 가상 머신 이미지를 빌드하는 데 필요한 단계를 간략하게 설명합니다. 전체 안내는 소스 코드와 함께 제공되는 README 파일에 제공됩니다.
기본 요건
배스천 호스트 가상 머신 이미지를 빌드하려면 다음 항목이 필요합니다.
- Debian 11을 실행하는 머신
- 최신 Debian 클라우드 서버 이미지
qemu-img,qemu-system-x86_x64, GNUmtools소프트웨어가 머신에 설치되어 있습니다.- 배스천 호스트 인스턴스에 로그인하고
host-user세션을 시작하기 위한 공개 SSH 키가 포함된host-user-key.pub라는 파일 이 키는 직접 인증에 사용하거나 인증 기관 서명 키로 사용할 수 있습니다. 배스천 호스트 인스턴스는 이 CA를 신뢰해야 합니다. - 타겟 배스천 호스트 인스턴스에서 관리 작업을 실행하기 위한 공개 SSH 키가 포함된
admin-user-key.pub이라는 파일 이 키는 직접 인증에 사용하거나 인증 기관 서명 키로 사용할 수 있습니다. 배스천 호스트 인스턴스는 이 CA를 신뢰해야 합니다. - Google에서 제공하는 공개 SSH 인증 기관 서명 키가 포함된
guest-user-key.pub파일로, Google 지원팀이 배스천 호스트 인스턴스에 연결할 때guest-user로 인증할 수 있습니다.
가상 머신 이미지 빌드
소스 코드와 함께 제공되는 README 파일에 제공된 안내에 따라 Google에서 제공하는 소스 코드에서 배스천 호스트 가상 머신 이미지를 빌드합니다. 이 가이드의 예에서는 결과 이미지 파일을 bastion-host.img이라고 합니다.
HIBA 패키지 빌드
다음과 같이 SSH용 호스트 ID 기반 승인(HIBA) 인증 소프트웨어 레이어의 Debian 설치 패키지를 빌드합니다.
다음 명령어를 사용하여 필요한 종속 항목을 설치합니다.
sudo apt-get install autoconf autogen build-essential git libssl-dev libtool zlib1g-dev
다음 명령어를 사용하여 설치 패키지를 빌드합니다.
./build-hiba.sh -j $(nproc) /tmp/hiba-build-workdir
설치 패키지는 /tmp/hiba-build-workdir 디렉터리에 저장되며 hiba_x.y-z_amd64.deb로 이름이 지정됩니다. 여기서 x, y, z는 HIBA 버전 번호를 나타냅니다.
cloud-init 구성 생성
generate-cloud-init.py 스크립트를 사용하여 필요한 cloud-init 구성을 생성합니다.
자체 도구를 사용하여 이러한 구성을 생성할 수도 있습니다. 이러한 구성은 다음을 실행합니다.
- 배스천 호스트 가상 머신 이미지 내에서 필요한 사용자 계정을 만들고 앞에서 설명한 SSH 키로 이러한 계정을 구성합니다.
guest-user계정의 권한을 설정된 터미널 멀티플렉서 세션에만 참여하도록 제한하는 스크립트 추가- 터미널 멀티플렉서 세션을 만들고 관리하는 스크립트를 추가합니다.
- HIBA 구성 파일을 준비합니다.
generate-cloud-init.py 스크립트에는 이전에 빌드한 HIBA 패키지와 필수 SSH 키가 포함된 세 개의 파일이 필요합니다. 다음과 같이 스크립트를 실행합니다.
./generate-cloud-init.py \ --hiba-package="${WORK_DIR}/hiba_1.0-1_amd64.deb" \ --host-user-key="HOST_USER_KEY_FILE" \ --manager-user-key="ADMIN_USER_KEY_FILE" \ --guest-user-ca="GUEST_USER_KEY_FILE" \ "${WORK_DIR}/cloud-init/"
다음을 바꿉니다.
HOST_USER_KEY_FILE:host-user-key.pub파일의 전체 경로와 이름입니다.ADMIN_USER_KEY_FILE:admin-user-key.pub파일의 전체 경로와 이름입니다.GUEST_USER_KEY_FILE:guest-user-key.pub파일의 전체 경로와 이름입니다.
스크립트는 로컬 작업 디렉터리 내의 cloud-init 디렉터리에 cloud-init.img 파일을 저장합니다.
배스천 호스트 가상 머신 이미지에 cloud-init 구성 적용
qemu-system-x86_64 도구를 사용하여 이전에 생성한 cloud-init 구성을 다음과 같이 배스천 호스트 가상 머신 이미지 파일에 적용합니다.
qemu-system-x86_64 \ -nographic \ -enable-kvm \ -smp 1 \ -m 1g \ -drive format=qcow2,index=0,file=${WORK_DIR}/bastion-host.img \ -drive format=raw,index=1,file=${WORK_DIR}/cloud-init/cloud-init.img \ -nic user,hostfwd=tcp::10022-:22
이 명령어가 오류를 반환하면 배스천 호스트 가상 머신 이미지에서 디스크 크기를 조정해야 할 수 있습니다.
가상 머신을 부팅한 후 구성이 성공적으로 적용되었는지 확인할 수 있습니다. auditd 로그에 다음과 비슷한 출력이 표시됩니다.
[ 52.659013] cloud-init[615]: Cloud-init v. 20.4.1 finished at Fri, 28 Apr 2023 18:53:55 +0000.
사용자 계정과 sshd 구성을 수동으로 검사하여 확인할 수도 있습니다.
배스천 호스트 가상 머신 이미지 가져오기
완전히 구성된 배스천 호스트 가상 머신 이미지를 배포 인프라로 가져오기 전에 다음과 같이 qemu-img 도구를 사용하여 스냅샷을 만들어야 합니다.
qemu-img snapshot -c installed bastion-image.img
조직에서 정한 절차에 따라 배스천 호스트 가상 머신 이미지를 배포 인프라로 가져옵니다.
배스천 호스트 가상 머신 구성
이 섹션의 단계에 따라 배스천 호스트 가상 머신을 구성합니다.
필요한 사용자 계정 구성
Distributed Cloud Connected의 배스천 호스트 기능에는 다음 카테고리 각각에 하나 이상의 사용자 계정이 필요합니다.
- 관리. 배스천 호스트 가상 머신의 관리자 계정입니다. 루트 액세스 권한이 있습니다.
- 호스트 사용자. 운영 엔지니어 계정입니다. Google 지원을 위한 터미널 멀티플렉서 세션을 시작하고 관리할 수 있지만 이러한 세션에 명령어를 입력할 수는 없습니다.
- 게스트 사용자. Google 지원 엔지니어 계정입니다. 배스천 호스트 가상 머신에서 운영 엔지니어와 공유하는 터미널 멀티플렉서 세션 내에서 SSH 연결을 설정할 수 있습니다. 다른 권한은 없습니다.
- 공동 사용자. 이 계정은 배스천 호스트 가상 머신에서 터미널 멀티플렉서 세션을 설정합니다. 운영 엔지니어와 Google 지원 엔지니어가 이 세션에 공동으로 연결됩니다.
인증서 구성
이전 섹션에 설명된 계정이 베스천 호스트 가상 머신에 액세스할 수 있도록 허용하는 인증서를 구성해야 합니다. 배스천 호스트 소프트웨어 패키지에는 각 계정에 필요한 계정, SSH 키, 인증서로 필요한 cloud-init 구성을 생성하는 generate-cloud-init.py이라는 스크립트가 포함되어 있습니다.
자세한 내용은 cloud-init 구성 생성을 참고하세요.
로깅 구성
배스천 호스트 로그는 audit 데몬에서 실시간으로 주문형으로 제공됩니다.
auditd.conf 파일을 통해 로깅 구성을 관리할 수 있습니다. 비즈니스 요구사항에 따라 베스천 호스트 가상 머신의 로그를 순환하고 내보내는 것은 사용자의 책임입니다. 또한 가상 머신에 저장할 충분한 디스크 공간을 유지해야 합니다.
구성 테스트
이 섹션의 단계를 완료하여 양쪽의 연결과 필요한 사용자 계정에 대한 적절한 액세스 제어를 비롯한 배스천 호스트 가상 머신 배포를 테스트합니다. 또한 Google 지원팀과 협력하여 실시간 테스트를 진행하는 것이 좋습니다.
로컬에서 배포 테스트
배스천 호스트 가상 머신에서
host-user로 SSH 세션을 설정할 수 있는지 확인합니다. 이 작업이 실패하면 SSH 키와 인증서를 확인하세요.다음 명령어를 사용하여 터미널 멀티플렉서 세션을 시작할 수 있는지 확인합니다.
./opt/create-shared-tmux-session
다음 명령어를 사용하여 Distributed Cloud 연결 배포에 배스천 호스트 가상 머신에서 연결할 수 있는지 확인합니다.
ssh -vv bastion-user@TARGET_ADDRESS
TARGET_ADDRESS를 타겟 Distributed Cloud 머신 또는 ToR 스위치의 IP 주소로 바꿉니다.요청은 SSH 인증에 의해 거부되지만 SSH 전송 및 인증 요청은 Distributed Cloud 연결 배포에 도달해야 합니다. 이 단계가 실패하면 방화벽 구성을 확인하세요.
이 가이드의 앞부분에 설명된 대로 Google Cloud 조직과 타겟 프로젝트 모두에서 액세스 투명성과 액세스 승인이 사용 설정되어 있는지 확인합니다.
Google 지원팀과 함께 실시간으로 배포 테스트하기
배스천 호스트 배포를 로컬에서 성공적으로 테스트한 후 Google 지원팀에 문의하여 라이브 테스트 세션을 예약하세요. 세션 전에 Google 지원팀에서 액세스 승인 요청을 보냅니다. 실시간 테스트 세션 중에 개발자와 Google은 다음 사항을 다룹니다.
- 액세스 승인 요청 생성 및 승인
- 배스천 호스트 배포의 엔드 투 엔드 액세스 워크플로
- 액세스 승인 및 액세스 투명성 로그
- 다음 시나리오의 문제 해결 방법:
- Google이 액세스 승인 요청에 지정되지 않은 배스천 호스트 인스턴스에 연결하려고 시도합니다.
- 터미널 멀티플렉서 세션을 시작하지 않았는데 Google에서 배스천 호스트 인스턴스에 연결하려고 합니다.
- 해당 액세스 승인 요청이 거부되거나 취소된 후 Google에서 배스천 호스트 인스턴스에 연결하려고 시도합니다.
- 터미널 멀티플렉서 세션에서 연결을 해제하거나 세션을 종료하는 경우