GOOGLE CLOUD PLATFORM CHO NGƯỜI MỚI BẮT ĐẦU (PHẦN 4 - Cloud Functions)

Create a multiregional http monitor in less than five minutes with ...

Google Cloud Functions và những cơ chế bảo mật khét tiếng

Thì Cloud Functions này nó kiểu như một cái trigger, là một “đơn vị nghe lén”. Ví dụ làm sao để mỗi lần có ai upload file lên storage, thì hãy ghi thông tin đó lại vào database. Trong tất cả API google cung cấp thì chỉ có Cloud Function là làm được điều đó. Và nó được gọi là trigger.


Có rất nhiều trigger được cung cấp, tuy nhiên có một cái mình đang được yêu cầu invest là HTTP trigger. Bài toán đặt ra là khi bên BE Minup có sự thay đổi thông tin, thì hãy gọi 1 API để update db bên TelApp.


Về việc viết Function để làm việc đó thì khá dễ, google cung cấp các ngôn ngữ bao gồm Python, NodeJS, Go. Ae có thể code trên máy của mình, sau đó nén lại thành file zip rồi up lên cho nó chạy.


Lưu ý: File zip upload phải gồm 2 file: 1 file main.py và 1 file requirement.txt

File requirement.txt dùng để khai báo những thư viện ngoài mình dùng bên file main.py, kiểu như Podfile bên iOS

Để deploy một Function, ae vào Cloud Functions -> Create Function ra được giao diện này

Đặt tên, chọn memory, chọn trigger là HTTP, upload file zip lên. Nhớ chọn tên function muốn thực thi có trong file main.py

Xong, nhấn CREAT.


Mọi chuyện sẽ không có gì, nếu google nó không bật mode bảo mật thép cho cái function vừa tạo. Dĩ nhiên mình vẫn vượt rào đc, nếu check vào cái Allow unauthenticated invocations kia. Nhưng khách hàng lại không muốn vậy, do đó cần phải tạo xác thực mỗi khi gọi tới Functions này.


Mục tiêu là tạo ra được cái token để gắn vào header cho Function nhận biết được đâu là bạn đâu là thù. Để làm được điều này, ae cần generate ra một file json, đại khái file này chứa các thông tin xác thực nhờ đó phía server có thể chạy một thuật toán để tạo ra được token.


Bắt đầu generate file json, còn gọi là service account key.

Vào APIs & Services -> Credentials -> Create Credentials -> Service Account ra được màn hình này

Ở đây ae nhập service account name, nó tự động generate cái service ID. Xong qua bước 2 chọn role cho nó, ở đây thì do mình làm Cloud Functions nên chỉ chọn role Admin cho Cloud Functions là đủ, như hình dưới


Continue qua bước 3 và nhấn Create Key, chọn kiểu JSON và lưu về máy. Cái key này chỉ lưu đc 1 lần duy nhất và nhạy cảm, cần được bảo mật :v


Done phần nguyên liệu, bây giờ qua code thuật toán để tạo Token (nghe hầm hố vl :v )


Vào lại project, ae đặt file account private json trên vào thư mục resources và tạo class GoogleJwtClient với vài dòng code sau




Với đống code này, ae quan tâm 3 cái chính là: SCOPE, cái file service private tải ở trên và TargetAudience. Còn code còn lại là thư viện của google làm việc. Nói mới nhớ cần add dependency này vào pom.xml

<dependency>

 <groupId>com.google.auth</groupId>

 <artifactId>google-auth-library-oauth2-http</artifactId>

 <version>0.20.0</version>

</dependency>


Xong, function generateJwt() sẽ return một token, ae dùng nó gắn vào header Authorization để được vượt qua bảo mật.


Chúc ae thành công với document này, mọi thắc mắc chưa chắc mình giải đáp được =)). Regards


*************************************************************************************

Comments