실습 설정 안내 및 요구사항
계정과 진행 상황을 보호하세요. 이 실습을 실행하려면 항상 시크릿 브라우저 창과 실습 사용자 인증 정보를 사용하세요.

Cloud Armor로 에지 캐시 보호하기

실습 35분 universal_currency_alt 크레딧 1개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
이 콘텐츠는 아직 휴대기기에 최적화되지 않음
최상의 경험을 위해 데스크톱 컴퓨터에서 이메일로 전송된 링크를 사용하여 방문하세요.

GSP878

개요

Google Cloud Armor 에지 보안 정책을 사용하면 Cloud CDN(콘텐츠 전송 네트워크) 및 Cloud Storage의 캐시된 객체에 대한 액세스를 제한할 수 있습니다. 에지 보안 정책은 Cloud CDN 캐시가 있는 업스트림인 Google 네트워크의 가장 바깥쪽 경계에 배포되고 적용됩니다. 이렇게 하는 이유는 사용자가 제한된 지역의 스토리지 버킷에 있는 객체에 액세스하지 못하도록 하거나, 미디어 배포 시 라이선스가 있는 지역만 필터링하도록 하기 위해서입니다.

이 실습에서는 Google Cloud Storage 버킷을 만들고 이미지를 업로드하고 부하 분산기에 바인딩한 다음, Cloud CDN 및 Cloud Armor 에지 보안 정책을 사용 설정합니다.

학습할 내용

이 실습에서는 다음을 수행하는 방법에 대해 알아봅니다.

  • 캐시 가능한 콘텐츠로 Cloud Storage 버킷 설정
  • 콘텐츠를 보호하기 위한 에지 보안 정책 만들기
  • 에지 보안 정책이 예상대로 작동하는지 검증

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 창이 있습니다.

    • Google Cloud 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.

    {{{user_0.username | "Username"}}}

    실습 세부정보 창에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 세부정보 창에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

    중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  7. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의합니다.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
    • 무료 체험판을 신청하지 않습니다.

잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.

참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다. 탐색 메뉴 아이콘 및 검색창

시작하기 전에

  • Cloud Shell에서 프로젝트 ID를 설정하고 이에 대한 환경 변수를 만듭니다.
export PROJECT_ID=$(gcloud config get-value project) echo $PROJECT_ID gcloud config set project $PROJECT_ID

작업 1. Cloud Storage 버킷 만들기 및 객체 업로드

Cloud Storage 버킷은 Cloud CDN의 원본 소스가 됩니다.

  1. 콘솔에서 탐색 메뉴(탐색 메뉴) > Cloud Storage > 버킷으로 이동합니다.

  2. 새 Cloud Storage 버킷을 만들려면 만들기를 클릭합니다.

  3. 버킷 이름을 -bucket으로 설정합니다.

  4. 계속을 클릭합니다.

  5. 위치 유형으로 리전을 선택하고 을 선택합니다 .

  6. 계속을 클릭합니다.

  7. 버킷의 기본 스토리지 클래스는 Standard입니다. 계속을 클릭합니다.

  8. 공개 액세스 방지 아래의 이 버킷에 공개 액세스 방지 적용 체크박스를 선택 해제합니다.

  9. 액세스 제어에서 세분화된 액세스 제어를 선택합니다.

  10. 계속을 클릭합니다.

  11. 만들기를 클릭합니다.

이상으로 Cloud Storage 버킷 만들기가 완료되었습니다.

버킷에 객체를 업로드합니다.

이제 나중에 사용할 객체를 버킷에 업로드합니다. Cloud Storage 버킷은 기본적으로 비공개입니다. 이 실습에서는 객체를 인터넷에서 사용할 수 있도록 만듭니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 이미지를 Cloud Shell에 다운로드합니다. 이 실습에서는 Google 홈페이지의 Google 이미지를 사용합니다.
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
  1. gsutil cp 명령어를 사용하여 Cloud Shell에서 생성한 버킷으로 이미지를 업로드합니다.
gsutil cp google.png gs://{{{project_0.startup_script.project_id|Bucket Name}}}
  1. Cloud Shell에서 다운로드한 이미지를 삭제합니다.
rm google.png
  1. Cloud Storage > 버킷 > 으로 이동하여 버킷에 업로드한 객체를 찾습니다.

  2. 이제 업로드한 객체의 오른쪽에 있는 점 3개를 클릭하고 액세스 수정을 클릭합니다.

  3. 항목 추가를 클릭하고 드롭다운 목록에서 항목을 공개로 설정합니다.

  4. 저장을 클릭합니다.

항목이 나열되고 저장 및 취소 버튼이 포함된 액세스 수정 페이지

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Cloud Storage 버킷을 만들고 객체 업로드

작업 2. 부하 분산기 만들기

