从 GCP 计算实例复制到存储桶时出现 AccessDeniendException

从 GCP 计算实例复制到存储桶时出现 AccessDeniendException

我想使用 将对象从 GCP Compute 实例复制到 Google Storage Bucket 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来验证账户。

但是,无论我做什么,错误都不会改变,而且我无法写入存储桶。我但是,从存储桶中读取文件。
目前,我只是在浪费钱试图让它工作。

答案1

我创建了一个新的服务帐户并执行了完全相同的步骤...现在它可以正常工作了。

相关内容