应用程序引擎上的云存储和安全下载策略。 GCS acl 或 blobstore

2023-12-06

我的应用程序引擎应用程序创建云存储文件。这些文件将由第三方下载。这些文件包含个人医疗信息.

首选下载方式是什么:

  1. 使用带有用户 READER acl 的直接 GCS 下载链接。
  2. 或者在应用程序引擎应用程序中使用 blob 存储下载处理程序。

两种解决方案都需要第三方登录(google登录)。性能不是问题。隐私和安全错误和失误的发生都是如此。

可以选择使用加密的 zip 文件进行下载。这意味着我必须将密码存储在项目中。或者通过电子邮件发送随机密码?

更新我用来创建签名下载网址的appengine代码

import time
import urllib
from datetime import datetime, timedelta
from google.appengine.api import app_identity
import os
import base64

API_ACCESS_ENDPOINT = 'https://storage.googleapis.com'

# Use the default bucket in the cloud and not the local SDK one from app_identity
default_bucket = '%s.appspot.com' % os.environ['APPLICATION_ID'].split('~', 1)[1]
google_access_id = app_identity.get_service_account_name()


def sign_url(bucket_object, expires_after_seconds=60):
    """ cloudstorage signed url to download cloudstorage object without login
        Docs : https://cloud.google.com/storage/docs/access-control?hl=bg#Signed-URLs
        API : https://cloud.google.com/storage/docs/reference-methods?hl=bg#getobject
    """

    method = 'GET'
    gcs_filename = '/%s/%s' % (default_bucket, bucket_object)
    content_md5, content_type = None, None

    expiration = datetime.utcnow() + timedelta(seconds=expires_after_seconds)
    expiration = int(time.mktime(expiration.timetuple()))

    # Generate the string to sign.
    signature_string = '\n'.join([
        method,
        content_md5 or '',
        content_type or '',
        str(expiration),
        gcs_filename])

    _, signature_bytes = app_identity.sign_blob(signature_string)
    signature = base64.b64encode(signature_bytes)

    # Set the right query parameters.
    query_params = {'GoogleAccessId': google_access_id,
                    'Expires': str(expiration),
                    'Signature': signature}

    # Return the download URL.
    return '{endpoint}{resource}?{querystring}'.format(endpoint=API_ACCESS_ENDPOINT,
                                                       resource=gcs_filename,
                                                       querystring=urllib.urlencode(query_params))

如果少数用户可以访问存储桶中的所有文件,那么解决方案 #1 就足够了,因为管理 ACL 不会太麻烦。

但是,如果您有许多不同的用户,每个用户都需要对存储桶中的不同文件进行不同的访问,那么解决方案 #1 是不切实际的。

我也会避免使用解决方案 #2,因为您需要为不必要的传入/传出 GAE 带宽付费。

