GCP服务账户和用户账户有什么区别?

7

另一个关于使用服务帐号的 ssh 的参考资料:https://cloud.google.com/compute/docs/tutorials/service-account-ssh。使用用户帐号,可以使用 gcloud 连接具有私有或公共 IP 的 VM。但是,对于服务帐号,我无法看到如何在没有公共 IP 的情况下连接 VM。 - JerryL
我认为根据谷歌的术语,我问题中的用户帐户可以是谷歌账户(https://cloud.google.com/iam/docs/overview#concepts_related_identity),该账户可以进行登录。 - JerryL
2个回答

8
接受的答案是正确的,但缺乏对Google Cloud凭据的更深入理解。
有许多类型的凭据。用户、服务帐户、组、域等。差异在于凭据代表什么以及这些凭据的授权是什么。从结构、内容等方面来看,它们在内部是相同的。
所有凭证类型都是OAuth 2凭证。用户帐户凭据是由Google帐户、G Suite或Identity Server颁发的凭据。您和您的软件无法创建这些凭据,而这些凭据是由Google颁发的。另一方面,服务帐户可以创建自己的凭据,因为服务帐户包含用于签名凭据的私钥。私钥用于创建已签名的JWT,然后交换OAuth访问令牌、刷新令牌和身份令牌。服务帐户只是OAuth凭据的一种类型。
Google不希望使用用户凭据访问Google Cloud资源,除非通过Google Cloud Console或Google Cloud SDK工具和CLI。这是出于安全原因和设计考虑。否则,使用和行为几乎相同,只是有些特权不能分配给某些凭据类型。

在谷歌的设计中,通过隧道进行ssh是一项管理工作,只能由用户凭据完成。 - JerryL
@JerryL - 对于你的例子,是正确的。但是那是谷歌的强制措施,与凭据的实际含义无关。我经常创建有或没有服务帐户的SSH隧道。这就是为什么我发布了额外的答案。有许多细节需要理解。 - John Hanley
嗨,@John Hanley,你是否使用gcloud compute ssh进行服务帐户的隧道传输?我的测试结果表明--tunnel-through-iap不支持服务帐户。你是否使用第三方工具设置了服务帐户的隧道传输? - JerryL
我自己用Go/Python编写的工具。 - John Hanley
我认为这是这个问题的最佳答案;+1。您能否提供一些链接,让我们了解用户、服务帐户、组、域帐户之间的区别? - hagrawal7777
我知道这个 - https://cloud.google.com/iam/docs/overview... 但如果有地方明确解释了差异,那将会很有帮助。 - hagrawal7777

7
按设计,Google中的服务账号是为非人类用户而设。它们是您Google项目中资源使用的一种帐户(例如计算引擎服务帐户、应用程序引擎服务帐户等)。
服务账号被设计为一种帐户类型,用于您的Google云资源与其他Google云服务进行通信,例如从GCE到App Engine到Cloud Function或从App Engine到Google APIs,例如视觉API、语音转文本等,或从App Engine到Cloud SQL等。
您可以参考这里获取更多详细信息。

2
我可能无意中发现了一个区别:服务帐户不能拥有角色/iap.tunnelResourceAccessor。 - JerryL
1
感谢@James Ching提供的链接,其中提供了比较。 - JerryL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接