我想通过使用Google云服务帐户获取Google Cloud Sql实例的详细信息。我创建了一个支持计费的服务帐户。通过使用java代码中的此服务帐户,我已成功完成了Google云端存储功能,例如存储桶创建,存储桶删除等。但是当我试图获得GCS Sql功能时,我收到以下错误:
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "The client is not authorized to make this request.",
"reason" : "notAuthorized"
} ],
"message" : "The client is not authorized to make this request."
}
以下是我的java代码片段:
private SQLAdmin authorizeSqlAdmin() throws Exception {
if (cloudSqlAdmin == null) {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
List<String> scopes = new ArrayList<String>();
scopes.add(SQLAdminScopes.CLOUD_PLATFORM);
scopes.add(SQLAdminScopes.SQLSERVICE_ADMIN);
String propertiesFileName = "/cloudstorage.properties";
Properties cloudStorageProperties = null;
try {
cloudStorageProperties = Utilities.getProperties(propertiesFileName);
} catch (Exception e) {
logger.error(e.getMessage(), e);
return null;
}
Credential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(
cloudStorageProperties.getProperty(ACCOUNT_ID_PROPERTY)
)
.setServiceAccountPrivateKeyFromP12File(
new File(cloudStorageProperties.getProperty(PRIVATE_KEY_PATH_PROPERTY))
)
.setServiceAccountScopes(scopes).build();
cloudSqlAdmin = new SQLAdmin.Builder(httpTransport, jsonFactory, credential)
.setApplicationName(
cloudStorageProperties.getProperty(APPLICATION_NAME_PROPERTY)
)
.build();
}
return cloudSqlAdmin;
}
public DatabaseInstance getInstanceByInstanceId(String projectId, String instanceId) throws Exception {
SQLAdmin cloudSql = authorizeSqlAdmin();
Get get = cloudSql.instances().get(projectId, instanceId);
DatabaseInstance dbInstance = get.execute();
return dbInstance;
}
我在这里缺少什么? 有人请帮助我。
N.B:我已将该服务帐户添加为权限标签中的成员,并将此帐户设为 CAN EDIT 权限
答案 0 :(得分:1)
通过替换实例ID 值解决了此问题。
在GCS控制台中,我将实例ID作为 project-id:instance-name 。 我把 project-id:instance-name 的全部内容作为实例ID,这也就是我遇到上述错误的原因
经过一些试验后,我发现我需要在此处 instanceId instanceId
获取get = cloudSql.instances()。get(projectId,instanceId);
这解决了我的问题。