Google 致力于为黑人社区推动种族平等。查看具体举措

保护您的 Firebase ML iOS 应用的云凭据

如果您的 iOS 应用使用 Firebase ML 的云 API 之一,则在生产中启动应用之前,您应该采取一些额外的步骤来防止未经授权的 API 访问。

1. 缩小现有 API 密钥的范围

首先,配置您现有的 API 密钥以禁止访问 Cloud Vision API:

  1. 打开 Google Cloud Console 的凭据页面。出现提示时,选择与 Firebase 项目同名的项目。

  2. 对于列表中的每个 API 密钥,打开编辑视图,然后在密钥限制部分中,将Cloud Vision API之外的所有可用 API 添加到列表中。

    当您配置 API 密钥的 API 限制时,您明确声明了密钥授予访问权限的 API。默认情况下,当 API 限制部分为空时,API 密钥可用于访问为项目启用的任何 API。

现在,您现有的 API 密钥不会授予对云机器学习服务的访问权限,但它们将继续适用于您自己启用的任何 API,或者在您设置 Firebase 时自动启用的 API。

请注意,如果您将来启用任何其他 API,您还必须将它们添加到 API 密钥的 API 限制列表中。

2. 创建一个用于 Firebase ML 的新 API 密钥

接下来,为 Firebase ML 创建一个仅允许调用 Cloud Vision API 的新 API 密钥:

  1. 返回凭据页面。确保您的 Firebase 项目仍处于选中状态。

  2. 单击创建凭证 > API 密钥。记下新的 API 密钥,然后单击Restrict key

  3. 在 Key Restrictions 部分,仅将 Cloud Vision API 添加到列表中。

此 API 密钥仅授予对 Cloud Vision API 的访问权限,并可被 Firebase ML 用于访问基于云的模型。

为了帮助减轻密钥泄露的后果,您应该将 Cloud Vision API 的每用户配额从其默认设置减少。这样做:

  1. 打开 Google Cloud Console 的Cloud Vision API 配额页面。出现提示时,选择与 Firebase 项目同名的项目。

  2. Requests部分,将Requests per minute per user配额设置为适合您的应用程序的值。例如,如果您的应用程序涉及上传文档图片以获取其文本,则用户不太可能每隔几秒钟执行一次以上操作,因此 30-40 的配额可能是安全的。

    请注意,在此上下文中,“每个用户的请求数”是指来自单个 IP 地址的请求。如果您希望多个用户同时从 NAT 后面使用您的应用程序,您可能需要考虑这一点。

4. 使用您的 Firebase ML API 密钥调用 Cloud API

最后,在您的应用中,配置 Firebase ML 以使用您的新 API 密钥。

由于 Firebase ML API 密钥允许未经身份验证访问 Cloud Vision API,因此务必对密钥保密,以防止未经授权的使用和向您的结算帐号收费。为此,您应该避免在您的应用程序二进制文件中包含您的 API 密钥。相反,在应用程序运行时,验证已知的良好用户已登录,然后才从服务器检索 API 密钥。

即使遵守这些做法,API 密钥也有可能被泄露。您应该采取措施帮助减轻密钥泄露的后果,例如如上所述减少 API 的每个用户配额、实施密钥轮换策略以及向不同的用户组颁发不同的密钥。

在您的应用安全获取 API 密钥后,当您想要调用 Firebase ML Cloud API 时,请指定密钥:

迅速

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)
}

目标-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];
}

此外,您应该遵循保护 API 密钥中的一般建议。

下一步

有关在使用其他 Firebase 功能时准备应用以启动的信息,请参阅启动清单