使用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
。
答案 0 :(得分:1)
此处列出并描述了包括权限spanner.session.create
的Cloud Spanner IAM角色:https://cloud.google.com/spanner/docs/iam#roles
请注意某些角色是特定于人员的,而其他角色是特定于计算机的(或服务帐户)。
您需要指定从何处连接或执行代码(Cloud Shell实例,在GCE上运行的VM,本地计算机或便携式计算机),并确保将正确的角色分配给以下人员或服务帐户:尝试执行代码并访问Cloud Spanner实例。
考虑这种情况:
person@domain.com
角色的roles/spanner.admin
帐户的凭据,因此对于gcloud来说一切正常
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数据库用户角色。