相当于 AWS s3 x-amz-acl header 在 Azure 和 Google 云中

Equivalent of AWS s3 x-amz-acl header in Azure and Google Cloud

在 AWS S3 中上传 object 时,您可以将“x-amz-acl=bucket-owner-full-control”添加到 url(作为查询参数)以使 object 属于桶而不是上传者。在使用 Cloud Storage 或 Azure Storage 时如何实现相同的目标?

How do you achieve the same when using Cloud Storage or Azure Storage?

在 Azure 存储中,您无需执行任何特殊操作。对象 (blob) 的所有权始终属于上传 blob 的存储帐户所有者。他们可以将管理 blob 的权限委托给其他一些用户,但所有权始终属于帐户所有者。

Firebase 存储更接近于 Dropbox 或 Google 驱动器,从技术上讲,所有者是存储桶,如果您想跟踪所有者是谁,您可以使用元数据

var newMetadata = {
  customMetadata : {
      'owner': auth().currentUser.uid
      }
};
storageItemReference.updateMetadata(newMetadata)
  .then((metadata) => {
    // Updated metadata for your storage item is returned in the Promise
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

如果您发现用户可以删除不应该删除的存储,您还可以通过安全规则控制此行为

service firebase.storage {
  match /b/{bucket}/o {
    // A read rule can be divided into read and list rules
    match /images/{imageId} {
      // Applies to single document read requests
      allow get: if <condition>;
      // Applies to list and listAll requests (Rules Version 2)
      allow list: if <condition>;

    // A write rule can be divided into create, update, and delete rules
    match /images/{imageId} {
      // Applies to writes to nonexistent files
      allow create: if <condition>;

      // Applies to updates to file metadata
      allow update: if <condition>;

      // Applies to delete operations
      allow delete: if <condition>;
    }
  }
 }
}

来源:https://firebase.google.com/docs/storage/security/core-syntax

对于 Google Cloud Storage,上传带有 x-amz-acl=bucket-owner-full-control 的 object 相当于上传带有 x-goog-acl=bucket-owner-full-control [=25] 的 object =].将 amz 切换为 goog 适用于大多数 header。有一个 translation table 的 S3 到 GCS headers。

此外,如果您希望确保存储桶中的所有 object 只能由存储桶拥有者访问,您可能会发现使用 Uniform Bucket Level Access 更方便。启用后,存储桶中的个人 object 所有权将不再存在,并且您不再需要在每次上传时指定 header。

您可以从 UI、API 或通过此命令启用统一存储桶级别访问:gsutil uniformbucketlevelaccess set on gs://BUCKET_NAME