什么是带有签名的临时链接?
带签名的URL 是一个很好的方式来限时访问存储在 Google Cloud Storage (GCS) 存储桶中的私有的内容。
比如说,你希望用户可以直接读写 GCS 存储桶中的对象,而不需要拥有一个 Google 账户。你可以通过你的应用程序特有的逻辑来为用户提供一个签名 URL,从而在一定时间内授予他们对该资源进行读写删除的权限。
在 Google Cloud Storage 中有兩種簽名請求的類型——使用 HMAC 簽名的 URL 和使用 RSA 簽名的 URL 以及 相關描述 和 相關說明。
带签名URL的安全隐患签名的 URL 在其查询字符串中包含验证信息,允许没有权限的用户对某个资源执行特定的资源访问操作。生成后,任何人只要知道该 URL 就可以在 URL 到期时间到达或在用于签名 URL 的密钥被替换之前访问该资源。
这种行为存在安全隐患,因为它允许恶意内部人员生成并分享带有签名的 URL,从而可能使未经授权的用户访问到敏感 GCS 资源。
使用带有签名的 URL 来减少风险:减少风险性以下是一些用于管理签名 URL 相关风险的控制。
检测使用带签名的URL:你可以通过使用 Cloud Monitoring 中预设的 authn/authentication_count
存储指标,来检测带有 HMAC 和 RSA 验证类型的带签名 URL 请求。详情请参阅 此处。
统计项目中HMAC/RSA签名的请求数
您可以设置基于指标的警报,这样当任何请求超出特定阈值时,您就能收到通知。更多详情,请参阅这里。
另外,Signed URL 请求会记录用于创建它们的认证信息。这使您通过检查 数据访问审核日志 可以识别误用。但是,默认情况下这些日志默认是禁用的(除了 BigQuery)。要跟踪 Cloud Storage 访问,您需要使用这些日志,并且需要支付费用。
防止生成带签名的URLHMAC签名的URL — 您可以使用预构建的组织策略约束项 constraints/storage.restrictAuthTypes
限制通过HMAC密钥签名的请求,并在组织级别应用该约束。详情请参阅 这里。
你可以限制由服务账户 HMAC 密钥、用户账户 HMAC 密钥或两者签署的请求。被限制类型的 HMAC 密钥不能再在该资源中创建或激活,约束会强制执行。现有的 HMAC 密钥仍然存在,但不再可用来签署请求。它们可以被停用或删除,但不能重新激活或恢复使用。
RSA签名的URL — 唯一的方法是防止别人创建RSA签名的URL,不授予某人相关的读写权限。没有特定的权限仅用于创建签名的URL。拥有获取、创建或删除存储对象的权限的用户可以创建对应的签名URL。
从某种意义上讲,如果相关人员已经可以直接访问资源,是否通过生成签名链接访问就没有太大区别了。
防止滥用带签名的 URL签名的 URL 会受到您定义的任何 VPC 服务控制 的限制。因此,您可以通过创建一个包含 Cloud Storage API 作为受保护服务的 服务边界,来降低通过签名 URL 泄漏数据的风险。这样可以阻止服务边界外部访问存储对象。
您可以选择通过访问级别来允许从外围范围之外访问受保护的服务(了解如何使用访问级别)。访问级别定义了一组属性,这些属性必须得到满足,以使请求得到响应。访问级别可以包含各种标准,例如IP地址、用户或设备的身份。这样只会允许符合您指定标准的经过签名的请求。
结束语签名 URL 是一种有用的工具,适用于那些希望在安全和实用之间找到平衡的场景。这篇博客为那些觉得签名 URL 的安全风险大于其好处的客户提供了缓解措施。对于那些客户来说,签名 URL 的安全风险超过了其益处。