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 một 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 trên cơ sở hạ tầng riêng hoặc trong đám mây riêng ảo (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 lưu lượng vào và chính sách Quản lý danh tính và quyền truy cập (IAM).

5aed47d10595c878.pngS

Cài đặt lưu lượng vào

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

Chính sách quản lý danh tính và quyền truy cập (IAM)

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

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách thức và thời điểm sử dụng chế độ cài đặt lưu lượng vào.

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

Trong phòng thí nghiệm 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ột máy chủ lưu trữ tại cơ sở riêng với Cloud Run, bạn phải định cấu hình Quyền truy cập riêng tư trên Google cho các máy chủ lưu trữ tại cơ sở. Việc này bao gồm cả việc thiết lập cổng vào Cloud VPN trong mạng VPC, như minh hoạ dưới đây.

31611f6a2f12fd0c.pngS

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

Trong phòng thí nghiệm này, bạn sẽ mô phỏng việc gửi yêu cầu từ một máy chủ lưu trữ tại chỗ bằng cách gửi yêu cầu từ một máy ảo Compute Engine trong VPC, như minh hoạ dưới đây.

aebf22740c7a84f0.png

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

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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ị của những 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 trong 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 bạn không quan tâm đến sản phẩm đó là gì. 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 (mã này thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số 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 này.
  1. Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạ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 một biến môi trường thành Mã dự án để sử dụng trong các lệnh sau này:
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 phòng thí nghiệm này.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Sao chép 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à để dịch vụ này có thể truy cập công khai. Sau khi bạn xác minh rằng bạn 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 dịch vụ đăng ký đối tác và nhấn phím Enter để chấp nhận giá trị mặc định
  • Tên dịch vụ (partner-registration-service): Nhấn Enter để chấp nhận giá trị mặc định
  • Cho phép các lệnh gọi chưa được xác thực tới [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 của dịch vụ trong trình duyệt. Bạn sẽ thấy kết quả sau:

Partner registration service: RUNNING

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

Giờ đây, bạn sẽ sử dụng chế độ cài đặt lưu lượng vào của dịch vụ Cloud Run để chỉ cho phép 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 thuộc cùng dự án (hoặc phạm vi của dịch vụ VPC Service Controls) với dịch vụ Cloud Run nên đây là dịch vụ lý tưởng cho trường hợp sử dụng của chúng tôi.

Ngoài ra, yêu cầu của các sản phẩm khác của Google Cloud được coi là nội bộ, ngay cả khi những yêu cầu đó không thuộc VPC. Những sản phẩm đó bao gồm Pub/Sub và Workflows.

Yêu cầu từ các nguồn này vẫn nằm trong mạng Google, ngay cả khi những yêu cầu đó truy cập vào dịch vụ của bạn tại URL run.app và quyền truy cập công khai sẽ bị cấm.

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 dịch vụ, sẽ có thông báo "Lỗi: Bị cấm - Quyền truy cập bị cấm"

Vì trình duyệt của bạn gửi yêu cầu từ một nguồn bên ngoài mạng chứ không phải từ một nguồn nội bộ gốc tới dự án Google Cloud, nên đây chính xác là những gì bạn mong đợi. 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ột máy chủ tại cơ sở thông qua cổng Cloud VPN, bằng cách tạo một phiên bản Compute Engine trong VPC để dùng làm máy chủ chuyển:

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 thiết bị đầu cuối 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 đây 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

Một vài dòng đầu tiên của kết quả đầu ra 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 rồi gửi yêu cầu từ thực thể Compute Engine bằng cách sử dụng curl. Yêu cầu này được thực hiện thành công vì phiên bản 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ẽ cho biết:

Partner registration service: RUNNING

5. Thế còn quyền kiểm soát quyền truy cập dựa trên IAM thì sao?

Phòng thí nghiệm này cho bạn biết cách thức và thời điểm sử dụng chế độ cài đặt lưu lượng vào. Chế độ cài đặt dữ liệu đầu vào là bước đầu tiên phù hợp nếu bạn đang kết nối khối lượng công việc tại chỗ với Cloud Run.

Việc kiểm soát quyền truy cập dựa trên IAM đòi hỏi nhiều nỗ lực hơn khi triển khai, đặc biệt khi bạn gọi từ một máy chủ lưu trữ tại cơ sở:

  • IAM yêu cầu bạn quản lý thông tin đăng nhập tài khoản dịch vụ dài hạn trên máy chủ
  • 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 khuyến nghị sử dụng phương pháp nhiều lớp để kiểm soát quyền truy cập. Sử dụng chế độ cài đặt lưu lượng vào để hạn chế quyền truy cập chỉ vào các máy chủ nội bộ là bước đầu tiên rất hữu ích nhưng đừng dừng lại ở đó!

6. Xin chúc mừng!

Xin chúc mừng, bạn đã hoàn thành 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 làm phát sinh chi phí cho các tài nguyên được sử dụng trong hướng dẫn này trong tài khoản Google Cloud của bạn, 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 riêng lẻ.

Xoá dự án

Cách dễ nhất để loại bỏ việc thanh toán là xoá dự án bạn đã tạo cho phần hướng dẫn.

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.