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 trên đám mây của Firebase ML, thì trước khi ra mắt ứng dụng trong môi trường thực tế, 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 xác thực của Google Cloud console. Khi được nhắc, hãy chọn dự án của bạn.

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

  3. Trong phần API restrictions (Quy tắc hạn chế đối với API), hãy chọn Restrict key (Hạn chế đối với 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 API restrictions (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 các 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ế đối với khoá) trong phần API restrictions (Quy tắc hạn chế đối với API), một khoá API có thể được 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ó 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 đối với mọi API mà bạn đã thêm vào danh sách API restrictions (Quy tắc hạn chế đối với API).

Xin lưu ý rằng nếu bật thêm bất kỳ API nào trong tương lai, bạn phải thêm các API đó vào danh sách API restrictions (Quy tắc hạn chế đối với API) cho khoá API áp dụng.

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 Thông tin xác thực. Hãy nhớ chọn dự án Firebase của bạn.

  2. Nhấp vào Create credentials > API key (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ế đối với khoá).

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

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

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

  1. Mở trang Hạn mức của Cloud Vision API trong Google Cloud console. Khi được nhắc, hãy chọn dự án của bạn.

  2. Trong phần Requests (Yêu cầu), hãy đặt hạn mức Requests per minute per user (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 hình ảnh của một tài liệu lên để lấy lại văn bản của tài liệu đó, thì người dùng khó có thể thực hiện việc đó nhiều lần trong vài giây. Vì vậy, hạn mức từ 30 đến 40 có thể sẽ an toàn.

    Xin lưu ý rằng trong bối cảnh này, "số yêu cầu mỗi người dùng" đề cập đến các yêu cầu từ một địa chỉ IP. 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 từ phía 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, 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 không được xác thực vào Cloud Vision API, nên bạn cần giữ bí mật khoá này để ngăn chặn hành vi sử dụng trái phép và các khoản phí đối với tài khoản thanh toán của bạn. Để làm như vậy, bạn nên tránh đư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 tốt đã đăng nhập, rồi sau đó mới truy xuất khoá API từ một máy chủ.

Ngay cả khi 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úp giảm thiểu hậu quả của một khoá bị xâm phạm, chẳng hạn như giảm hạn mức của API cho mỗi người dùng như mô tả ở trên, triển khai các chính sách luân phiên 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 đã thu thập khoá API một cách an toàn, khi bạn muốn gọi một Firebase ML API trên đám mây, 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

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