Cloud CDN과 Cloud Armor는 Google의 전역 Cloud Load Balancing에 연결할 수 있는 구성요소입니다. 이 섹션에서는 HTTP 부하 분산기를 만듭니다.

  1. 탐색 메뉴(탐색 메뉴 아이콘)에서 모든 제품 보기 > 네트워크 서비스 > 부하 분산을 클릭합니다.
  2. +부하 분산기 만들기를 클릭합니다.
  3. 부하 분산기 유형에서 애플리케이션 부하 분산기(HTTP/HTTPS)를 선택하고 다음을 클릭합니다.
  4. 공개 또는 내부에서 공개(외부)를 선택하고 다음을 클릭합니다.
  5. 전역 또는 단일 리전 배포에서 전역 워크로드에 적합을 선택하고 다음을 클릭합니다.
  6. 부하 분산기 생성에서 전역 외부 애플리케이션 부하 분산기를 선택하고 다음을 클릭합니다.
  7. 구성 버튼을 클릭합니다.
  8. 부하 분산기 이름을 edge-cache-lb로 지정합니다.

프런트엔드 구성 만들기

프런트엔드 구성을 만들려면 다음 단계를 따르세요.

  1. 프런트엔드 구성을 클릭합니다.

  2. 프런트엔드 구성에는 HTTP를 사용합니다(인증서가 있는 경우 HTTPS도 작동함). 임시 IP 주소를 사용하고 프리미엄 등급 네트워크를 선택했는지 확인합니다. 기본적으로 선택되어 있습니다.

  3. 완료를 클릭합니다.

부하 분산기의 설명이 포함된 프런트엔드 구성 페이지

백엔드 구성 만들기

백엔드 구성을 만들려면 다음 단계를 따르세요.

  1. 백엔드 구성을 클릭합니다.

  2. 백엔드 서비스 및 백엔드 버킷에서 백엔드 버킷 만들기를 클릭합니다.

  3. 백엔드 버킷 이름lb-backend-bucket으로 설정합니다.

  4. 다음 필드에서 찾아보기 버튼을 클릭하여 이전에 만든 Cloud Storage 버킷을 선택합니다.

  5. 나머지 설정은 모두 기본값으로 둡니다.

  6. 만들기를 클릭합니다.

호스트 및 경로 규칙 만들기

호스트 및 경로 규칙을 만들려면 다음 단계를 따르세요.

  1. 왼쪽에서 라우팅 규칙을 클릭합니다.

  2. 모드에서 단순한 호스트 및 경로 규칙을 선택하여 버킷에 모든 요청을 보냅니다. 기본 옵션입니다.

HTTP 부하 분산기 검토 및 만들기

HTTP 부하 분산기를 검토하고 만들려면 다음 단계를 따르세요.

  1. 검토 및 완료를 클릭합니다.
  2. 백엔드 서비스프런트엔드를 검토합니다.
  3. 만들기를 클릭합니다.

부하 분산기 IP 가져오기

콘솔에서 부하 분산기 IP를 가져오려면 다음 단계를 따르세요.

  • 프로젝트의 부하 분산기 목록에서 부하 분산기 이름을 클릭합니다. 다음 작업을 위해 부하 분산기의 IPv4 주소를 기록합니다. [LOAD_BALANCER_IP]로 참조합니다.

IP:포트 주소가 강조 표시된 세부정보 페이지

부하 분산기 쿼리

몇 분 후 업로드한 객체에 대해 부하 분산기를 쿼리합니다. 부하 분산기 IP 주소와 이미지 이름이 필요합니다.

  1. Cloud Shell에서 다음을 실행합니다. 여기서 LOAD_BALANCER_IP를 부하 분산기의 IPv4 주소로 바꿉니다.
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png 참고: HTTP 부하 분산기에 액세스하려면 최대 5분이 걸릴 수 있습니다.

출력:

student-cloudshell% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
  1. 다음 명령어를 사용하여 몇 가지 쿼리를 실행합니다.
for i in `seq 1 50`; do curl http://LOAD_BALANCER_IP/google.png; done

Cloud CDN에서 제공하는 콘텐츠 확인

  • 네트워크 서비스 > Cloud CDN으로 이동하여 CDN 또는 부하 분산 모니터링을 통해 콘텐츠가 CDN에서 제공되고 있는지 확인합니다.

결과 하나가 채워진 Cloud CDN 개요 페이지

적중률이 거의 100%에 가까울 것입니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 부하 분산기 만들기

작업 3. Cloud Storage 버킷에서 객체 삭제

캐시가 채워졌으므로 이제 버킷에서 객체를 삭제합니다. 이렇게 하면 백엔드가 아닌 캐시에 정책이 적용되도록 확실히 해둘 수 있습니다.

  1. 탐색 메뉴(탐색 메뉴 아이콘)에서 Cloud Storage > 버킷 > -bucket > 객체를 클릭합니다.

  2. 객체를 선택하고 상단의 삭제 버튼을 클릭하여 삭제합니다.

  3. 프롬프트에서 삭제를 클릭합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Cloud Storage 버킷에서 객체 삭제

