我正在通过超参数调整在 Google ML Engine 上运行 TensorFlow 应用程序,并且遇到了一些奇怪的身份验证问题。
我的数据和权限设置
我的培训师代码支持两种获取模型输入数据的方式:
- 从 BigQuery 获取表。
.csv
从文件中读取。
对于我的 IAM 权限,我设置了两个成员:
我的用户帐户:
- 分配给以下 IAM 角色:
- 项目负责人 (
roles/owner
) - BigQuery 管理员 (
roles/bigquery.admin
)
- 项目负责人 (
- 我使用时会自动创建凭据
gcloud auth application-default login
- 分配给以下 IAM 角色:
服务帐号:
- 分配给以下 IAM 角色:
- BigQuery 管理员 (
roles/bigquery.admin
) - 存储管理员 (
roles/storage.admin
) - 发布订阅管理员 (
roles/pubsub.admin
)
- BigQuery 管理员 (
.json
当我在 Google Cloud Platform 界面中创建凭据时,凭据已下载到文件中。
- 分配给以下 IAM 角色:
问题
当我使用我的用户帐户凭据在 Google ML 引擎上运行我的培训师代码并从.csv
文件中读取时,一切正常。
但是,如果我尝试从 BigQuery 获取数据,则会收到以下错误:
Forbidden: 403 Insufficient Permission (GET https://www.googleapis.com/bigquery/v2/projects/MY-PROJECT-ID/datasets/MY-DATASET-ID/tables/MY-TABLE-NAME)
这就是我创建服务帐户的原因,但服务帐户有一组单独的问题。使用服务帐户时,我可以从.csv
文件和 BigQuery 中读取数据,但在这两种情况下,每次试用结束时都会出现以下错误:
Unable to log objective metric due to exception <HttpError 403 when requesting https://pubsub.googleapis.com/v1/projects/MY-PROJECT-ID/topics/ml_MY-JOB-ID:publish?alt=json returned "User not authorized to perform this action.">.
这不会导致作业失败,但会阻止记录客观指标,因此超参数调整不会提供任何有用的输出。
问题
我不确定为什么当我的 IAM 成员被分配到我很确定是正确的角色时,我会收到这些权限错误。
当我在本地运行时,我的培训师代码在所有情况下都有效(尽管在本地运行时显然没有使用 PubSub),所以我相当确定这不是代码中的错误。
有什么建议么?
笔记
有一次,我的服务帐户在尝试访问 BigQuery 时遇到了与我的用户帐户相同的错误。我偶然发现的解决方案很奇怪。我决定从我的服务帐户中删除所有角色并再次添加它们,这解决了该成员的 BigQuery 权限问题。