Compute Engine에서 IAP 설정


이 가이드는 IAP(Identity-Aware Proxy)를 사용하여 Compute Engine 인스턴스를 설정하는 방법을 설명합니다. Compute Engine 인스턴스가 이미 설정되어 있고 IAP만 사용 설정해야 하는 경우 Compute Engine에 IAP 사용 설정을 참조하세요.

목표

이 가이드에서는 다음 방법을 배웁니다.

  • Compute Engine 인스턴스 템플릿과 MIG(관리형 인스턴스 그룹)를 만듭니다.
  • 도메인 이름 및 인증서를 가져옵니다.
  • 인증서로 HTTPS 부하 분산기를 만듭니다.
  • IAP를 사용 설정합니다.
  • IAP가 작동하는지 테스트합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • Compute Engine
    • 4개의 VM(가상 머신)
  • 네트워킹
    • 전역 부하 분산기 전달 규칙
    • 인그레스 트래픽

예상 사용량을 기준으로 비용을 예측하려면 이 가격 계산기를 참조하세요.

Cloud Platform 신규 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

이 가이드를 시작하려면 먼저 다음이 필요합니다.

  1. Google Cloud 프로젝트를 선택하거나 만듭니다.
    프로젝트 페이지로 이동

  2. 프로젝트에 결제를 사용 설정합니다. 프로젝트 결제 설정 수정 방법을 알아보세요.

1단계: Compute Engine 템플릿 만들기

Google Cloud 콘솔에서 Compute Engine > 인스턴스 템플릿 만들기 페이지로 이동하여 템플릿을 만들 프로젝트를 선택합니다.

인스턴스 템플릿 만들기 페이지로 이동

다음을 제외하고 기본값을 사용합니다.

  • 머신 유형:
    • micro(f1-micro)
  • 액세스 범위:
    • 각 API에 액세스 설정
    • Compute Engine: 읽기 전용
  • 방화벽:
    • HTTP 트래픽 허용
  • 관리 섹션의 자동화 > 시작 스크립트 아래에서 다음 스크립트를 복사하고 붙여넣습니다.
    # Copyright 2021 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    apt-get -y update
    apt-get -y install git
    apt-get -y install virtualenv
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples
    cd python-docs-samples/iap
    virtualenv venv -p python3
    source venv/bin/activate
    pip install -r requirements.txt
    cat example_gce_backend.py |
      sed -e "s/YOUR_BACKEND_SERVICE_ID/$(gcloud compute backend-services describe my-backend-service --global --format="value(id)")/g" |
      sed -e "s/YOUR_PROJECT_ID/$(gcloud config get-value account | tr -cd "[0-9]")/g" > real_backend.py
    gunicorn real_backend:app -b 0.0.0.0:80
    

값 업데이트를 마쳤으면 만들기를 클릭하여 템플릿을 만듭니다.

2단계: 관리형 인스턴스 그룹 만들기

Google Cloud 콘솔에서 Compute Engine > 새 인스턴스 그룹 만들기 페이지로 이동하여 관리형 인스턴스 그룹을 만들 프로젝트를 선택합니다.

인스턴스 그룹 만들기 페이지로 이동

다음을 제외하고 기본값을 사용합니다.

  • 이름: my-managed-instance-group
  • 위치: 다중 영역
  • 인스턴스 템플릿: 1단계에서 만든 인스턴스 템플릿을 선택합니다.
  • 인스턴스 수: 인스턴스 수를 변경하려면 먼저 자동 확장을 해제해야 합니다.
  • 자동 확장 모드: 자동 확장 안함
  • 상태 확인: 상태 확인 생성을 선택한 후 다음 값을 입력합니다.

    • 이름: my-health-check
    • 프로토콜: HTTP

    저장 후 계속을 클릭하여 새 상태 확인을 사용하세요.

값 업데이트를 마쳤으면 만들기를 클릭하여 MIG(관리형 인스턴스 그룹)를 만듭니다.

3단계: 도메인 이름 및 인증서 가져오기

HTTPS 트래픽에 부하 분산기를 사용하려면 도메인 이름 및 서명된 인증서가 필요합니다. Google Domains에서 도메인을 등록하거나 원하는 도메인 등록기관을 사용할 수 있습니다. 이 가이드를 계속하기 전에 도메인을 등록하세요.

인증서 설정

사용자에게 웹사이트를 식별하는 인증서를 만듭니다. 인증서를 만드는 방법에 대한 자세한 내용은 Google 관리형 SSL 인증서 사용을 참조하세요.

CA는 개발자가 등록한 도메인 이름을 개발자가 소유하고 있는지 확인해야 합니다. 아래 단계에서는 CA에서 개발자의 도메인을 인증하기 위해 VM을 만듭니다.

