![如何在不停止实例的情况下更改 GCP Compute Engine 上的云 API 访问范围](https://linux22.com/image/747406/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E5%81%9C%E6%AD%A2%E5%AE%9E%E4%BE%8B%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E6%9B%B4%E6%94%B9%20GCP%20Compute%20Engine%20%E4%B8%8A%E7%9A%84%E4%BA%91%20API%20%E8%AE%BF%E9%97%AE%E8%8C%83%E5%9B%B4.png)
我在 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
如果您仍然有问题,请使用您的步骤、命令和完整输出更新您的问题。