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 安装失败