我正在尝试使用Google Cloud Asset Inventory和gcloud
命令(版本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
并得到以下错误:
错误:(gcloud.asset.export(用户[my service account@$PROJECT_ID.iam.gserviceaccount.com]没有访问项目[$PROJECT-ID:exportAssets]的权限(或者它可能不存在(:调用方没有权限
我的服务帐户在$PROJECT_ID
:上具有以下角色
roles/cloudasset.viewer
roles/bigquery.jobUser
roles/bigquery.dataEditor
请注意,当我使用自己的个人帐户登录时,gcloud asset export
可以工作,这些帐户与我的服务帐户具有相同的角色。
将--verbosity=debug
标志添加到gcloud
不会添加附加信息:
apitools.base.py.exceptions.HttpForbiddenError:HttpError访问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
(登录有什么区别,因为我拥有完全相同的权限,所以两者都应该有效。
任何想法都将不胜感激。
这是对这个问题的公开调查:
将资产导出到GCS或BigQuery 时出现拒绝权限错误
似乎您必须模拟内置服务帐户service-xxxxxxxx@gcp-sa-cloudasset.iam.gserviceaccount.com
,并向其添加Storage Admin
角色
此外,您还必须将角色roles/bigquery.jobUser
和roles/bigquery.dataEditor
添加到服务帐户service-xxxxxxxx@gcp-sa-cloudasset.iam.gserviceaccount.com
中,其中xxxxxx
是项目id。