我在 Google Compute Engine 内部使用gcsfuse
。我安装了一个带有云存储桶的文件夹,但无法在其中创建任何文件:
touch t1
出现错误:
touch: cannot touch 't1': Input/output error
这个问题的解决方案是给予云 API 访问范围:存储:读/写
如何在不停止实例的情况下更改 GCP Compute Engine 上的云 API 访问范围?请为我提供此问题的解决方案。
提前致谢!
答案1
您的 GCS 权限似乎不足。请查看文档对于gcsfuse
。如果您在 GCE VM 上使用服务帐户,请确保使用访问范围设置 VM storage-full
。
您可以尝试按照以下方式修复:
- 创建服务帐户(更多信息这里)
- 为服务帐户创建密钥,并下载 .json 文件
- 为服务帐户授予适当的角色
- 向存储桶上的服务帐户授予适当的权限
- 将服务帐户的 .json 凭据上传到虚拟机
gcsfuse
定义一个环境变量,该变量包含从命令行调用时服务帐户凭据的路径:GOOGLE_APPLICATION_CREDENTIALS = /root/credentials/service_credential_file.json gcsfuse bucket_name /my/mount/point
使用该选项来实现与文档
key_file
中相同的目标fstab
这里。
key_file
此外,即使您已使用以下命令在 VM 上配置了服务帐户,仍然需要使用环境变量或选项:
gcloud auth activate-service-account --key-file /root/credentials/service_credential_file.json
如果您仍然有问题,请使用您的步骤、命令和完整输出更新您的问题。