将范围分配给gcloud服务帐户

时间:2018-10-14 09:40:39

标签: google-cloud-platform google-compute-engine gcloud

我正在尝试向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可以添加的角色。有谁知道我如何将范围分配给自定义服务帐户?

3 个答案:

答案 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();
}