도메인 소유권 인증을 위해 VM 만들기

Google Cloud 콘솔에서 Compute Engine > 인스턴스 만들기 페이지로 이동합니다.

인스턴스 만들기 페이지로 이동

다음을 제외하고 기본값을 사용합니다.

  • 이름: certbot-vm
  • 머신 유형: micro(f1-micro)
  • 액세스 범위:
    • 각 API에 액세스 설정
    • Compute Engine: 읽기/쓰기
  • 부팅 디스크 이미지:
    • Debian GNU/Linux 9(스트레치)
  • 방화벽:
    • HTTP 트래픽 허용
    • HTTPS 트래픽 허용

값 업데이트를 마쳤으면 만들기를 클릭하여 VM 인스턴스를 만듭니다. 바로 전에 만든 VM의 외부 IP 주소를 기록해둡니다. 다음 단계에 필요합니다.

VM을 가리키도록 도메인 설정

VM을 가리키도록 도메인을 설정하려면 아래 단계에 따라 A 레코드를 구성합니다.

  1. 도메인 호스트에서 도메인 계정에 로그인합니다.
  2. 도메인의 DNS 레코드를 업데이트하기 위한 페이지를 찾습니다. 이 페이지는 'DNS 관리, '이름 서버 관리' 또는 '고급 설정'과 같은 다른 이름으로 불릴 수 있습니다.
  3. A 레코드를 다음 값으로 변경합니다.
    • 이름/호스트/별칭: @
    • 값: 개발자가 위에서 도메인 소유권을 인증하기 위해 만든 VM의 외부 IP 주소입니다.
    • TTL: 등록 기관의 기본값 또는 86400(1일)입니다.
  4. DNS 레코드가 업데이트될 때까지 기다립니다. 추가한 레코드가 전파되려면 최대 1일까지 걸릴 수 있습니다.

자세한 내용은 A 레코드 정보를 참조하세요.

서버 테스트

서버가 올바르게 작동하는지 테스트하려면 아래 단계를 따르세요.

  1. Google Cloud 콘솔에서 Compute Engine > VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동

  2. certbot-vm연결에서 SSH를 클릭하세요.

  3. 다음 명령어를 실행하여 VM에서 작은 웹 서버를 실행합니다.

      mkdir web
      cd web
      echo "Hello" > index.html
      sudo busybox httpd -v -f
    
  4. 웹 브라우저에서 이전에 등록한 도메인 이름으로 이동합니다. 웹 브라우저에 Hello가 표시되고 SSH 세션에 ... response:200이 포함된 메시지가 표시됩니다. 그렇지 않으면, 몇 분 정도 기다린 후 이 단계를 반복합니다.

  5. 테스트가 성공한 후에는 Ctrl+C를 눌러서 웹 서버를 중지합니다.

인증서 만들기

인증서를 만들려면 VM에서 다음 명령어를 실행하여 Let's Encrypt에 등록합니다. 여기서 YOUR_DOMAIN은 프로토콜을 포함하지 않은 개발자의 도메인 이름입니다.

sudo pkill busybox
sudo apt-get install -y certbot
sudo certbot certonly --standalone -d YOUR-DOMAIN

이러한 과정 중 Let's Encrypt는 인증서가 만료될 때(기본적으로 발급 후 3개월) 미리 알림을 전송할 수 있도록 이메일 주소를 요청할 수 있습니다. 또한 Let's Encrypt에서 설정된 서비스 약관에 동의해야 합니다.

성공적으로 등록한 후에는 Congratulations! Your certificate and chain have been saved at...과 같은 메시지가 표시됩니다.

프로젝트에 인증서 추가

프로젝트에 인증서를 추가하려면 VM에서 다음 명령어를 실행합니다.

sudo su
cd /etc/letsencrypt/live/YOUR_DOMAIN
gcloud compute ssl-certificates create my-cert --certificate=fullchain.pem --private-key=privkey.pem

