Virtual Private Cloud의 공용 프론트 엔드 및 사설 백엔드

이 튜토리얼에서는 비용이 발생할 수 있습니다. Cost Estimator를 사용하여 예상 사용량을 기반으로 비용 추정값을 생성하십시오.

이 튜토리얼에서는 여러 서브넷 및 각 서브넷의 가상 서버 인스턴스(VSI)를 사용하여 자체 IBM Cloud® Virtual Private Cloud(VPC)를 작성하는 것에 대해 설명합니다. VPC는 다른 가상 네트워크와 논리적으로 격리된 공유 클라우드 인프라의 사용자 자체 프라이빗 클라우드입니다.

서브넷은 IP 주소 범위입니다. 서브넷은 단일 구역에 바인드되며 여러 구역 또는 지역에 걸쳐 있을 수 없습니다. VPC의 용도로 서브넷의 중요한 특성은 서브넷을 서로 격리할 수 있고 일반적인 방법으로 서로 연결할 수도 있다는 사실입니다. 서브넷 격리는 하나 이상의 Virtual Server 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 방화벽 역할을 하는 보안 그룹을 통해 달성할 수 있습니다.

외부 세계에 노출되어야 하는 리소스에 사용되는 별도의 서브넷을 보유하는 것이 좋습니다. 외부 세계에서 직접 액세스되어서는 안 되는 액세스가 제한된 리소스는 다른 서브넷에 배치됩니다. 이러한 서브넷에 있는 인스턴스는 백엔드 데이터베이스이거나 공개적인 액세스를 원하지 않는 일부 비밀 저장소일 수 있습니다. 보안 그룹을 정의하여 VSI에 대한 트래픽을 허용하거나 거부합니다.

간단히 말하면 VPC를 사용하여 다음과 같은 작업을 수행할 수 있습니다.

  • 소프트웨어 정의 네트워크(SDN)를 작성합니다.
  • 워크로드를 격리합니다.
  • 인바운드 및 아웃바운드 트래픽을 미세 제어합니다.

목표

  • 가상 프라이빗 클라우드에 사용 가능한 인프라 오브젝트에 대해 이해
  • 가상 프라이빗 클라우드, 서브넷 및 서버 인스턴스를 작성하는 방법에 대해 학습
  • 보안 그룹을 적용하여 서버에 대한 액세스에 보안을 설정하는 방법 알아보기

*
아키텍처 다이어그램 *

  1. 관리자(DevOps)가 클라우드에서 필요한 인프라(VPC, 서브넷, 규칙이 있는 보안 그룹, VSI)를 설정합니다.
  2. 인터넷 사용자가 프론트 엔드의 웹 서버에 대한 HTTP/HTTPS 요청을 작성합니다.
  3. 프론트 엔드가 보안 백엔드에서 개인용 리소스를 요청하고 결과를 사용자에게 제공합니다.

시작하기 전에

  • 사용자 권한을 확인하십시오. 사용자 계정에 VPC 리소스를 작성하고 관리할 수 있는 충분한 권한이 있는지 확인하십시오. VPC에 대한 필수 권한 목록을 참조하십시오.
  • 가상 서버에 연결하기 위해 SSH 키가 필요합니다. SSH 키가 없는 경우 VPC의 키를 작성하기 위한 명령어를 참조하십시오.

가상 사설 클라우드 및 서브넷 작성

서버 보안을 강화하기 위해 서버에 배치된 애플리케이션에 필요한 포트에 대한 연결만 허용하는 것이 좋습니다. 이 튜토리얼에서는 애플리케이션이 웹 서버가 되므로 포트 80에 대한 인바운드 연결만 허용해야 합니다.

소프트웨어 설치, 운영 체제 업그레이드 수행과 같이 해당 서버에서 유지보수 태스크를 수행하려면 기본 호스트를 통과하게 됩니다. 배스천 호스트(bastion host)는 공인 IP 주소로 프로비저닝되고 SSH를 통해 액세스될 수 있는 인스턴스입니다. 설정되고 나면 배스천 호스트는 점프 서버 역할을 수행하여 VPC에서 프로비저닝된 인스턴스에 대한 보안 연결을 허용합니다.

이 절에서는 VPC 및 배스천 호스트를 작성합니다.

