google-cloud-platform - 从 GCP 计算实例复制到存储桶时出现 AccessDeniendException
问题描述
我想将对象从 Google Compute Engine 实例复制到使用gsutil cp
. 两者都属于同一个所有者(我)和同一个项目。我想自动化整台机器,所以手动验证不是我想要的。
我已经激活了在 Compute 实例上使用服务帐户的必要权限(详情如下),但是当我尝试将gsutil cp
文件写入存储桶时,我得到一个AccessDeniedException
.
错误消息抱怨丢失storage.object.create
或storage.object.list
权限取决于我的存储桶目标路径是否以文件夹 ( gs://<bucket>/test/
) 或文件 ( gs://<bucket>/test.txt
) 结尾。
我做了什么来获得权限(我已经尝试了很多,包括创建我也分配给服务帐户的冗余自定义角色):
- 启动实例:
gcloud instances create <instance> [...] \
--service--account <name>@<project>.iam.gserviceaccount.com \
--scopes cloud-platform,storage-full
- 授予服务帐户创建权限。
- 之后也授予服务帐户权限(为了安全起见):
gcloud projects add-iam-policy-binding <project> \
--member serviceAccount:<name>@<project>.iam.gserviceaccount.com \
--role roles/storage.objectAdmin
- 编辑服务帐号的存储分区权限:
gsutil iam ch \
serviceAccount:<name>@<project>.iam.gserviceaccount.com:roles/storage.objectAdmin \
gs://<bucket>
- 编辑存储桶访问控制列表(所有者权限):
gsutil acl ch -u <name>@<project>.iam.gserviceaccount.com:O gs://<bucket>
- 在某些时候启用了存储桶级别的 IAM 策略,而不是每个对象的策略(为了安全起见)。
- 在实例上,用于
gcloud auth activate-service-account --key-file <key>.json
对帐户进行身份验证。
但是,无论我做什么,错误都不会改变,我无法写入存储桶。但是,我可以从存储桶中读取文件。我在使用服务帐户的本地机器上也遇到了同样的错误,所以问题与实例无关。
解决方案
我创建了一个新的服务帐户并执行了完全相同的步骤......现在它可以工作了。
推荐阅读
- python - 无法安装 pip3。apt说我有,但我找不到
- javascript - 如何只有活动按钮保持打开状态?
- python - 迭代多维numpy数组中的方形子矩阵
- linux - linux中缺少slab.h包括-Ubuntu 16 VM
- java - 生成 10 个随机圆圈并将它们指向路径
- json - 高效 Aeson 解析 sum 类型 toEncoding
- azure - 尝试处理 Azure 分析服务时出现内部错误 AsyncOperationConflictException
- excel - 打印工作表名称以及复制的单元格
- python - 熊猫数据框:将 2 列(值,值)转换为 2 列(值,类型)
- javascript - puppeteer page.evaluation 中的 DOM 操作