用于从计算实例连接到 Bigtable 的身份验证

Auth for connecting to Bigtable from a compute instance

我有一个应用程序使用 com.google.cloud.bigtable.hbase1_2.BigtableConnection class 连接到 Google Bigtable。这是计算引擎 VM 中的 运行,它设置了默认范围加上 https://www.googleapis.com/auth/bigtable.data 范围(reading/writing 到 Bigtable 是必需的)。当 属性 google.bigtable.auth.json.keyfile 设置为适当的 auth 文件时,连接工作正常。

但是,我想避免设置这个 属性 并且只使用为实例设置的范围,这样密钥文件就不必保留在实例上。这似乎不起作用。错误信息是

Caused by: com.google.bigtable.repackaged.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.
    at com.google.bigtable.repackaged.io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:230)
    at com.google.bigtable.repackaged.io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:211)
    at com.google.bigtable.repackaged.io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:144)
    at com.google.bigtable.admin.v2.BigtableTableAdminGrpc$BigtableTableAdminBlockingStub.listTables(BigtableTableAdminGrpc.java:371)
    at com.google.cloud.bigtable.grpc.BigtableTableAdminGrpcClient.listTables(BigtableTableAdminGrpcClient.java:52)
    at org.apache.hadoop.hbase.client.AbstractBigtableAdmin.requestTableList(AbstractBigtableAdmin.java:258)
    ... 8 more

是否有任何其他方法可以做到这一点,或者是否有配置 属性 我缺少?

所以,我发现它需要访问范围和正确的 IAM 角色才能分配给实例,然后它就可以工作了。范围是

https://www.googleapis.com/auth/bigtable.data
https://www.googleapis.com/auth/bigtable.admin.table

并且 IAM 角色应包括 Bigtable User 角色。