이 튜토리얼에서는 아래의 UI를 사용하여 작성할 리소스를 생성하는 데 사용될 수 있는 컴패니언 쉘 스크립트와 Terraform 템플리트도 제공됩니다. 이 Github 저장소에서 이용하실 수 있습니다.

  1. 가상 개인 클라우드 페이지로 이동하여 만들기를 클릭합니다.
  2. 새 Virtual Private Cloud 섹션 아래에서 다음을 수행하십시오.
    1. vpc-pubpriv를 VPC의 이름으로 입력하십시오.
    2. 리소스 그룹을 선택하십시오.
    3. 선택적으로 태그를 추가하여 리소스를 구성하십시오.
  3. 기본 보안 그룹에서 SSH 허용ping 허용을 선택 취소하십시오. SSH 액세스는 나중에 유지보수 보안 그룹에 추가됩니다. 이 유지보수 그룹은 배스천 서버에서의 SSH 액세스를 허용하기 위해 인스턴스에 추가해야 합니다. 이 튜토리얼에는 Ping 액세스가 필요하지 않습니다.
  4. 서브넷에서 구역 1 서브넷의 이름을 변경하십시오. 연필 아이콘을 클릭하십시오.
    • 서브넷의 고유 이름으로 vpc-secure-bastion-subnet을 입력하십시오.
    • VPC 리소스 그룹과 동일한 리소스 그룹을 선택하십시오.
    • 다른 값에는 기본값을 그대로 두십시오.
    • 저장을 클릭하십시오.
  5. 서브넷에서 구역 2 서브넷의 이름을 변경하십시오. 연필 아이콘을 클릭하십시오.
    • 서브넷의 고유 이름으로 vpc-pubpriv-backend-subnet을 입력하십시오.
    • VPC 리소스 그룹과 동일한 리소스 그룹을 선택하십시오.
    • 다른 값에는 기본값을 그대로 두십시오.
    • 저장을 클릭하십시오.
  6. 서브넷에서 구역 3 서브넷의 이름을 변경하십시오. 연필 아이콘을 클릭하십시오.
    • 서브넷의 고유 이름으로 vpc-pubpriv-frontend-subnet을 입력하십시오.
    • VPC 리소스 그룹과 동일한 리소스 그룹을 선택하십시오.
    • 다른 값에는 기본값을 그대로 두십시오.
    • 저장을 클릭하십시오.
  7. Virtual Private Cloud 작성을 클릭하십시오.

서브넷 생성을 확인하려면 서브넷 페이지 로 이동한 다음 상태가 사용 가능으로 바뀔 때까지 기다리십시오.

배스천 보안 그룹 작성 및 구성

배스천 튜토리얼의 이 절에서 설명한 단계에 따라 보안 그룹을 작성하고 배스천 가상 서버 인스턴스에 대한 인바운드 규칙을 구성하십시오.

배스천 인스턴스 작성

배스천 튜토리얼의 이 절에서 설명한 단계에 따라 배스천 가상 서버 인스턴스를 작성하십시오.

유지보수 액세스 규칙이 있는 보안 그룹 구성

배스천 튜토리얼의 이 절에서 설명한 단계에 따라 보안 그룹 vpc-secure-maintenance-sg를 작성하십시오. 이 보안 그룹은 소프트웨어 설치 또는 운영 체제 업데이트와 같이 가상 서버 인스턴스에서 유지보수 태스크를 수행할 때 사용됩니다.

백엔드 보안 그룹 및 VSI 작성

이 섹션에서는 백엔드에 대한 보안 그룹 및 가상 서버 인스턴스를 작성합니다.

백엔드 보안 그룹 작성

백엔드 보안 그룹은 백엔드 서버의 인바운드 및 아웃바운드 연결을 제어합니다.

백엔드에 대한 새 보안 그룹을 작성하려면 다음을 수행하십시오.

  1. 네트워크 아래에서 보안 그룹을 선택한 다음, 만들기를 클릭합니다.
  2. vpc-pubpriv-backend-sg를 이름으로 입력한 후 이전에 작성한 VPC를 선택하십시오.
  3. VPC와 동일한 리소스 그룹을 선택하십시오.
  4. 보안 그룹 작성을 클릭하십시오.

나중에 보안 그룹을 편집하여 인바운드 및 아웃바운드 규칙을 추가합니다.

백엔드 가상 서버 인스턴스 작성

