从非 Google 系统调用时,CloudKMS 加密/解密如何安全工作?
Posted
技术标签:
【中文标题】从非 Google 系统调用时,CloudKMS 加密/解密如何安全工作?【英文标题】:How does CloudKMS encryption/decryption work securely when being called from a non-Google system? 【发布时间】:2018-10-11 13:15:04 【问题描述】:我需要知道发送到 Google CloudKMS 的 plaintext
/ciphertext
以及用于身份验证的公钥/私钥在传输过程中是安全的,但我不知道如何证明这一点。
根据KMS docs,我创建了一个服务帐户,下载了 JSON 密钥文件,并通过环境变量GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
将其连接起来。
我正在使用google-api-client gem(0.10.3
版本,发布 13 个月大,因为我在使用 padrino-mailer 时无法安装mime-types >= 3.0
:请参阅this commit),已经测试了Google::Apis::CloudkmsV1::CloudKMSService
方法encrypt_crypto_key
和 decrypt_crypto_key
,它们运行良好。
我已尝试阅读 google-api-client、googleauth 和 signet gem 的源代码。我可以肯定的是:
-
JSON 密钥文件已加载,
private_key
值用于生成 OpenSSL::PKey::RSA.new
here
Signet::OAuth2::Client
的 RSA 密钥为 signing_key
in this file
如果 JSON 密钥文件用于在调用服务器上加密通过encrypt_crypto_key
发送的字符串,同样解密decrypt_crypto_key
和另一端的 CloudKMS 服务器接收到的字符串,我会考虑安全性行为相似。这就是我假设图书馆所做的——端到端加密——但我必须看到它才能相信它。我试图查看 Wireshark 中的流量,但无法理解(也许事实证明了这一点?我不知道 ????)
谁能帮我证明或反驳这种调用 CloudKMS 来加密/解密用户数据的方法——使用 google-api-client gem 和下载为 per the docs 的 JSON 密钥文件——是安全的吗?
相关:对于那些感兴趣的人,CloudKMS API 是 on the roadmap 将包含在 newer google-cloud gem 中。
【问题讨论】:
【参考方案1】:您的客户与 Google 之间的通信通过 TLS 得到保护。您可以在 Wireshark 中看到通信在端口 443 上,并且已协商 TLS 连接。
您的请求已使用 OAuth 进行身份验证。在这种情况下(使用 GCP 外部的服务帐户),这是使用 Using OAuth 2.0 for Server to Server Applications 中记录的流程完成的:
您负责使用颁发给您希望声明的服务帐户的私钥来配置您的非 GCP 应用; 然后它使用该私钥到sign a JWT 并将其提交到 Google 的 OAuth 服务器; Google 使用 OAuth 访问令牌进行回复,该令牌是标识相关服务帐户的不记名凭证; 然后,您将访问令牌与您对 KMS 的请求一起提供,以将发出请求的实体标识为服务帐户并使用其权限; 然后,KMS 和 GCP 使用该身份来评估 IAM 访问控制,以确定特定操作是否获得授权。这是端到端安全的(TLS 连接是端到端的安全性,因为通信双方(您的服务和 Google)是 TLS 端点)。由于您的问题似乎是“这些请求在传输过程中是否安全,以及如何显示这一点”,我认为足以表明正在协商 TLS 连接,Wireshark 应该能够向您展示这一点。 (您的连接库还需要对所提供的证书进行适当的 PKI 评估;验证这是否正确发生有点复杂,但如果您调查您正在使用的工具,那么相信正确发生是一件合理的事情以及他们关于证书验证的断言)。
衷心祝愿并感谢您使用 GCP 和 Cloud KMS。如果您有任何其他问题,请告诉我们。
【讨论】:
OP,你可能还会觉得Encryption in Transit in Google Cloud很有趣。 是的,这对于在进入 Google 的传输过程中保护数据的方式非常有用,同时在 Google 内部飞来飞去,然后离开。 谢谢@TimDierks!这解决了我所有的烦恼,并且非常非常简洁地通知!也感谢您提到 PKI 评估作为我下一步绝对确定的步骤 =)以上是关于从非 Google 系统调用时,CloudKMS 加密/解密如何安全工作?的主要内容,如果未能解决你的问题,请参考以下文章
这些 google KMS 客户端软件包有啥区别? (CloudKMS 与 KeyManagementServiceClient)