云扳手IAM权限被拒绝

时间:2018-11-25 01:12:37

标签: go google-cloud-platform google-cloud-spanner

使用CLI gcloud命令时,我可以对数据库执行所有操作。但是,当我尝试从Go中执行相同的操作(与使用gcloud命令时使用的shell实例相同)时,出现错误消息:

spanner: code = "PermissionDenied", desc = "Resource projects/todo/instances/todospanner/databases/tododb is missing IAM permission: spanner.sessions.create."

我要运行的代码取自以下示例:https://cloud.google.com/spanner/docs/getting-started/go/

在扳手权限中也找不到该权限(spanner.session.create)。我一直在使用我用来登录gcloud的帐户设置所有可以找到的与扳手相关的权限。

我的GOOGLE_APPLICATION_CREDENTIALS已设置,我也尝试使用gcloud beta auth

2 个答案:

答案 0 :(得分:1)

此处列出并描述了包括权限spanner.session.create的Cloud Spanner IAM角色:https://cloud.google.com/spanner/docs/iam#roles

请注意某些角色是特定于人员的,而其他角色是特定于计算机的(或服务帐户)。

您需要指定从何处连接或执行代码(Cloud Shell实例,在GCE上运行的VM,本地计算机或便携式计算机),并确保将正确的角色分配给以下人员或服务帐户:尝试执行代码并访问Cloud Spanner实例。

考虑这种情况:

  • 您的gcloud SDK可能已获得授予person@domain.com角色的roles/spanner.admin帐户的凭据,因此对于gcloud来说一切正常
  • 托管您的代码和SDK的VM以12345678901-compute@developer.gserviceaccount.com服务帐户的身份运行,并且该用户无权访问Cloud Spanner,从而造成麻烦。

有关服务帐户的更多信息,请点击此处: https://cloud.google.com/compute/docs/access/service-accounts

答案 1 :(得分:1)

可能您没有在GOOGLE_APPLICATION_CREDENTIALS指向的文件中添加对帐户tododb的数据库访问权限。在Google控制台中为此帐户使用例如Cloud Spanner数据库用户角色。