새로 작성되는 서브넷에서 가상 서버 인스턴스를 작성하려면 다음을 수행하십시오.

  1. 서브넷 아래의 백엔드 서브넷을 클릭합니다.
  2. 접속된 리소스를 클릭하고 접속된 인스턴스 아래에서 작성을 클릭하십시오.
  3. 인스턴스를 구성하려면 다음을 수행하십시오.
    1. 위치를 선택하고 나중에 같은 위치를 다시 사용하도록 하십시오.
    2. 이름vpc-pubpriv-backend-vsi로 설정하십시오.
    3. 이전과 같이 리소스 그룹을 선택하십시오.
    4. 이미지 아래에서 이미지 변경을 클릭하십시오. 검색 필드를 사용하여 Ubuntu Linux운영 체제로 선택하십시오. 이미지의 임의의 버전을 선택할 수 있습니다.
    5. 프로파일 변경을 클릭하고 컴퓨팅 을 카테고리로 선택한 후 cx2-2x4 (2 vCPUs 및 4GB RAM) 를 프로파일로 선택하십시오.
    6. SSH 키를 이전에 작성한 SSH 키로 설정하십시오.
    7. 고급 옵션 아래에서 사용자 데이터 를 다음으로 설정하십시오.
      #!/bin/bash
      apt-get update
      apt-get install -y nginx
      echo "I'm the backend server" > /var/www/html/index.html
      service nginx start
      
      그러면 인스턴스에 단순 웹 서버가 설치됩니다.
  4. 네트워킹 아래에서 작성한 VPC를 선택하십시오.
  5. 가상 네트워크 인터페이스 가 선택되고 vpc-pubpriv-backend-subnet 이 서브넷으로 나열되는지 확인하십시오. 해당 서브넷에 대한 편집 아이콘을 클릭하십시오.
    1. 먼저 네트워크 연결 및 가상 네트워크 인터페이스 세부사항에서 vpc-pubpriv-backend-subnet 이 선택되었는지 확인하십시오. 다음을 클릭하십시오.
    2. 기본 보안 그룹을 선택 취소하고 vpc-pubpriv-backend-sgvpc-secure-maintenance-sg를 선택하십시오.
    3. IP 구성 대화 상자에서 모든 것을 그대로 두고 다음을 클릭하십시오.
    4. 마지막으로 모든 것을 검토하고 저장을 클릭하여 완료하십시오.
  6. 가상 서버 인스턴스 작성을 클릭하십시오.

프론트엔드 보안 그룹 및 VSI 작성

백엔드와 유사하게, 프론트엔드 가상 서버 인스턴스 및 보안 그룹을 작성합니다.

프론트 엔드 보안 그룹 작성

프론트 엔드에 대한 새 보안 그룹을 작성하려면 다음을 수행하십시오.

  1. 네트워크 아래에서 보안 그룹을 클릭한 후 작성을 클릭하십시오.
  2. vpc-pubpriv-frontend-sg를 이름으로 입력한 후 이전에 작성한 VPC를 선택하십시오.
  3. VPC와 동일한 리소스 그룹을 선택하십시오.
  4. 보안 그룹 작성을 클릭하십시오.

프론트 엔드 가상 서버 인스턴스 작성

새로 작성되는 서브넷에서 가상 서버 인스턴스를 작성하려면 다음을 수행하십시오.

  1. 서브넷 아래의 프론트엔드 서브넷을 클릭합니다.
  2. 접속된 리소스를 클릭하고 접속된 인스턴스 아래에서 작성을 클릭하십시오.
  3. 인스턴스를 구성하려면 다음을 수행하십시오.
    1. 위치를 선택하고 나중에 같은 위치를 다시 사용하도록 하십시오.
    2. 이름vpc-pubpriv-frontend-vsi로 설정하십시오.
    3. 이전과 같이 리소스 그룹을 선택하십시오.
    4. 이미지 아래에서 이미지 변경을 클릭하십시오. 검색 필드를 사용하여 Ubuntu Linux운영 체제로 선택하십시오. 이미지의 임의의 버전을 선택할 수 있습니다.
    5. 프로파일 변경을 클릭하고 컴퓨팅 을 카테고리로 선택한 후 cx2-2x4 (2 vCPUs 및 4GB RAM) 를 프로파일로 선택하십시오.
    6. SSH 키를 이전에 작성한 SSH 키로 설정하십시오.
    7. 고급 옵션 아래에서 사용자 데이터 를 다음으로 설정하십시오.
      #!/bin/bash
      apt-get update
      apt-get install -y nginx
      echo "I'm the frontend server" > /var/www/html/index.html
      service nginx start
      
      그러면 인스턴스에 단순 웹 서버가 설치됩니다.
  4. 네트워킹 아래에서 작성한 VPC를 선택하십시오.
  5. 가상 네트워크 인터페이스 가 선택되고 vpc-pubpriv-frontend-subnet 이 서브넷으로 나열되는지 확인하십시오. 해당 서브넷에 대한 편집 아이콘을 클릭하십시오.
    1. 먼저 네트워크 연결 및 가상 네트워크 인터페이스 세부사항에서 vpc-pubpriv-frontend-subnet 이 선택되었는지 확인하십시오. 다음을 클릭하십시오.
    2. 기본 보안 그룹의 체크 표시를 해제하고 vpc-pubpriv-frontend-sgvpc-secure-maintenance-sg를 체크 표시합니다.
    3. IP 구성 대화 상자에서 모든 것을 그대로 두고 다음을 클릭하십시오.
    4. 마지막으로 모든 것을 검토하고 저장을 클릭하여 완료하십시오.
  6. 가상 서버 인스턴스 작성을 클릭하십시오.

