首页 > 解决方案 > gsutil rsync 是否可以用于仅允许上传文件的应用程序?(ResumableUploadAbortException:没有 storage.objects.delete 访问权限)

问题描述

我已经使用了gsutil rsync没有-d参数,即使没有任何参数,但我仍然得到ResumableUploadAbortException: 403 abc@xyz.iam.gserviceaccount.com does not have storage.objects.delete access.

我想使用gsutil rsync谷歌计算引擎创建一个仅用于将文件上传到谷歌云存储的应用程序。

我添加了读取和列出权限,因为我不希望应用程序能够删除存储桶中的任何文件,所以我没有授予storage.objects.delete.

是否有任何参数可以使用该gsutil rsync命令而无需授予删除文件的权限?我想使用rsync,因为我必须传输千兆字节的文件。

谢谢你。

[编辑]添加附加信息和调试:

我想添加其他信息,这个应用程序作为 cron 运行,上传时间戳生成的文件名,所以每次执行时都会有所不同。

上传过程确实有效,文件上传到了bucket,但ResumableUploadAbortException最后我还是得到了。

所以我运行gsutil -D rsync调试:

DEBUG: Exception stack trace:
    Traceback (most recent call last):
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/__main__.py", line 590, in _RunNamedCommandAndHandleExceptions
        user_project=user_project)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/command_runner.py", line 372, in RunNamedCommand
        return_code = command_inst.RunCommand()
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/commands/rsync.py", line 1546, in RunCommand
        fail_on_error=True, seek_ahead_iterator=seek_ahead_iterator)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/command.py", line 1420, in Apply
        arg_checker, should_return_results, fail_on_error)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/command.py", line 1491, in _SequentialApply
        worker_thread.PerformTask(task, self)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/command.py", line 2157, in PerformTask
        results = task.func(cls, task.args, thread_state=self.thread_gsutil_api)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/commands/rsync.py", line 1337, in _RsyncFunc
        gzip_exts=cls.gzip_exts, preserve_posix=cls.preserve_posix_attrs)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/utils/copy_helper.py", line 3520, in PerformCopy
        allow_splitting=allow_splitting, gzip_encoded=gzip_encoded)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/utils/copy_helper.py", line 2026, in _UploadFileToObject
        parallel_composite_upload, logger)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/utils/copy_helper.py", line 1877, in _DelegateUploadFileToObject
        elapsed_time, uploaded_object = upload_delegate()
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/utils/copy_helper.py", line 2015, in CallResumableUpload
        is_component=is_component, gzip_encoded=gzip_encoded_file)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/utils/copy_helper.py", line 1687, in _UploadFileToObjectResumable
        progress_callback=progress_callback, gzip_encoded=gzip_encoded)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/cloud_api_delegator.py", line 315, in UploadObjectResumable
        gzip_encoded=gzip_encoded)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 1415, in UploadObjectResumable
        gzip_encoded=gzip_encoded)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 1242, in _UploadObject
        additional_headers, progress_callback, gzip_encoded)
      File "/usr/lib64/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 1371, in _PerformResumableUpload
        raise resumable_ex
    ResumableUploadAbortException: ResumableUploadAbortException: 403 abc@xyz.iam.gserviceaccount.com does not have storage.objects.delete access to bucket/filename

标签: google-cloud-platformgoogle-cloud-storagersyncgsutil

解决方案


如果我不得不猜测,您正在尝试覆盖现有对象。这将删除现有对象,将其替换为另一个同名对象。

一种替代方法可能是gsutil cp -n,它不会覆盖目标位置的现有文件。但是,如果您希望能够覆盖对象,则需要删除权限。

编辑:

As mentioned in the comments below, this can also happen as the result of parallel composite uploads being enabled (at the point where gsutil attempts to delete the component objects). This behavior can be disabled by setting parallel_composite_upload_threshold=0 in your boto file, or inline in the command, e.g. gsutil -o "GSUtil:parallel_composite_upload_threshold=0" ....


推荐阅读