带有 Google 云存储的 Django

Django with Google Cloud Storage

我一直在尝试使用 django-storages 包在 Google App Engine 上为我的 Django 应用实施 Google 云存储(媒体文件上传)。我已经遵循了包裹给出的所有规范。我还为服务帐户设置了相关策略和角色以访问存储桶,但我不断收到错误消息“匿名调用者没有 storage.objects.get 访问 google 云存储对象。”尝试查看我的 html 模板中的图像时。

当我在存储桶设置中包含allUsers 的权限时,我只能查看模板中的图像。有谁知道如何在不让您的存储桶公开访问的情况下解决这个问题。

  1. 请检查您的凭据是否正确。如果你是 使用 gsutil,检查存储在 .boto 文件中的凭据 是准确的。另外,确认 gsutil 正在使用您使用的 .boto 文件 expect 通过使用命令 gsutil version -l 并检查 配置路径条目。

  2. 如果您使用的凭据正确,您的请求是否正确? 使用 HTTP(而不是 HTTPS)通过代理路由?如果是这样的话, 检查您的代理是否配置为删除授权 header 来自此类请求。如果是这样,请确保您使用的是 HTTPS 而不是 HTTP 用于您的请求。

    可以参考Document for storage authentication

您还可以通过以下几点额外验证:

  1. 在大多数情况下,默认服务帐户不足以 read/write 并在 GCS 中签署文件,因此您需要创建一个 专用服务帐户。

  2. 创建一个服务帐户。

  3. 确保您的服务帐户可以访问存储桶并且 适当的权限。

  4. 确保此服务帐户与计算类型相关联 正在使用(Google Compute Engine (GCE),Google Kubernetes Engine (GKE)、Google 云 运行 (GCR) 等)

用于开发用例,或 Google 之外的其他实例 基础设施:

-创建密钥并下载 abc.json 文件。
-确保您的 运行 Django 应用的密钥是 mounted/available。
-设置环境变量GOOGLE_APPLICATION_CREDENTIALS为
json 文件的路径。

或者,您可以按照说明使用设置 GS_CREDENTIALS 在文档中

django-storages
IAM permissions

我重新检查了我的设置和存储桶策略配置,它们都是 correct.I 意识到通过将存储桶策略设置为不可 public 访问并通过自定义服务帐户访问,我不是能够使用来源 url "https://storage.cloud.google.com/{}/'.format(GS_BUCKET_NAME)"。但是,我在 return 中获取了文件对象。我读取了文件的内容并对其进行了 base64 编码,然后将 files/images 渲染到 html 页面上,如果存储桶策略未设置为 public,则此 works.Perhaps 是源代码url 不能直接访问,在这种情况下只能通过授权服务帐户访问。