인스턴스가 시작되어 실행 중이 되면 프론트 엔드 VSI vpc-pubpriv-frontend-vsi 를 선택하고 가상 네트워크 인터페이스가 있는 네트워크 첨부 로 스크롤하고 eth0 에 대한 세 개의 점 메뉴에서 부동 IP 편집 을 선택하십시오. 첨부를 클릭한 후 새 부동 IP 예약 을 클릭하고 vpc-pubpriv-frontend-vsi-ip 를 이름으로 사용하십시오. 예약을 완료한 후 새로 첨부된 IP를 보려면 페이지를 새로 고쳐야 합니다.

프론트 엔드와 백엔드 간 연결 설정

모든 서버가 실행 중인 상태에서 이 절에서는 프론트 엔드 서버와 백엔드 서버 사이에서 일반 오퍼레이션을 허용하기 위해 연결을 설정합니다.

프론트 엔드 보안 그룹 구성

프론트 엔드 인스턴스에 해당 소프트웨어가 설치되어 있지만 구성으로 인해 아직 도달할 수 없습니다.

  1. 웹 서버에 아직 액세스할 수 없음을 확인하려면 http://<floating-ip-address-of-the-frontend-vsi>을(를) 가리키는 웹 브라우저를 열거나 다음 항목을 사용하십시오.

    curl -v -m 30 http://<floating-ip-address-of-the-frontend-vsi>
    

    결국 연결이 제한시간을 초과해야 합니다.

  2. 프론트 엔드 인스턴스에 설치된 웹 서버에 대한 인바운드 연결을 사용하려면 웹 서버가 청취 중인 포트를 열어야 합니다.

  3. 네트워크 섹션의 보안 그룹으로 이동한 후 vpc-pubpriv-frontend-sg를 클릭하십시오.

  4. 규칙 탭을 클릭하고 인바운드 규칙 아래에서 작성을 클릭하십시오. 아래 표의 규칙을 추가하면 들어오는 HTTP 요청과 Ping(ICMP)을 허용할 수 있습니다.

    인바운드 규칙
    프로토콜 소스 유형 소스 설명
    TCP 임의 0.0.0.0/0 포트 80-80 이 규칙은 모든 IP 주소에서 프론트 엔드 웹 서버로의 연결을 허용합니다.
    ICMP 임의 0.0.0.0/0 유형: 8, 코드: 공백으로 둠 이 규칙은 프론트 엔드 서버가 임의의 호스트에 의해 Ping되도록 허용합니다.
  5. 다음으로 아웃바운드 규칙을 추가하십시오. 백엔드의 포트는 가상 서버에 설치 중인 소프트웨어에 따라 다릅니다. 이 튜토리얼에서는 포트 80에서 청취 중인 웹 서버를 사용합니다. 값은 아래에 있는 아웃바운드 규칙 표를 참조하십시오.

    아웃바운드 규칙
    프로토콜 대상 유형 대상 설명
    TCP 보안 그룹 vpc-pubpriv-backend-sg 포트 80-80 이 규칙은 프론트 엔드 서버가 백엔드 서버와 통신하도록 허용합니다.
  6. http://<floating-ip-address-of-the-frontend-vsi>에서 프론트엔드 인스턴스에 다시 액세스하여 웹 서버의 시작 페이지를 보십시오.

프론트 엔드 및 백엔드 간의 연결 테스트

