确保 Cloud Functions 函数的安全

本页面简要介绍使用 Cloud Functions 函数资源控制互动的方式。

访问权限控制

您可以通过两种方法控制 Cloud Functions 函数的访问权限:

使用身份保护访问权限

控制对函数的访问权限的一种方法是要求请求实体使用凭据来标识自己。凭据是某种类型的“名称”,由实体知道或有权访问的 Secret(如密码或硬件加密狗)提供保护。默认情况下,函数会部署为私有函数,并且需要此类凭据,但您可以将函数部署为公开函数,即不要求一个函数。

该过程的第一步是验证凭据,以确保请求者的真实性并提供正确的名称和 Secret 组合。此步骤称为 Authentication

请求者的身份经过身份验证后,就可以评估其访问权限级别(该身份被授予的权限)。此步骤称为 Authorization

Authentication

Cloud Functions 函数支持两种不同的身份,这些身份也称为“主帐号”

  • 服务帐号:此类特殊帐号充当非个人(例如函数、应用或虚拟机)的身份。它们为您提供了一种对非人员的身份进行身份验证的方法。
  • 用户帐号:这些帐号代表个人 Google 帐号持有人,或 Google 控制的实体(例如 Google 群组)的成员。

对于服务帐号和用户帐号,凭据的名称部分通常是与该帐号关联的电子邮件地址。用户帐号的 Secret 通常是密码,对于服务帐号,它通常是与帐号一起创建的密钥对的私钥。

但用户密码和服务帐号密钥本身非常强大:它们可以提供对数据和功能的广泛访问权限,并且在主动被撤消或更改之前一直有效。因此,为了限制凭据泄露时可能造成的损害,在 Google Cloud 中,此核心凭据将替换为基于其的短期凭据(令牌),其生命周期有限并且临时创建为请求序列的一部分。令牌随请求一起传递,用于安全地对帐号进行身份验证。

Cloud Functions 中使用两种令牌:访问令牌和 ID 令牌。访问令牌通常用于对 API 调用进行身份验证,ID 令牌用于对开发者创建的代码的调用进行身份验证,例如,如果一个函数调用另一个函数。令牌本身是使用 OAuth 2 框架及其扩展程序 Open Identity Connect 创建的,但该序列非常复杂且容易出错,因此我们强烈建议使用 Cloud 客户端库来管理该过程。

授权

发出请求的实体的身份得到确认后,必须评估系统允许请求者执行的操作。此评估基于已经过身份验证的帐号在设置时所获得的权限。Cloud Functions 函数使用 Identity and Access Management (IAM) 来执行此操作。角色(为方便起见而组合在一起的各个权限集)会直接或通过名为政策的配置分配给帐号。角色集中的每项权限通常对应于所请求服务公开的单个 REST API 调用。如需详细了解此过程,请参阅通过 IAM 授予访问权限

基于网络的访问权限控制

您还可以通过指定各个函数的网络设置来限制访问权限。这样,您就可以精确地控制函数的网络入站流量和出站流量。

隔离和沙盒化

函数实例在内部使用 gVisor 沙盒化平台彼此隔离。根据设计,某个函数无法访问其他函数的操作环境。