Bảo vệ thông tin đăng nhập của ứng dụng Cloud ML Apple trên Firebase

Nếu ứng dụng Apple của bạn sử dụng một trong các API đám mây của Firebase ML, thì trước khi ra mắt ứng dụng trong quá trình phát hành công khai, bạn nên thực hiện một số bước bổ sung để ngăn chặn hành vi truy cập trái phép vào API.

1. Giảm phạm vi của các khoá API hiện có

Trước tiên, hãy định cấu hình các khoá API hiện có để không cho phép truy cập vào Cloud Vision API:

  1. Mở trang Thông tin đăng nhập của bảng điều khiển Google Cloud. Khi được nhắc, hãy chọn dự án của bạn.

  2. Đối với mỗi khoá API hiện có trong danh sách, hãy mở chế độ chỉnh sửa.

  3. Trong phần API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế cho khoá), sau đó thêm tất cả các API mà bạn muốn khoá API có quyền truy cập vào danh sách. Nhớ không thêm Cloud Vision API.

    Khi định cấu hình các quy tắc hạn chế đối với API của một khoá API, bạn đang khai báo rõ ràng những API mà khoá đó có quyền truy cập. Theo mặc định, khi bạn chọn Don't restrict key (Không hạn chế khoá) trong mục API restrictions (Hạn chế cho API), khoá API có thể dùng để truy cập vào mọi API được bật cho dự án.

Giờ đây, các khoá API hiện có của bạn sẽ không cấp quyền truy cập vào các dịch vụ ML trên đám mây, nhưng mỗi khoá sẽ tiếp tục hoạt động cho mọi API mà bạn đã thêm vào danh sách hạn chế API.

Xin lưu ý rằng nếu bật thêm API trong tương lai, bạn phải thêm các API đó vào danh sách quy tắc hạn chế đối với API cho khoá API hiện hành.

2. Tạo một khoá API mới để sử dụng với Firebase ML

Tiếp theo, hãy tạo một khoá API mới cho Firebase ML chỉ cho phép các lệnh gọi đến Cloud Vision API:

  1. Quay lại trang Credentials (Thông tin xác thực). Nhớ chọn dự án Firebase của bạn.

  2. Nhấp vào Tạo thông tin xác thực > Khoá API. Ghi lại khoá API mới, sau đó nhấp vào Restrict key (Hạn chế cho khoá).

  3. Trong phần API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế cho khoá), sau đó chỉ thêm Cloud Vision API vào danh sách.

Khoá API này chỉ cấp quyền truy cập vào Cloud Vision API và có thể được Firebase ML dùng để truy cập vào các mô hình dựa trên đám mây.

Để giảm thiểu hậu quả của khoá bị xâm nhập, bạn nên giảm hạn mức cho mỗi người dùng của Cloud Vision API so với chế độ cài đặt mặc định. Cách làm như sau:

  1. Mở trang Định mức Cloud Vision API của bảng điều khiển Google Cloud. Khi được nhắc, hãy chọn dự án của bạn.

  2. Trong phần Yêu cầu, hãy đặt hạn mức Số yêu cầu mỗi phút cho mỗi người dùng thành một giá trị hợp lý cho ứng dụng của bạn. Ví dụ: nếu ứng dụng của bạn liên quan đến việc tải ảnh tài liệu lên để lấy lại văn bản, thì người dùng khó có thể thực hiện thao tác đó nhiều lần trong vài giây, vì vậy, hạn mức từ 30 đến 40 có lẽ sẽ an toàn.

    Xin lưu ý rằng trong ngữ cảnh này, "số yêu cầu trên mỗi người dùng" đề cập đến số yêu cầu từ một địa chỉ IP duy nhất. Bạn có thể cần cân nhắc điều này nếu dự kiến nhiều người dùng sẽ sử dụng ứng dụng của bạn cùng lúc khi ở sau một NAT.

4. Gọi các API trên đám mây bằng khoá API Firebase ML

Cuối cùng, trong ứng dụng của bạn, hãy định cấu hình Firebase ML để sử dụng khoá API mới.

Vì khoá API Firebase ML cho phép truy cập vào Cloud Vision API mà không cần xác thực, nên bạn cần giữ bí mật khoá này để tránh trường hợp sử dụng trái phép và tính phí vào tài khoản thanh toán của bạn. Để làm vậy, bạn không nên đưa khoá API vào tệp nhị phân của ứng dụng. Thay vào đó, trong thời gian chạy ứng dụng, hãy xác minh rằng một người dùng đáng tin cậy đã đăng nhập, rồi sau đó mới truy xuất khoá API từ một máy chủ.

Ngay cả khi bạn tuân thủ các phương pháp này, khoá API vẫn có thể bị xâm phạm. Bạn nên thực hiện các bước để giảm thiểu hậu quả của khoá bị xâm phạm, chẳng hạn như giảm hạn mức API cho mỗi người dùng như mô tả ở trên, triển khai chính sách xoay vòng khoá và cấp các khoá khác nhau cho các nhóm người dùng khác nhau.

Sau khi ứng dụng của bạn đã lấy được khoá API một cách an toàn, khi bạn muốn gọi một Firebase ML Cloud API, hãy chỉ định khoá:

Swift

if let cloudVisionKey = getYourApiKey() {  // See note above about securing your API key
    let options = VisionCloudDetectorOptions()
    options.apiKeyOverride = cloudVisionKey
    let cloudDetector = Vision.vision().cloudLandmarkDetector(options: options)
}

Objective-C

NSString *cloudVisionKey = [self getYourApiKey];  // See note above about securing your API key
if (cloudVisionKey != nil) {
    FIRVisionCloudDetectorOptions *options =
            [[FIRVisionCloudDetectorOptions alloc] init];
    options.APIKeyOverride = cloudVisionKey;
    FIRVisionCloudLandmarkDetector *landmarkDetector =
            [vision cloudLandmarkDetectorWithOptions:options];
}

Ngoài ra, bạn nên làm theo lời khuyên chung trong phần Bảo mật khoá API.

Các bước tiếp theo

Hãy xem danh sách kiểm tra khi ra mắt để biết thông tin về cách chuẩn bị ứng dụng ra mắt khi sử dụng các tính năng khác của Firebase.