백엔드 서버가 프론트 엔드 서버와 동일한 웹 서버 소프트웨어를 실행 중입니다. 이는 프론트 엔드가 호출하는 HTTP 인터페이스를 공개하는 마이크로서비스로 간주될 수 있습니다. 이 절에서는 프론트 엔드 서버 인스턴스에서 백엔드로 연결하려고 시도합니다.

  1. 가상 서버 인스턴스 목록 에서, 요새 서버 호스트 (vpc-secure-bastion) 의 부동 IP 주소와 프론트엔드(vpc-pubpriv-frontend-vsi)백엔드(vpc-pubpriv-backend-vsi) 서버 인스턴스의 개인 IP 주소를 확인합니다.

  2. ssh를 사용하여 프론트 엔드 가상 서버에 연결하십시오.

    ssh -J root@<floating-ip-address-of-the-bastion-vsi> root@<private-ip-address-of-the-frontend-vsi>
    

    프론트 엔드에 대한 SSH 연결은 배스천을 통해서만 가능하며 vpc-secure-maintenance-sg가 프론트 엔드 인스턴스에 연결된 경우에만 가능합니다.

  3. 백엔드 웹 서버를 호출하십시오.

    curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
    

    30초후에는 호출 제한시간이 초과됩니다. 실제로 백엔드 서버에 대한 보안 그룹이 아직 구성되지 않았으며 어떠한 인바운드 연결도 허용하지 않습니다.

백엔드 보안 그룹 구성

백엔드 서버에 대한 인바운드 연결을 허용하려면 연관된 보안 그룹을 구성해야 합니다.

  1. 네트워크 섹션의 보안 그룹으로 이동한 후 vpc-pubpriv-backend-sg를 클릭하십시오.

  2. 규칙 탭을 클릭하고 인바운드 규칙 아래에서 작성을 클릭하십시오. 다음 규칙을 추가하십시오.

    인바운드 규칙
    프로토콜 소스 유형 소스 설명
    TCP 보안 그룹 vpc-pubpriv-frontend-sg 포트 80-80 이 규칙은 포트 80에서 프론트엔드 서버로부터 백엔드 서버로의 수신 연결을 허용합니다.

연결 확인

  1. 프론트 엔드 서버에서 다시 백엔드 웹 서버를 호출하십시오.
    curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
    
  2. 요청이 빠르게 리턴되어 백엔드 웹 서버에서 I'm the backend server 메시지를 출력합니다. 이렇게 하면 서버 간의 연결 구성이 완료됩니다.

유지보수 완료

프론트 엔드 및 백엔드 서버 소프트웨어가 제대로 설치되어 작동하면 유지보수 보안 그룹에서 서버를 제거할 수 있습니다.

  1. 네트워크 섹션의 보안 그룹으로 이동한 후 vpc-secure-maintenance-sg를 클릭하십시오.
  2. 첨부된 자원을 선택하십시오.
  3. 인터페이스 편집을 선택하고 vpc-pubpriv-frontend-vsivpc-pubpriv-backend-vsi 인터페이스를 펼친 후 선택 취소하십시오.
  4. 구성을 저장하십시오.
  5. http://<floating-ip-address-of-the-frontend-vsi>에서 프론트엔드 인스턴스에 다시 액세스하여 이것이 여전히 기대한 대로 작동하고 있는지 확인하십시오.

서버가 유지보수 그룹에서 제거되면 더 이상 ssh를 사용하여 액세스할 수 없습니다. 웹 서버에 대한 트래픽만 허용합니다.

이 튜토리얼에서는 두 계층의 애플리케이션, 즉, 공용 인터넷에서 볼 수 있는 프론트 엔드 서버 및 프론트 엔드 서버에 의해 VPC 내에서만 액세스 가능한 백엔드 서버를 배치했습니다. 애플리케이션이 요청하는 특정 포트에서만 트래픽이 허용되도록 보안 그룹 규칙을 구성했습니다.

자원 제거

  1. VPC 인프라 콘솔 에서 네트워크 아래의 플로팅 IP를 클릭한 다음, VSI의 IP 주소를 클릭하고, 액션 메뉴에서 릴리스를 선택합니다. IP 주소를 해제할지 확인하십시오.
  2. 다음으로 가상 서버 인스턴스로 전환하고 각 조치 메뉴를 클릭하여 인스턴스를 중지삭제하십시오.
  3. VSI가 삭제되면 서브넷으로 전환하십시오. 서브넷에 접속된 퍼블릭 게이트웨이가 있는 경우 서브넷 이름을 클릭하십시오. 서브넷 세부사항에서 퍼블릭 게이트웨이를 분리하십시오. 퍼블릭 게이트웨이가 없는 서브넷은 개요 페이지에서 삭제할 수 있습니다. 서브넷을 삭제하십시오.
  4. 서브넷이 삭제된 후 VPC 탭으로 전환하고 VPC를 삭제하십시오.

콘솔 사용 시 리소스 삭제 후 업데이트된 상태 정보를 보려면 브라우저를 새로 고쳐야 할 수 있습니다.