GCSFuse 提供范围未授权错误

Posted

技术标签:

【中文标题】GCSFuse 提供范围未授权错误【英文标题】:GCSFuse Provided scope(s) are not authroized error 【发布时间】:2021-12-09 19:30:16 【问题描述】:

我正在使用具有公共访问权限的 Google Cloud Storage 的 gcsfuse。

当我尝试使用命令 (gcsfuse -o allow_other --implicit-dirs bucket-name /mnt/my_directory) 挂载存储时,我可以看到以下消息。

2021/10/22 09:08:46.859250 Using mount point: /mnt/my_directory
2021/10/22 09:08:46.876966 Opening GCS connection...
2021/10/22 09:08:47.408667 Mounting file system "bucket-name"...
2021/10/22 09:08:47.410248 File system has been successfully mounted.

但在那之后,当我尝试将我的文件存储在挂载目录中时,出现如下错误。

 [ERROR] Error executing an HTTP request: HTTP response code 403 with body '
  "error": 
    "code": 403,
    "message": "Provided scope(s) are not authorized",
    "errors": [
      
        "message": "Provided scope(s) are not authorized",
        "domain": "global",
        "reason": "forbidden"
      
    ]
  

'
     when initiating an upload to gs://my_bucket/static/dir/1211/53714/

我该如何解决这个问题? 3天前还好好的,突然就不行了,好尴尬。

【问题讨论】:

从错误消息中,它看起来与您正在使用的客户端的the auth scopes 相关,而不是对您上传到的存储桶的授权访问。您如何为 GCSfuse 创建凭据?确保包含https://www.googleapis.com/auth/cloud-platform 范围。 如果您在 Compute Engine 上运行此功能,则默认范围会禁用 Cloud Storage 写入。编辑您的实例并启用写入。这需要停止 VM 实例才能进行此更改。 @JohnHanley 我解决了问题。我检查了 k8s 节点池的范围。他们没有云存储写入权限。当我修复它时,我解决了问题。谢谢。 【参考方案1】:

此错误可能是由allow_other 命令引起的。用于覆盖FUSE的access permissions。

作为一种安全措施,fuse 本身将文件系统的访问权限限制为安装文件系统的用户(参见 fuse.txt)。出于这个原因,gcsfuse 默认显示调用用户拥有的所有文件。因此,您应该以将要使用文件系统的用户而不是 root 用户身份调用 gcsfuse。

如果您知道自己在做什么,则可以使用 fuse 支持的 allow_other 挂载选项以及 gcsfuse 支持的 --uid 和 --gid 标志来覆盖这些行为。小心,这可能会带来安全隐患!

如果您阅读description of the command,您会发现:

allow_other

此选项覆盖限制文件访问的安全措施 给安装文件系统的用户。此选项仅默认为 允许到根目录,但可以使用 (用户空间)配置选项。

我认为您收到超出范围的消息是因为您没有指定 --uid(用户 ID)和 --gid(组 ID)标志以及 allow_other 命令,或者因为您没有设置使用此命令创建一个尚未正确覆盖 root 权限的用户空间如果您不需要使用 root 访问权限,我只需删除这部分命令并重试。

我在question related 中发现错误403 的另一个可能原因是存储桶或其中的对象没有正确的访问控制系统。您提到您正在使用public access Google Cloud Storage,但请注意您的存储桶也可能没有正确的访问权限。

【讨论】:

以上是关于GCSFuse 提供范围未授权错误的主要内容,如果未能解决你的问题,请参考以下文章

INSTAGRAM:授予公共内容范围的权限,但仍然访问令牌给出未授权的错误

尝试授权脚本时出现错误:未授权客户端

GCloud 中 Docker 中的 GCSFuse 安装失败

尝试使用 REST API 公开对象时出现“拒绝访问。提供的范围未经授权”错误

命令失败,错误 13(未授权):'未授权

客户端未经授权使用此方法检索访问令牌,或未授权客户端使用任何请求的范围