GCP中的服务帐户,角色和访问范围之间有什么区别?

时间:2020-10-27 17:17:05

标签: google-cloud-platform google-iam

我正在使用以下python方法创建gcp实例:

compute.instances().insert(project=project, zone=zonee, body=config).execute() 

在配置变量中,我添加了serviceAccount部分:

 "serviceAccounts": [
                 {
            "email": SA-email,
            "scopes": [
               "https://www.googleapis.com/auth/devstorage.read_only",
               "https://www.googleapis.com/auth/logging.write",
               "https://www.googleapis.com/auth/monitoring.write",
               "https://www.googleapis.com/auth/service.management.readonly",
               "https://www.googleapis.com/auth/servicecontrol"
               "https://www.googleapis.com/auth/trace.append",
               "https://www.googleapis.com/auth/compute",
               "https://www.googleapis.com/auth/cloud-platform"
         ]
    }
    ]

我不确定该给该SA电子邮件分配什么角色。如果我要提到访问范围,是否意味着这些角色必须分配给SA-email?

当我运行以上代码时。实例创建失败。

我对SA,角色和范围感到非常困惑。

我应该检查哪些属性以解决上述问题。

1 个答案:

答案 0 :(得分:1)

服务帐户是属于您的应用程序或虚拟机而不是单个最终用户的特殊Google帐户。服务帐户的作用类似于与应用程序关联的身份,应用程序使用服务帐户在应用程序和GCP服务之间进行身份验证,这样用户就不会直接参与1

服务帐户非常独特,因为该服务帐户不仅是身份,而且还是附加了IAM策略的资源,这些策略确定谁可以使用此服务帐户,因此它既是身份又是身份资源。

例如,如果您授予Bob带有服务帐户用户角色的计算实例管理员角色,则他可以创建和管理使用服务帐户的计算引擎实例。将IAM角色授予该服务帐户后,您便可以将该服务帐户分配给一个或多个新的虚拟机实例,现在Bob将具有对该实例的管理员访问权限。概括地说,必须授予用户帐户服务帐户用户角色,并且必须授予服务帐户角色以访问GCP资源。

服务帐户访问权限是为您的实例指定权限的旧方法,用于替换IAM角色。它们专门用于基于启用的API的默认帐户或自动创建的服务帐户。在存在IAM角色之前,访问范围是向服务帐户授予权限的唯一方法,尽管它们现在不是授予权限的主要方法,但在将实例配置为作为服务运行时,仍必须设置服务帐户访问范围帐户。但是,当您使用自定义服务帐户时,将不会使用访问范围,而是会使用IAM角色。因此,当您为计算实例使用默认服务帐户时,它将默认使用范围而不是IAM角色。

对于您的config变量,您可以从完整列表中选择访问范围,也可以创建自定义服务帐户并分配IAM角色。