작업 4. 에지 보안 정책 만들기

Cloud Armor 정책은 HTTP 부하 분산기 외부에서 실체화됩니다. Cloud Armor 정책이 배포되면 하나 이상의 HTTP 부하 분산기 백엔드 서비스 또는 버킷 리소스와 연결할 수 있으며, 이를 대상이라고 합니다.

  1. 탐색 메뉴(탐색 메뉴 아이콘)에서 모든 제품 보기 > 네트워크 보안 > Cloud Armor 정책을 클릭하고 정책 만들기를 클릭합니다.
  1. 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지하여 다음 단계를 클릭합니다.
속성 값(지정된 대로 값 입력 또는 옵션 선택)
이름 edge-security-policy
정책 유형 에지 보안 정책
기본 규칙 작업 거부
  1. 대상에 정책 적용 섹션에서 대상 추가를 클릭하고 다음 값을 설정합니다.
속성
유형 1 백엔드 버킷(외부 애플리케이션 부하 분산기)
백엔드 버킷 대상 1 lb-backend-bucket
  1. 완료를 클릭합니다.

  2. 정책 만들기를 클릭합니다.

에지 보안 정책 검증

백엔드 버킷 앞에 에지 보안 정책을 만들었으므로 예상대로 작동하는지 확인합니다.

보안 정책 확인

몇 분이 지난 후에 Cloud Armor 정책이 실행 중인지 확인할 수 있습니다.

명령줄에서 다음 명령어를 실행하면 403이 반환됩니다.

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

403 오류는 웹페이지 또는 웹 서버의 콘텐츠에 액세스할 권한이 없는 경우 발생합니다.

출력:

curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer

로그 조사

다음으로, 로그를 확인하여 적용된 에지 보안 정책을 살펴봅니다.

  1. 탐색 메뉴(탐색 메뉴 아이콘)에서 모든 제품 보기 > Observability > Logging > 로그 탐색기를 클릭합니다.

  2. 아래 스니펫을 쿼리 상자에 입력하고 쿼리 실행을 클릭합니다.

resource.type:(http_load_balancer) AND jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" AND severity>=WARNING
  1. 403 응답과 시행된 보안 정책을 확인합니다.

강조 표시된 403 응답 메시지와 보안 정책이 포함된 쿼리 페이지

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Cloud Armor용 에지 보안 정책 만들기

보안 정책 삭제

객체가 CDN 캐시에서 제공되고 있음을 증명하려면 Cloud Armor 보안 정책을 삭제하고 객체를 쿼리합니다. 원본 객체가 Cloud Storage에서 삭제되었으므로 객체가 에지 캐시에서 제공되고 있음을 알 수 있습니다.

  1. 탐색 메뉴(탐색 메뉴 아이콘)에서 모든 제품 보기 > 네트워크 보안 > Cloud Armor 정책 > edge-security-policy > 대상을 클릭합니다.
  2. lb-backend-bucket 대상을 선택하고 삭제를 클릭하여 대상 버킷을 삭제합니다. 삭제를 확인합니다.
  1. 몇 분 정도 기다린 후 Cloud Storage 버킷의 리소스에 다른 curl을 보냅니다.
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

이번에는 200 응답이 표시됩니다. 웹페이지가 의도한 대로 작동하고 있습니다.

출력:

student-cloudshell% curl -svo /dev/null http://34.98.81.123/google.png Trying 34.98.81.123... TCP_NODELAY set Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) GET /google.png HTTP/1.1 Host: YOUR_IP User-Agent: curl/7.64.1 Accept: */* HTTP/1.1 200 OK X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M Date: Mon, 13 Dec 2021 23:06:46 GMT Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT ETag: "8f9327db2597fa57d2f42b4a6c5a9855" x-goog-generation: 1639431957957903 x-goog-metageneration: 2 x-goog-stored-content-encoding: identity x-goog-stored-content-length: 5969 Content-Type: image/png x-goog-hash: crc32c=TeiHTA== x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== x-goog-storage-class: STANDARD Accept-Ranges: bytes Content-Length: 5969 Server: UploadServer Age: 1621 Cache-Control: public,max-age=3600 { [775 bytes data] Connection #0 to host 34.98.81.123 left intact Closing connection 0

몇 번 시도하면서 403 상태 코드가 표시되는지 확인합니다.

수고하셨습니다.

Cloud Storage 버킷을 만들고 이미지를 업로드하고 부하 분산기에 바인딩한 다음 Cloud CDN과 에지 보안 정책을 사용 설정했습니다.

설명서 최종 업데이트: 2024년 12월 10일

실습 최종 테스트: 2025년 9월 4일

Copyright 2026 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하는 가장 좋은 방법은 시크릿 모드 또는 시크릿 브라우저 창을 사용하는 것입니다. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.