Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

  1. 打开证书的谷歌云端控制台的页面。出现提示时,选择您的项目。

  2. 对于列表中的每个现有 API 密钥,打开编辑视图。

  3. API的限制部分,选择限制键,然后添加到列表中的所有的到你想要的API密钥来访问的API。确保包括云愿景API。

    当您配置一个API密钥的API限制,您明确声明,其主要访问的API。默认情况下,当API限制部分已不限制键选择,API密钥可以用来访问为项目启用的任何API。

现在,您现有的API密钥不会授予访问云ML服务,但每个键将继续工作,为您添加到它的API限制列表中的任何的API。

需要注意的是,如果你能够在未来的任何额外的API,你必须将它们添加到API的限制名单适用的API密钥。

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

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

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

  2. 单击创建证书> API密钥。记下新的API密钥,然后单击限制的关键

  3. API的限制部分,选择限制键,然后添加到列表中云愿景API。

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

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

  1. 打开云愿景API配额的谷歌云端控制台的页面。出现提示时,选择您的项目。

  2. 请求部分,设置每用户配额分钟的请求,为您的应用程序的东西合理。例如,如果您的应用程序涉及上传文档图片以获取其文本,则用户不太可能每隔几秒钟执行一次以上操作,因此 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密钥

下一步

请参阅发布清单上使用其他火力地堡功能时准备您的应用程序发布的信息。