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

Jos*_*h N 3 google-cloud-platform google-iam

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

compute.instances().insert(project=project, zone=zonee, body=config).execute() 
Run Code Online (Sandbox Code Playgroud)

在配置变量中,我添加了 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"
         ]
    }
    ]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Soh*_*lvi 6

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

服务帐户非常独特,因为除了作为身份之外,服务帐户还是附加了 IAM 策略的资源,这些策略决定谁可以使用该服务帐户,因此它既是身份又是资源。

例如,如果您向 Bob 授予具有服务帐户用户角色的计算实例管理角色,他可以创建和管理使用服务帐户的计算引擎实例。向该服务帐户授予 IAM 角色后,您可以将该服务帐户分配给一个或多个新的虚拟机实例,现在 Bob 将拥有这些实例的管理员访问权限。总而言之,必须向用户帐户授予服务帐户用户角色,并且必须向服务帐户授予访问 GCP 资源的角色。

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

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