也许要考虑的第三个解决方案是使用 App Engine 处理身份验证,并编写逻辑来确定哪些用户有权访问哪些文件。然后,当请求下载文件时,您创建签名 URL直接从 GCS 下载数据。您可以将过期参数设置为适合您的值,这将使 URL 在设定的时间后失效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序引擎上的云存储和安全下载策略。 GCS acl 或 blobstore 的相关文章

  • 在 ndb tasklet 中使用 images.get_serving_url_async() 是否安全?

    NDB 小线程和yield是执行异步 并行代码的好方法 然而 从文档中还不清楚这种机制是否可以安全地与非 ndb 异步函数一起使用 例如images get serving url async The NDB 异步操作文档页面 https
  • ASP.NET Core 1.0 Web API 中的简单 JWT 身份验证

    我正在寻找最简单的方法来设置使用 JWT 在 ASP NET Core 又名 ASP NET 5 中进行身份验证的 Web API 服务器 这个项目 博客文章 http www codeproject com Articles 369657
  • 如何防止客户修改 firebase 数据(在没有后端的 Web 应用程序中)?

    我最近开始探索 firebase 作为我的 Angular JS 单页网站的身份验证解决方案 它看起来很完美 然而 从安全角度来看 我不太确定是否将逻辑保留在我的应用程序中的客户端 假设我对在我的网站上注册的客户进行了 isProfileC
  • 数据未正确加载到 Firebase 应用程序中

    我在 android studio 上使用 firebase 创建了一个应用程序 使用移动 otp 进行身份验证后会出现一个搜索视图 当用户在搜索视图上搜索时 它将过滤结果并转到回收器视图等 第一次启动活动 即身份验证后的家庭活动 应用程序
  • jQuery Mobile 和 PhoneGap 中的身份验证

    我有一个使用 jQuery Mobile 和 PHP CodeIgniter 框架 构建的 Web 应用程序 现在我正在尝试制作它的 PhoneGap 版本 以使其可以作为独立应用程序进行分发 但是 PHP Web 应用程序 版本使用 Io
  • 无法使用 Google App Engine (GAE) 连接到 Google Cloud Messaging (GCM) 服务器

    我正在尝试为我的应用程序设置谷歌云消息传递 并且我正在为我的服务器使用谷歌应用程序引擎 我有 API 密钥 但似乎无法连接到 google 云消息服务器 这是我的代码 HttpClient client new DefaultHttpCli
  • 添加验证码到 Symfony2 登录

    我需要将验证码添加到我的登录页面 我正在使用 GregwarCaptchaBundle 和 FosUserBundle 目前我已经使用以下代码在登录时显示验证码
  • 获取所有连接的用户 (Laravel 5)

    如何显示我家中所有已连接的用户 这是一个非常基本的方法 但希望是检测两者的有效方法Guest and RegisteredLaravel5 应用程序上的用户 Step 1 打开文件config session php并将驱动程序更改为数据库
  • Google App Engine 的优点和缺点 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 2009 年 8 月 21 日更新列表 帮助我列出在 Google App Engine 上构建应用程序的所有优点和缺点 Pros 无需购买服务
  • 使用 https 的 Web 服务身份验证给出错误

    我编写了一个简单的 Web 服务 并使用摘要和 HTTPS 身份验证来保护它 我已经使用 Java 中的 keytool 生成了我的证书 当我通过创建 war 文件在 Tomcat 中部署 Web 服务时 axis 的欢迎页面正确显示 但是
  • 在 GQL 中计算结果的最佳方法是什么?

    我认为进行计数的一种方法是这样的 foo db GqlQuery SELECT FROM bar WHERE baz baz my count foo count 我不喜欢的是我的计数将被限制为最大值 1000 并且我的查询可能会很慢 有人
  • App Engine Flex 服务正在运行但找不到

    如何关闭我已删除且无法访问的 App Engine Flex 服务 昨天 我部署了一项新的 App Engine Flex 服务 然后将其删除 无论出于何种原因 该服务在一天后仍在运行 我可以通过查看日志查看器来确认它仍在运行并生成日志 当
  • 在 ASP.NET MVC 中使用 MySQL 的 AccountController

    在 Visual Studio 中创建默认的 ASP NET MVC 项目会设置一个可以在其中注册用户的基本项目 我将如何继续更改它以使用 MySQL 服务器而不是 SQLServer 现在可以使用了 安装最新的 Connector NET
  • Google BigQuery DML 更新仍在流缓冲区中的行的查询

    我最近一直在尝试为 Google 的 Big Query 流 api 提出一种重试机制 用于使用 UPDATE 语句对有时仍位于流缓冲区中的行运行 DML 查询 由于这些行尚未导出到表中 BI 的 api 禁止对它们运行 UPDATE 或
  • powershell:使用参数启动程序的脚本?

    当我运行下面的 Powershell 脚本时 我收到以下错误 如何通过 powershell 带参数运行程序 该脚本将是组策略登录 Invoke Expression 找不到位置参数 接受参数 TBHSERVER NETLOGON BGIn
  • 使用 OWIN 自托管 WebApi 进行声明身份验证

    我使用以下配置自托管 WebApi Visual Studio 2012 NET 4 0 public void Configuration IAppBuilder appBuilder var config new HttpConfigu
  • Appengine - 隐藏文件夹的部署

    为了验证 SSL 证书 我需要将包含一些文件的隐藏文件夹 well known 上传到我的应用程序 我正在使用 eclipse 部署 java 应用程序 但 appengine 上的应用程序未收到这些文件 我猜他们被过滤掉了 我尝试将隐藏文
  • Google App Engine 是否可以通过自定义域(即 Google Apps)支持 SSL? [复制]

    这个问题在这里已经有答案了 可能的重复 Google App Engine 是否支持以 mydomain com 托管的应用程序的 SSL https stackoverflow com questions 5593197 does goo
  • 使用 Objectify + google appengine 进行不区分大小写的过滤器查询

    有没有一种简单的方法可以使用 Objectify google appengine Java 进行不区分大小写的过滤器查询 本质上 这就是我想要做的 只是我需要电子邮件过滤器不区分大小写 Objectify objectifyService
  • asp.net cookie、身份验证和会话超时

    我有一个使用表单身份验证的 asp net 网站 我在会话中保留一些信息 例如用户名 用户 ID 电子邮件等 我通过在身份验证 cookie 上设置较长的到期日期来允许用户保持登录网站的状态 因此 当用户仍处于身份验证状态时 会话过期的情况

