Bảo mật lưu lượng truy cập vào Cloud Run

1. Tổng quan

Phòng thí nghiệm này hướng dẫn bạn cách hạn chế quyền truy cập vào dịch vụ Cloud Run và chỉ cho phép các yêu cầu từ một khối lượng công việc chạy tại chỗ hoặc trong VPC của dự án. Bạn có thể sử dụng hai lớp kiểm soát quyền truy cập: chế độ cài đặt truy cập và chính sách Quản lý danh tính và quyền truy cập (IAM).

5aed47d10595c878.png

Cài đặt truy cập

Chế độ cài đặt Ingress cho phép bạn lọc các yêu cầu dựa trên nguồn gốc mạng của chúng (nội bộ hoặc bên ngoài). Theo mặc định, tất cả yêu cầu đều được phép chuyển qua, bao gồm cả những yêu cầu từ Internet công cộng.

Chính sách IAM

Chính sách IAM cho phép bạn lọc các yêu cầu dựa trên danh tính của người gửi và thường được dùng để xác thực các yêu cầu giữa các dịch vụ.

Trong lớp học này, bạn sẽ tìm hiểu cách và thời điểm sử dụng chế độ cài đặt truy cập.

Máy chủ tại chỗ kết nối thông qua VPC

Trong lớp học lập trình này, chúng ta sẽ mô phỏng một khối lượng công việc tại chỗ. Để kết nối máy chủ lưu trữ tại chỗ với Cloud Run, bạn cần định cấu hình Quyền truy cập riêng tư của Google cho máy chủ lưu trữ tại chỗ. Việc này bao gồm việc thiết lập một cổng Cloud VPN trong mạng VPC, như minh hoạ dưới đây.

31611f6a2f12fd0c.png

Mô phỏng khối lượng công việc tại chỗ bằng cách sử dụng máy chủ chuyển tiếp trong VPC

Trong lớp học này, bạn sẽ mô phỏng việc gửi yêu cầu từ máy chủ cục bộ bằng cách gửi yêu cầu từ máy ảo Compute Engine trong VPC, như minh hoạ ở đây.

aebf22740c7a84f0.png

Máy ảo Compute Engine mà bạn sẽ sử dụng làm máy chủ chuyển tiếp có cùng nguồn gốc mạng với Cổng VPN trên đám mây. Đó là lý do bạn có thể sử dụng máy ảo này để mô phỏng việc gửi yêu cầu từ một khối lượng công việc tại chỗ.

2. Cách thiết lập và các yêu cầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị cho người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
  • Mã dự án là duy nhất trên tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Nếu không thích mã được tạo, bạn có thể tạo một mã ngẫu nhiên khác. Ngoài ra, bạn có thể thử dùng tên của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi thông tin này sau bước này và thông tin này sẽ được giữ nguyên trong suốt thời gian diễn ra dự án.
  • Xin lưu ý rằng có một giá trị thứ ba là Mã dự án mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên để không bị tính phí sau khi hoàn tất hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Thiết lập môi trường

  1. Đặt biến môi trường thành Mã dự án để sử dụng trong các lệnh sau:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Bật các API cần thiết để thực thi lớp học này.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Nhân bản kho lưu trữ ứng dụng mẫu và chuyển đến thư mục
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Đặt khu vực và vùng mặc định cho Compute Engine và Cloud Run
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. Triển khai dịch vụ

Trước tiên, bạn sẽ triển khai dịch vụ và cho phép truy cập công khai. Sau khi bạn xác minh rằng có thể gửi yêu cầu từ trình duyệt, chúng tôi sẽ khoá dịch vụ và chỉ cho phép các yêu cầu từ các nguồn mạng nội bộ.

Khi bạn chạy lệnh sau, hãy làm theo các hướng dẫn sau:

  • Vị trí mã nguồn (...): Xác minh rằng bạn đang ở trong thư mục partner-registration-service rồi nhấn enter để chấp nhận mặc định
  • Tên dịch vụ (partner-registration-service): Nhấn Enter để chấp nhận mặc định
  • Cho phép các lệnh gọi chưa xác thực đến [partner-registration-service] (y/N)? Đã phê duyệt
gcloud run deploy 

Khi hoàn tất, lệnh này sẽ liệt kê URL của dịch vụ Cloud Run. Kết quả sẽ có dạng như trang thông tin sau:

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

Mở URL dịch vụ trong trình duyệt. Bạn sẽ thấy kết quả sau:

Partner registration service: RUNNING

Đặt dịch vụ để chỉ cho phép các yêu cầu nội bộ

Bây giờ, bạn sẽ sử dụng chế độ cài đặt truy cập của dịch vụ Cloud Run để chỉ cho phép các yêu cầu từ các nguồn nội bộ. Nguồn nội bộ bao gồm các tài nguyên trong mạng VPC nằm trong cùng một dự án (hoặc phạm vi VPC Service Controls) với dịch vụ Cloud Run. Đây là nguồn phù hợp nhất cho trường hợp sử dụng của chúng ta.

Ngoài ra, các yêu cầu từ các sản phẩm khác của Google Cloud được coi là nội bộ, ngay cả khi các yêu cầu đó không thuộc VPC. Ví dụ: Pub/Sub và Quy trình công việc.

Các yêu cầu từ những nguồn này vẫn nằm trong mạng của Google, ngay cả khi chúng truy cập vào dịch vụ của bạn tại URL run.app và không cho phép truy cập công khai.

Cập nhật dịch vụ để chỉ cho phép các yêu cầu nội bộ:

gcloud run services update partner-registration-service --ingress=internal

Nếu bạn mở lại URL của dịch vụ, bạn sẽ thấy thông báo "Lỗi: Cấm – Không được phép truy cập"

Vì trình duyệt của bạn gửi yêu cầu từ một nguồn gốc mạng bên ngoài chứ không phải từ một nguồn gốc nội bộ đến dự án Google Cloud, nên đây chính xác là điều bạn mong đợi sẽ xảy ra. Dịch vụ của bạn hiện đã an toàn hơn.

4. Tạo máy ảo Compute Engine làm máy chủ chuyển

Bước tiếp theo là mô phỏng các yêu cầu từ máy chủ cục bộ thông qua cổng VPN trên đám mây, bằng cách tạo một thực thể Compute Engine trong VPC để dùng làm máy chủ chuyển tiếp:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

Kết quả của lệnh này sẽ tương tự như sau:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Gửi yêu cầu từ phiên bản Compute Engine đến dịch vụ

Bây giờ, bạn sẽ mở một cửa sổ dòng lệnh trên máy ảo và gửi yêu cầu trực tiếp từ máy trong mạng VPC.

Nếu lệnh sau nhắc bạn thiết lập SSH trong Cloud Shell, hãy làm theo hướng dẫn:

gcloud compute ssh jump-server

Lấy URL của dịch vụ Cloud Run bằng lệnh sau:

gcloud run services describe partner-registration-service --region us-central1

Vài dòng đầu tiên của kết quả sẽ có dạng như sau:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

Bây giờ, hãy sao chép URL và gửi yêu cầu từ thực thể Compute Engine bằng curl. Yêu cầu này sẽ thành công vì thực thể máy ảo chạy trong mạng VPC của dự án – đây là một nguồn nội bộ.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Kết quả sẽ là:

Partner registration service: RUNNING

5. Còn về tính năng kiểm soát quyền truy cập dựa trên IAM thì sao?

Lớp học này đã hướng dẫn bạn cách và thời điểm sử dụng chế độ cài đặt truy cập. Chế độ cài đặt Ingress là bước đầu tiên quan trọng nếu bạn đang kết nối một khối lượng công việc tại chỗ với Cloud Run.

Bạn cần phải nỗ lực nhiều hơn để triển khai tính năng kiểm soát quyền truy cập dựa trên IAM, đặc biệt là khi bạn gọi từ máy chủ cục bộ:

  • IAM yêu cầu bạn quản lý thông tin xác thực tài khoản dịch vụ có thời hạn dài trên máy chủ lưu trữ
  • IAM yêu cầu thay đổi mã để ký yêu cầu bằng thông tin xác thực tài khoản dịch vụ.

Google đề xuất phương pháp kiểm soát quyền truy cập nhiều lớp. Việc sử dụng chế độ cài đặt truy cập để chỉ cho phép truy cập vào máy chủ nội bộ là bước đầu tiên rất quan trọng, nhưng đừng dừng lại ở đó!

6. Xin chúc mừng!

Xin chúc mừng, bạn đã hoàn tất lớp học lập trình!

Bước tiếp theo:

Khám phá các lớp học lập trình khác về Cymbal Eats:

Dọn dẹp

Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong hướng dẫn này, hãy xoá dự án chứa các tài nguyên đó hoặc giữ lại dự án và xoá từng tài nguyên.

Xoá dự án

Cách dễ nhất để loại bỏ tính năng thanh toán là xoá dự án mà bạn đã tạo cho hướng dẫn này.

Tài liệu tham khảo hữu ích

Sau đây là các tài nguyên bổ sung giúp bạn tìm hiểu thêm về hai lớp kiểm soát quyền truy cập trên Cloud Run.