인증서를 성공적으로 만들면 다음과 비슷한 메시지가 표시됩니다. Created [https://www.googleapis.com/compute/v1/projects/example-project/global/sslCertificates/my-cert]

계속하기 전에 SSH 세션을 닫으세요.

4단계: 부하 분산기 만들기

이 단계를 시작하려면 먼저 이전 단계에서 시작한 SSH 세션이 닫혔는지 확인합니다. 준비되었으면 아래 단계에 따라 부하 분산기를 만듭니다.

  1. Google Cloud 콘솔에서 네트워크 서비스 > 부하 분산기 만들기 페이지로 이동하여 부하 분산기를 만들 프로젝트를 선택합니다.
    부하 분산기 만들기 페이지로 이동

  2. HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.

  3. 인터넷에서 내 VM으로를 선택합니다.

  4. 표시된 새 외부 애플리케이션 부하 분산기 페이지에서 부하 분산기의 이름을 입력합니다.

  5. 백엔드 구성을 클릭한 후 백엔드 서비스 > 백엔드 서비스 만들기를 선택합니다.

  6. 백엔드 서비스 만들기 패널의 이름 상자에 my-backend-service를 입력하세요.

  7. 새 백엔드 아래에서 다음을 제외하고 기본값을 사용합니다.

    • 인스턴스 그룹: my-managed-instance-group
  8. 상태 확인 아래에서 my-health-check를 선택합니다.

  9. 값 업데이트를 마쳤으면 만들기를 클릭합니다. 새 HTTP(S) 부하 분산기 패널이 다시 표시됩니다.

  10. 호스트 및 경로 규칙을 클릭하여 기본값을 로드합니다. 규칙을 추가할 필요는 없습니다.

  11. 프런트엔드 구성을 클릭합니다. 다음을 제외하고 기본값을 사용합니다.

    • 프로토콜: HTTPS
    • IP 주소: IP 주소 만들기를 클릭합니다.
      • 새 정적 IP 주소와 연결할 이름을 입력합니다.
      • 정적 IP 주소를 예약하려면 예약을 클릭합니다.
    • 인증서: my-cert
  12. 프런트엔드 구성 값 입력을 마쳤으면 완료를 클릭합니다.

  13. 만들기를 클릭합니다. 부하 분산 페이지가 표시되고 새 부하 분산기가 부하 분산기 목록에 생성됩니다.

  14. Google Cloud 콘솔에서 새 부하 분산기 생성을 마쳤으면, 부하 분산기 이름을 클릭하고 세부정보 > 프런트엔드 아래의 외부 IP 주소를 기록해 둡니다. 다음 단계에 이 항목이 필요합니다.

부하 분산기를 가리키도록 도메인 설정

부하 분산기를 가리키도록 도메인을 설정하려면 아래 단계에 따라 A 레코드를 구성합니다.

  1. 도메인 호스트에서 도메인 계정에 로그인합니다.
  2. 도메인의 DNS 레코드를 업데이트하기 위한 페이지를 찾습니다. 이 페이지는 'DNS 관리, '이름 서버 관리' 또는 '고급 설정'과 같은 다른 이름으로 불릴 수 있습니다.
  3. A 레코드를 다음 값으로 변경합니다.
    • 이름/호스트/별칭: @
    • 값: 위에서 만든 부하 분산기의 외부 IP 주소입니다. DNS 레코드에 포트 :443을 포함하지 마세요.
    • TTL: 등록 기관의 기본값 또는 86400(1일)입니다.
  4. DNS 레코드가 업데이트될 때까지 기다립니다. 바로 전에 추가한 레코드가 전파되려면 최대 1일까지 걸릴 수 있습니다.
  5. 부하 분산기를 테스트하려면 웹브라우저를 사용하여 https:// 프로토콜로 도메인으로 이동합니다.
    • 부하 분산기가 아직 설정되지 않았으면 "HTTP 502" 오류가 표시됩니다.
    • 부하 분산기가 준비되었으면 '승인된 요청'이 표시됩니다.

자세한 내용은 A 레코드 정보를 참조하세요.

VM 다시 시작

IAP의 요청을 올바르게 인증하기 위해서는 아래 단계에 따라 MIG에서 VM을 다시 시작해야 합니다.

  1. Google Cloud 콘솔에서 Compute Engine > 인스턴스 그룹 페이지로 이동합니다.
    인스턴스 그룹 페이지로 이동
  2. my-managed-instance-group을 클릭합니다.
  3. 표시된 인스턴스 그룹 세부정보 상단에서 지속적 재시작/교체를 클릭합니다.
  4. 표시된 my-managed-instance-group 인스턴스 다시 시작/교체 페이지에서 다음 값을 설정합니다.
    • 작업: 다시 시작
    • 최대 사용 불가 개수: 3개 인스턴스 중 3개 인스턴스
    • 최소 대기 시간: 0초
  5. 값 업데이트를 마쳤으면 다시 시작을 클릭합니다.

5단계: IAP 설정

방화벽 구성

다음으로 기본 VM에 대한 액세스를 차단하고 IAP를 통한 액세스만 허용하도록 방화벽을 구성합니다.

  1. Google Cloud 콘솔 VPC 네트워크 > 방화벽 규칙으로 이동합니다.
    방화벽 규칙 페이지로 이동
  2. 다음 규칙 옆에 있는 체크박스를 선택합니다.
    • default-allow-http
    • default-allow-https
    • default-allow-internal
  3. 삭제를 클릭합니다.
  4. 방화벽 규칙 만들기를 클릭하고 다음 값을 설정합니다.
    • 이름: allow-iap-traffic
    • 대상: 네트워크의 모든 인스턴스
    • 소스 IP 범위(상자에 값을 붙여넣을 때마다 Enter 누름). IP 범위는 부하 분산기가 백엔드와 통신하는 데 필요한 기본 요건이므로 허용 목록에 포함됩니다.
      • 130.211.0.0/22
      • 35.191.0.0/16
    • 프로토콜 및 포트:
      • 지정된 프로토콜 및 포트
      • tcp:80
  5. 값 업데이트를 마쳤으면 만들기를 클릭합니다.

IAP 설정

프로젝트에 IAP를 설정하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 보안 > IAP(Identity-Aware Proxy) 페이지로 이동하여 IAP를 사용 설정하려는 프로젝트를 선택합니다.
    IAP(Identity-Aware Proxy) 페이지로 이동
  2. 프로젝트의 OAuth 동의 화면을 구성하지 않았으면, 이를 수행하라는 메시지가 표시됩니다.

    1. OAuth 동의 화면으로 이동합니다.
      동의 화면 구성
    2. 지원 이메일 아래에서 공개 연락처로 표시할 이메일 주소를 선택합니다. 이메일 주소는 현재 로그인한 사용자 계정 또는 현재 로그인한 사용자가 관리자 또는 소유자인 Google 그룹에 속해야 합니다.
    3. 표시하려는 애플리케이션 이름을 입력합니다.
    4. 원하는 선택적인 세부정보를 추가합니다.
    5. 저장을 클릭합니다.

    나중에 제품 이름 또는 이메일 주소와 같은 OAuth 동의 화면의 정보를 변경하려면 앞의 단계를 반복하여 동의 화면을 구성합니다.

  3. my-backend-service 옆의

  4. 표시되는 IAP 사용 창에서 '구성 요구사항을 읽고 문서에 따라 Compute Engine 리소스를 구성했습니다.' 옆의 체크박스를 선택합니다.

  5. 사용 설정을 클릭합니다.

액세스 목록에 주 구성원 추가

다음으로 프로젝트의 IAP 액세스 목록에 주 구성원을 추가합니다.

  1. IAM 및 관리자 > IAP(Identity-Aware Proxy)의 오른쪽 액세스 섹션에서 추가를 클릭합니다.
  2. 액세스 권한을 제공하려는 주 구성원(자신 포함)을 입력하고 주 구성원에게 IAP 보안 웹 앱 사용자 역할을 할당합니다. 주 구성원은 다음 중 하나일 수 있습니다.
    • Google 계정: user@gmail.com
    • Google 그룹스: admins@googlegroups.com
    • 서비스 계정: server@example.gserviceaccount.com
    • Google Workspace 도메인: example.com

6단계: IAP 테스트

IAP가 올바르게 작동하는지 테스트하려면 다음 단계를 따르세요.

  1. 웹 브라우저에서 도메인으로 이동합니다.
    1. '승인되지 않은 요청'이 표시되면 몇 분 후 다시 시도하세요.
  2. Google 로그인 화면이 표시되면 이전 단계에서 액세스 권한을 제공한 Google 계정을 사용하여 로그인합니다.
  3. 'Hi, user@example.com. I am my-managed-instance-group-29z6.'와 같은 메시지가 표시됩니다.
  4. 페이지를 새로고침하세요. 관리형 인스턴스 그룹에 있는 3개의 머신 이름이 브라우저에 표시됩니다. 이것은 그룹의 VM 간에 트래픽을 분산하는 부하 분산기입니다.

축하합니다 IAP를 사용하여 부하 분산 서비스를 성공적으로 사용 설정했습니다.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

Compute Engine에 대한 IAP 설정을 완료한 후에는 Google Cloud에서 만든 리소스를 삭제하여 이후에 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션에서는 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

인스턴스 삭제

Compute Engine 인스턴스를 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 삭제할 인스턴스.
  3. 인스턴스를 삭제하려면 추가 작업을 클릭하고, 삭제를 클릭한 후 안내를 따르세요.

기본 네트워크의 방화벽 규칙 삭제

방화벽 규칙을 삭제하는 방법은 다음과 같습니다.

  1. Google Cloud 콘솔에서 방화벽 페이지로 이동합니다.

    방화벽으로 이동

  2. 규칙을 합니다.
  3. 방화벽 규칙을 삭제하려면 삭제를 클릭합니다.

다음 단계

  • 이 가이드에서 사용한 예제 앱을 수정하여 다른 데이터를 제공합니다.
  • 권장사항을 읽고 IAP로 개발자의 고유 앱을 작성하고 이를 보호하는 방법을 이해합니다.