Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 云CDN签名url与云存储签名url?_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

Google cloud platform 云CDN签名url与云存储签名url?

Google cloud platform 云CDN签名url与云存储签名url?,google-cloud-platform,google-cloud-storage,Google Cloud Platform,Google Cloud Storage,云存储已签名url文档: 云CDN已签名url文档: 他们之间有什么区别?我不知道该用哪一个 我的情况如下: 我想将我的bucket和objects从public改为notpublic,这意味着我将从权限中删除alluser成员 我正在寻找一种方法,使我的应用程序的用户可以通过某种身份验证访问对象(图像、媒体)。否则,internet上的所有用户都将访问我的存储桶和对象。用户不需要谷歌账户,所以我认为IAM和ACL不是正确的方式 我不确定云存储签名url是否正确。还有一个问题是,我已经在我的数据

云存储已签名url文档:

云CDN已签名url文档:

他们之间有什么区别?我不知道该用哪一个

我的情况如下:

我想将我的bucket和objects从public改为notpublic,这意味着我将从权限中删除
alluser
成员

我正在寻找一种方法,使我的应用程序的用户可以通过某种身份验证访问对象(图像、媒体)。否则,internet上的所有用户都将访问我的存储桶和对象。用户不需要谷歌账户,所以我认为
IAM
ACL
不是正确的方式

我不确定云存储签名url是否正确。还有一个问题是,我已经在我的数据库中使用云存储对象public url存储了很多url,如下所示:

https://storage.googleapis.com/ez2on/1536250853638-NN.jpg

当客户端(前端)尝试访问此数据时,我应该如何在后端为这些旧数据生成签名url


感谢您的建议。

关于签名URL,它们在内部的工作原理大致相同,并且或多或少以相同的方式生成URL。云存储有一个内置的CDN,所以使用云存储签名URL就足够了

使用已签名的URL,您不需要将用户列入白名单,您只需向他们发送URL,他们可以在有限的时间内访问该URL

对于您的用例,签名URL可能不是最好的选择,因为它们的生命周期有限,因此我建议您的用户使用应用程序自己的逻辑(而不是IAM)登录到您的应用程序,或者在不登录的情况下访问应用程序(如果不需要登录),然后让应用程序通过服务帐户(IAM)处理用户对云存储对象的请求:

  • 用户
    (非谷歌/谷歌)登录到
    应用
    (应用登录,非IAM)

  • 用户
    请求由
    应用程序
    提供的对象,但不包含内部数据(bucket的路径等)

  • app
    使用自己的服务帐户(IAM)请求对象到
    云存储

  • 云存储
    将对象传递给应用,应用传递给用户

  • 使用此服务帐户解决方案,您仍然可以使用保存在数据库中的URL。如果要使用已签名的URL,则应不断修改数据库,这不是最佳选择

    您可以使用从应用到云存储进行身份验证,从而仅限制对应用服务帐户的访问。
    您可以设置服务帐户或。

    谢谢。我很困惑,我用一个服务帐户在后端获取对象,如何将对象传递到前端,一个对象url?我想我应该把对象名保存到数据库中,而不是整个url。当我向前端发送数据时,前端应该向我的后端发送使用这些对象名称的对象URL请求。我说的对吗?您可以直接将其传递到前端,例如在base64中,使用print()为其提供服务。最好不要将对象URL传递给前端。最理想的方法是将对象的路径保存到数据库,而不是保存整个URL,并且在请求对象时,将基本URL(带有bucket的名称)与对象的路径连接起来。我不认为你在最后一个问题上是对的:当向前端发送数据时,它应该发送对对象及其相对路径的请求,后端将它们与基本URL连接起来,并请求它们到云存储。OK。我不想将base64编码的图像传递到前端,因为它的大小。即使我的后端使用服务帐户请求对象的整个url。但是桶和对象不是公共的。我认为前端会得到如下url:
    https://storage.googleapis.com/ez2on/1536250853638-NN.jpg
    从我的后端根据API,它仍然没有访问此对象的权限。我的后端有使用服务帐户的权限,而我的前端没有。这会阻止我。然后使用签名的URL,后端生成它们并将它们传递给前端,通常保持bucket私有。我认为从云存储发送也比从应用程序引擎发送便宜。例如: