从 GCS 中删除文件:“gsutil -m rm”引发 CommandException:无法删除文件/对象

Posted

技术标签:

【中文标题】从 GCS 中删除文件:“gsutil -m rm”引发 CommandException:无法删除文件/对象【英文标题】:Removing files from GCS: "gsutil -m rm" throws CommandException: files/objects could not be removed 【发布时间】:2021-10-08 23:13:13 【问题描述】:
gsutil -m rm gs://our_bucket/dir/subdir/*

...
Removing gs://our_bucket/dir/subdir/staging-000000000102.json...
Removing gs://our_bucket/dir/subdir/staging-000000000101.json...
CommandException: 103 files/objects could not be removed.

该命令能够找到包含 103 个 .JSON 文件的目录,并根据输出的 Removing gs://...“尝试”删除它们。我们收到CommandException: 103 files/objects could not be removed. 的原因是什么?

这适用于我的本地计算机 这适用于我们在本地运行的 docker 容器 这在我们需要它工作的 GCP 计算引擎上的 docker 容器中不起作用。

也许这是一个权限问题,计算引擎无权删除我们 GCS 中的文件?

编辑:我们在 Airflow 项目的 /config 文件夹中有一个服务帐户 JSON,并且该服务帐户共享给具有 Storage Admin 权限的 IAM 用户。也许 /config 文件夹中的 JSON 不足以为整个 GCP 计算引擎分配权限?我特别困惑,因为这个服务器能够从我们的 BQ 数据库中查询,并写入 GCS,但不能从 GCS 中删除...

【问题讨论】:

第一步是确定实例拥有的权限(角色)。使用这些详细信息编辑您的问题。 @JohnHanley 查看编辑。我开始认为服务帐户 JSON 在服务器上的某处 是不够的……我们还需要做其他事情来为服务器分配权限吗? 当我尝试使用 gsutil cp 而不是 rm 时,我确实收到了 AccessDeniedException: 403 Insufficient Permission 错误 【参考方案1】:

此链接中的解决方案 - https://gist.github.com/ryderdamen/926518ddddd46dd4c8c2e4ef5167243d 正是我们所需要的:

停止实例 编辑设置 删除 gsutil 缓存

【讨论】:

以上是关于从 GCS 中删除文件:“gsutil -m rm”引发 CommandException:无法删除文件/对象的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 加载作业失败 - 无法访问 GCS 文件

将文件从 GCS 复制到 AWS S3 时如何设置 acl?

如果文件不存在,则毫无例外地从 GCS 中删除

快速删除 GCS 存储桶上的大文件夹的方法

如何使用gsutil删除gcs中的多个文件,除了1

在构建期间将文件从 GCS 复制到 Cloud Run docker 容器中