"ERROR: (gcloud.asset.export) User does not have permission" only when authenticated with a service account

"ERROR: (gcloud.asset.export) User does not have permission" only when authenticated with a service account

我正在尝试使用 Google Cloud Asset Inventorygcloud 命令(版本 314.0.0)导出项目资产 使用服务帐户进行身份验证 :

# 1. authenticate with service account my-service-account@$PROJECT_ID.iam.gserviceaccount.com
gcloud auth activate-service-account --key-file=/path/to/my/key.json

# 2. export assets to BQ
gcloud asset export \
    --project=$PROJECT_ID \
    --bigquery-table=projects/$PROJECT_ID/datasets/$DATASET_ID/tables/$TABLE_ID \
    --output-bigquery-force \
    --content-type=resource

并出现以下错误:

ERROR: (gcloud.asset.export) User [my-service-account@$PROJECT_ID.iam.gserviceaccount.com] does not have permission to access project [$PROJECT_ID:exportAssets] (or it may not exist): The caller does not have permission

我的服务帐户在 $PROJECT_ID 上具有以下角色:

请注意,当我使用自己的个人帐户 登录时,gcloud asset export 有效,该帐户与我的服务帐户具有相同的角色。

--verbosity=debug 标志添加到 gcloud 不会添加其他信息:

apitools.base.py.exceptions.HttpForbiddenError: HttpError accessing https://cloudasset.googleapis.com/v1/projects/$PROJECT_ID:exportAssets?alt=json

内容如下:

{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

我不明白使用服务帐户 (gcloud auth activate-service-account) 和我自己的个人帐户 (gcloud auth login) 登录之间的区别,两者应该都可以,因为我拥有完全相同的权限。

如有任何想法,我们将不胜感激。

这是对这个问题的公开调查:

permission denied error when exporting asset to GCS or BigQuery

看来您必须模拟 built-in 服务帐户 service-xxxxxxxx@gcp-sa-cloudasset.iam.gserviceaccount.com 并向其添加 Storage Admin 角色。

此外,您还必须将角色 roles/bigquery.jobUserroles/bigquery.dataEditor 添加到服务帐户 service-xxxxxxxx@gcp-sa-cloudasset.iam.gserviceaccount.com,其中 xxxxxx 是项目 ID。