随机推荐

  • 重新启动应用程序时 GIDSignIn.sharedInstance().currentUser nil

    最初 我在检查是否已将数据保存到钥匙串中时遇到问题 我找到了这篇文章并遵循了 BhavinBhadani 的建议 每当您检查 if GIDSignIn sharedInstance hasAuthInKeychain 时 在此之前添加您的登
  • 如何在没有 JFileChooser 的情况下在 Java Swing 中打开文件

    我正在使用 Java Swing GUI 我想向我的项目添加一个用于打开文件的按钮 我不喜欢JFileChooser因为它会打开一个小窗口来浏览目录中的文件 我可以用其他东西代替吗JFileChooser 在 Java Swing 下 我尝
  • 使用 Microsoft Dynamics NAV 2016 中的 Odata Web 服务获取特定集合或实体的 $metadata

    环境 作为集成项目的一部分 我需要一个 PHP 网站能够读取和写入 Microsoft Dynamics NAV 2016 的 Odata 服务 Microsoft Dynamics NAV 2016 使用Odata v3 标准 上下文 现
  • 在 Access 中将分隔条目拆分为新行

    有人给了我一个订单电子表格 每个订单的唯一值是采购订单 给我电子表格的人很懒 决定使用具有多个采购订单的订单 但他们只是用 分隔它们相同的信息 例如我的桌子看起来像这样 PO Vendor State 123456 234567 Bob K
  • 如何克隆或冻结 Android 数据库游标

    我有一个自定义光标适配器 我想将光标的每一 行 传递回应用程序 通过正在运行的注册回调 我知道我可以读取光标中的每个字段并手动执行此操作 但我只想将光标的 冻结克隆 传回 读取适配器中的字段需要我制作此类的几个专用版本 理想情况下 我想传回
  • 将样式组件拆分为多个文件,但将它们导出为一个文件

    当我构建应用程序时 我没有意识到我最终会得到一百多个样式组件 因此 我将它们放在同一个文件中 如下所示 export const StyledTabs styled Tabs display inline flex important ma
  • 无法更改我的 Google 表格插件的版本

    我已经对 Google 表格插件进行了一些错误修复 现在需要发布这些更改 我通过 文件 gt 管理版本 在脚本中创建了一个新版本 当我尝试更新 G Suite Marketplace SDK 中的附加组件时 我得到 Error 抱歉 有问题
  • 在 PHP 中生成带有偏差结果的随机数

    我目前正在为我维护的网站编写积分系统 因此我想每天奖励我的用户随机数量的积分 这就是我的想法 0 25 has a 75 chance 26 51 has a 13 chance 52 76 has a 6 chance 77 115 ha
  • 使用黑名单边缘增强过滤图

    我想在具有黑名单边缘的图上运行 Dijkstra 即我想计算不使用这些链接的最短路径 目前 我首先定义过滤器 typedef std pair
  • 如何指定设置为插入符号的验证保留

    我真的很喜欢至少在建模的早期阶段使用插入符号 特别是因为它非常容易使用重采样方法 然而 我正在研究一个模型 其中训练集通过半监督自我训练添加了相当数量的案例 因此我的交叉验证结果确实存在偏差 我的解决方案是使用验证集来衡量模型性能 但我看不
  • “点括号”语法的含义是什么? [复制]

    这个问题在这里已经有答案了 我正在研究一个将数据存储在 mongodb 中的示例 Go 应用程序 这一行的代码 https github com zeebo gostbook blob master context go L36 似乎访问存
  • 如何根据条件更改 datagridview 文本中的文本。

    我正在使用 datagridview 我想在获取单元格时显示执行条件格式设置的方法M然后我想显示Married 我尝试了这个但没有成功 这是我的代码 private void masterDataGridView CellFormattin
  • 关于“Gerrit Change Number”的官方文档

    这是我的另一个问题的后续问题 Gerrit 审核网址中的数字的正式名称是什么 我现在了解到嵌入在 Gerrit url 中的小整数称为 Gerrit 变更编号 有时 数字变更号码 例如 它是数字68在以下 Gerrit 网址中 http g
  • 分组TableView,使用自动调整大小的节标题,重新加载后,如果我向上滚动,tableview将跳转

    我正在做一个像这样的表格视图 一条推特和对其的评论 在此输入图像描述 我尝试了几种架构 我没有找到足够的问题和讨论 我认为这是一个非常有意义的问题 所以我发布了这些架构的性能和局限性 首先 使用整个单元格作为带有评论的twitter 评论视
  • 如何使用eclipse插件新建一个创建项目的向导?

    我想在 Eclipse 中创建一个项目创建向导 创建的项目不包含任何内容 除了几个文件夹 问题是如何编写函数 doFinish 和函数 performFinish 您创建一个项目 如下所示 IWorkspace workspace Reso
  • 将 ALV 输出网格中的复选框标记为选中

    我正在使用类创建 ALV 输出网格cl gui alv grid 使用 fieldcatalog 的相应记录将输出表的其中一列定义为复选框 ls fcat checkbox X ls fcat edit X 对于包含复选框的列的所有记录 它
  • 哪些类型可以安全地与 == 进行比较?

    当比较相等时可以使用 例如 int a 3 int b 4 如果检查相等性 您应该使用 if a b 如果使用浮点数 情况会改变吗 对于整数值来说非常好 你应该not比较浮点数是否相等 使用容忍方法 if fabs a b lt toler
  • RestTemplate--> Exchange 生成:422 无法处理的实体

    我在用Spring Boot 2 0 5 RELEASE并试图使POST请求者Response Template Exchange 下面是我的代码 我还需要使用一些自定义键传递标头 RestTemplate restTemplate new
  • 如何在 C# 中使用 PHP CLI

    我来自中国 所以我的英语可能很差 我会尽力让你理解我的问题 我想在我的 C 项目中使用 PHP CLI 我尝试过这样的代码 Process p new Process p StartInfo FileName cmd exe p Start
  • 应用程序引擎上的云存储和安全下载策略。 GCS acl 或 blobstore

    我的应用程序引擎应用程序创建云存储文件 这些文件将由第三方下载 这些文件包含个人医疗信息 首选下载方式是什么 使用带有用户 READER acl 的直接 GCS 下载链接 或者在应用程序引擎应用程序中使用 blob 存储下载处理程序 两种解