我正在尝试编写一个云函数来删除为服务帐户生成的密钥。但它不允许云功能删除系统托管密钥。
如何动态区分系统管理和客户管理密钥?这样,如果是系统托管密钥,我可以跳过,如果是客户管理密钥,则可以删除。
发布于 2021-02-12 09:52:32
我在另一个问题的回答中知道了这个问题的答案。
在高层次上,可以通过查看KeyType 枚举来识别它。
发布于 2021-02-10 17:26:54
将此作为社区wiki发布,因为它基于@JohnHanley的评论,因为这些都是对这个问题的有效回答:
Google不允许访问Google管理的服务帐户密钥的私钥。每个服务帐户都有一个,即使不可见。我不知道如何检测哪一个是哪一个,但是关于如何做的一个想法是尝试下载关键材料(JSON)。
如果拒绝,它是一个系统托管密钥(或者您没有权限),如果您被允许,那么它是一个由IAM用户创建的密钥。
注意事项:系统托管密钥总是第一个。如果Google在创建服务帐户时自动创建第一个键,这是有意义的。这个键也会由Google自动旋转。
补充信息( John Hanley )
我没有我的评论的参考链接。我通过观察和编写代码就知道了这一点。我还对IAM和安全帐户在较低级别上的工作方式有了相当深入的理解。
Google服务帐户由RSA私钥组成。每个私钥都有相应的公钥。Google甚至为这些“私有”私钥发布了公钥。
创建服务帐户但不创建密钥对时,仍然可以在Google服务中使用服务帐户。在我的例子中,我使用了Compute和一个新的服务帐户。Google元数据服务器不为服务帐户提供私钥。这是诸如SignBlob这样的IAM函数的原因之一。您不能访问私钥,但是可以访问。
在我的测试中,我用IAM对数据进行了签名,然后用公钥验证了签名。因此,我可以推断出一个没有密钥的服务帐户实际上有一个“私有”私钥,也就是原始问题中的系统托管密钥。
https://stackoverflow.com/questions/66135018
复制相似问题