我正在尝试向GCE实例(Google Cloud VM)添加一个额外的服务帐户,以便在那里运行的工具可以在GCloud分配给VM的默认服务帐户和另一个属于不同项目的服务帐户之间切换。从文档中可以清楚地知道如何将范围分配给默认帐户(关闭电源后可在VM设置中使用)。但是我不明白如何设置手动添加的服务帐户的范围:
gcloud auth activate-service-account --key-file=myaccount.json
现在,该帐户显示在gcloud auth list
中,但是尚不清楚为其分配了哪些范围。另一种方法是使用具有--scopes
参数的gcloud auth application-default login
,但我知道无法与服务帐户一起使用。
Google Cloud documentation告诉我
使用Google Cloud Platform Console创建具有适当范围的服务帐户
但是我找不到将作用域添加到服务帐户的任何选项,只能找到通过IAM可以添加的角色。有谁知道我如何将范围分配给自定义服务帐户?
答案 0 :(得分:0)
我认为您可以通过管理控制台来添加范围。在“安全性”页面上,单击“高级设置”。您可能需要单击显示更多以查看高级设置。 在“身份验证”部分中,单击“管理API客户端访问”。 在客户名称字段中,输入服务帐户的客户ID。 注意:有关如何创建客户端ID的详细信息,请参阅创建服务帐户。
在“一个或多个API范围”框中,复制并粘贴所需的范围。
点击授权。 确保在您输入的客户ID名称旁边,所有范围都显示了说明。如果没有,请在“一个或多个API范围”框中,再次正确输入范围,然后单击“授权”。 正确输入所有范围后,请返回Google Developers Console并单击“保存”。
答案 1 :(得分:0)
您可以使用command like:
gcloud compute instances set-service-account <instance name> --service-account <service account> --scopes <comma separated scopes here, alias or full URI>
命令文档here指定别名以及可用的完整URI。
您还可以使用以下命令:
gcloud alpha compute instances set-scopes <instance name> --scopes <comma separated scopes, alias or full URI>
文档here
范围可以应用于默认服务帐户和VM实例。其他服务帐户(不是默认帐户)被视为用户帐户,因此&不会像默认服务帐户那样使用范围。非默认服务帐户像用户帐户一样使用IAM权限,因此您将无法编辑范围,只能编辑IAM角色(如用户帐户)。如果要将范围与用户帐户结合使用,则计算机和用户帐户都将需要访问API对象才能访问它。有关合并范围和服务帐户here的更多信息。
答案 2 :(得分:0)
如果您可以在应用程序中访问服务帐户credentials
,则还可以像这样通过编程方式提供其他范围-
Set<String> scopes = Collections.singleton("https://www.googleapis.com/auth/cloud-platform");
GoogleCredentials googleCredentials = ((ServiceAccountCredentials) credentials).createScoped(scopes);
然后您可以按照以下方式获取access_token
,
private AccessToken getAccessToken(GoogleCredentials googleCredentials) throws IOException {
if(googleCredentials.getAccessToken() == null) {
googleCredentials.refresh();
return googleCredentials.getAccessToken();
}
return googleCredentials.getAccessToken();
}