Compute Engine을 위한 Cloud IAP 설정

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

목표

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

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

비용

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

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

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

Cloud Platform 신규 사용자는 무료 평가판을 이용할 수 있습니다.

시작하기 전에

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

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

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

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

GCP Console에서 Compute Engine > 인스턴스 템플릿 만들기 페이지로 이동하고 템플릿을 만들려는 프로젝트를 선택합니다.

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

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

  • 머신 유형:
    • micro(f1-micro)
  • 액세스 범위:
    • 각 API에 액세스 설정
    • Compute Engine: 읽기 전용
  • 방화벽:
    • HTTP 트래픽 허용
  • 관리 섹션의 자동화 > 시작 스크립트 아래에서 다음 스크립트를 복사하고 붙여넣습니다.
    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
    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단계: 관리형 인스턴스 그룹 만들기

GCP Console에서 Compute Engine > 새 인스턴스 그룹 만들기 페이지로 이동하고 템플릿을 만들려는 프로젝트를 선택합니다.

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

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

  • 이름: my-managed-instance-group
  • 위치: 다중 영역
  • 인스턴스 템플릿: 1단계에서 만든 인스턴스 템플릿을 선택합니다.
  • 인스턴스 수: 3
  • 상태 확인: 상태 확인 생성을 선택한 후 다음 값을 입력합니다.
    • 이름: my-health-check
    • 프로토콜: HTTP 완료되었으면 저장 후 계속을 클릭하여 이 상태 확인을 사용합니다.

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

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

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

인증서 설정

Let's Encrypt는 무료로 제공되는 비영리 CA(인증 기관)입니다. 해당 서비스를 사용하여 사용자가 개발자의 웹 사이트를 식별할 수 있는 인증서를 만듭니다.

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

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

GCP Console에서 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. GCP Console에서 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. GCP Console에서 네트워크 서비스 > 부하 분산기 만들기 페이지로 이동하고 부하 분산기를 만들려는 프로젝트를 선택합니다.
    부하 분산기 만들기 페이지로 이동

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

  3. 표시된 새 HTTP(S) 부하 분산기 페이지에서 부하 분산기의 이름을 입력합니다.

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

  5. 백엔드 서비스 만들기 패널의 이름 상자에 my-backend-service를 입력합니다.

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

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

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

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

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

    • 프로토콜: HTTPS
    • IP 주소: IP 주소 만들기를 클릭합니다.
      • 새 정적 IP 주소와 연결할 이름을 입력합니다.
      • 정적 IP 주소를 예약하려면 예약을 클릭합니다.
    • 인증서: my-cert
  11. 프런트엔드 구성 값 입력을 마쳤으면 완료를 클릭합니다. 새 HTTP(S) 부하 분산기 패널이 다시 표시됩니다.

  12. 새 HTTP(S) 부하 분산기 아래에서 만들기를 클릭합니다. 부하 분산 페이지가 표시되고 새 부하 분산기가 부하 분산기 목록에 생성됩니다.

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

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

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

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

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

VM 다시 시작

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

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

5단계: Cloud IAP 설정

방화벽 구성

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

  1. GCP Console의 VPC 네트워크 > 방화벽 규칙으로 이동합니다.
    방화벽 규칙 페이지로 이동
  2. 다음 규칙 옆에 있는 체크박스를 선택합니다.
    • default-allow-http
    • default-allow-https
    • default-allow-internal
  3. 삭제를 클릭합니다.
  4. 방화벽 규칙 만들기를 클릭하고 다음 값을 설정합니다.
    • 이름: allow-iap-traffic
    • 대상: 네트워크의 모든 인스턴스
    • 소스 IP 범위(상자에 값을 붙여넣을 때마다 Enter 누름):
      • 130.211.0.0/22
      • 35.191.0.0/16
    • 프로토콜 및 포트:
      • 지정된 프로토콜 및 포트
      • tcp:80
  5. 값 업데이트를 마쳤으면 만들기를 클릭합니다.

Cloud IAP 설정

프로젝트에 대해 Cloud IAP를 설정하려면 아래 단계를 따르세요.

  1. GCP Console에서 IAM 및 관리자 > Identity-Aware Proxy 페이지로 이동하고 Cloud IAP를 사용 설정하려는 프로젝트를 선택합니다.
    Identity-Aware Proxy 페이지로 이동
  2. 프로젝트의 OAuth 동의 화면을 구성하지 않았으면, 이를 수행하라는 메시지가 표시됩니다.

    1. OAuth 동의 화면으로 이동합니다.
      동의 화면 구성
    2. 이메일 주소 아래에서 공개 연락처로 표시하려는 이메일 주소를 선택합니다. 이 주소는 개발자의 이메일 주소 또는 개발자가 소유하는 Google 그룹이어야 합니다.
    3. 표시하려는 제품 이름을 입력합니다.
    4. 원하는 선택적인 세부정보를 추가합니다.
    5. 저장을 클릭합니다.

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

  3. my-backend-service 옆의 IAP 열에서 끄기를 클릭합니다.

  4. 표시된 IAP 사용 창에서 등록한 도메인 이름(www 제외)을 입력합니다.

  5. '구성 요구사항을 읽고 문서에 따라 GCE 리소스를 구성했습니다' 옆의 상자를 선택합니다.

  6. 사용을 클릭합니다.

액세스 목록에 구성원 추가

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

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

6단계: Cloud IAP 테스트

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

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

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

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.

Compute Engine을 위한 Cloud IAP 설정을 마친 후에는 GCP에서 생성한 리소스를 정리하여 나중에 다시 청구되지 않도록 할 수 있습니다. 다음 섹션에서는 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

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

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

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

인스턴스 삭제

Compute Engine 인스턴스를 삭제하는 방법:

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 다음의 옆에 있는 체크박스를 클릭합니다. 삭제할 인스턴스
  3. 페이지 상단의 삭제 버튼을 클릭하여 인스턴스를 삭제합니다.

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

방화벽 규칙을 삭제하려면 다음과 같이 하세요.

다음 단계

  • 이 가이드에서 사용한 예제 앱을 수정하여 다른 데이터를 제공합니다.
  • Cloud IAP로 개발자의 고유 앱을 작성하고 이를 보호하는 방법을 이해하기 위해 권장사항을 읽습니다.
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Identity-Aware Proxy 문서