从非 Google 系统调用时,CloudKMS encryption/decryption 如何安全工作?
How does CloudKMS encryption/decryption work securely when being called from a non-Google system?
我需要知道发送到 Google CloudKMS 的 plaintext
/ciphertext
和用于验证的 public/private 密钥在传输过程中是安全的,但是我不知道如何证明这一点。
根据 KMS docs,我创建了一个服务帐户,下载了 JSON 密钥文件,并通过环境变量 GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
.
连接了它
我正在使用 google-api-client gem (at version 0.10.3
, released 13 months old, because I can't install mime-types >= 3.0
whilst using padrino-mailer: see this commit), have tested the Google::Apis::CloudkmsV1::CloudKMSService
methods encrypt_crypto_key
and decrypt_crypto_key
,它们运行良好。
我已经尝试阅读 google-api-client, googleauth, and signet gem 的源代码。我唯一确定的是:
- 加载JSON密钥文件,
private_key
值用于制作OpenSSL::PKey::RSA.new
here
Signet::OAuth2::Client
在 this file 中被赋予 RSA 密钥 signing_key
如果 JSON 密钥文件用于加密调用服务器上通过 encrypt_crypto_key
发送的字符串,并且同样解密由 [=19= 接收的字符串,我认为安全性已得到证实],另一端的 CloudKMS 服务器的行为类似。这就是我假设图书馆所做的——端到端加密——但我必须亲眼所见才能相信它。我试图在 Wireshark 中查看流量,但无法理解它(也许事实证明了这一点?我不知道)
任何人都可以帮助我证明或反驳这种调用 CloudKMS 到 encrypt/decrypt 用户数据的方法 – 使用 google-api-client gem with a JSON key file downloaded as per the docs – 是安全的吗?
相关:对于那些感兴趣的人,CloudKMS API 是 on the roadmap to be included in the newer google-cloud gem。
您的客户端与 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 端点)。由于您的问题似乎是 "are these requests secure in transit, and how can I show this",我认为这足以表明正在协商 TLS 连接,Wireshark 应该能够向您显示这一点。 (您的连接库还需要对提供的证书进行适当的 PKI 评估;验证这是否正确发生有点复杂,但如果您调查您正在使用的工具,相信正确发生是合理的以及他们关于证书验证的断言)。
衷心祝愿并感谢您使用 GCP 和 Cloud KMS。如果您还有其他问题,请告诉我们。
我需要知道发送到 Google CloudKMS 的 plaintext
/ciphertext
和用于验证的 public/private 密钥在传输过程中是安全的,但是我不知道如何证明这一点。
根据 KMS docs,我创建了一个服务帐户,下载了 JSON 密钥文件,并通过环境变量 GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
.
我正在使用 google-api-client gem (at version 0.10.3
, released 13 months old, because I can't install mime-types >= 3.0
whilst using padrino-mailer: see this commit), have tested the Google::Apis::CloudkmsV1::CloudKMSService
methods encrypt_crypto_key
and decrypt_crypto_key
,它们运行良好。
我已经尝试阅读 google-api-client, googleauth, and signet gem 的源代码。我唯一确定的是:
- 加载JSON密钥文件,
private_key
值用于制作OpenSSL::PKey::RSA.new
here Signet::OAuth2::Client
在 this file 中被赋予 RSA 密钥
signing_key
如果 JSON 密钥文件用于加密调用服务器上通过 encrypt_crypto_key
发送的字符串,并且同样解密由 [=19= 接收的字符串,我认为安全性已得到证实],另一端的 CloudKMS 服务器的行为类似。这就是我假设图书馆所做的——端到端加密——但我必须亲眼所见才能相信它。我试图在 Wireshark 中查看流量,但无法理解它(也许事实证明了这一点?我不知道)
任何人都可以帮助我证明或反驳这种调用 CloudKMS 到 encrypt/decrypt 用户数据的方法 – 使用 google-api-client gem with a JSON key file downloaded as per the docs – 是安全的吗?
相关:对于那些感兴趣的人,CloudKMS API 是 on the roadmap to be included in the newer google-cloud gem。
您的客户端与 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 端点)。由于您的问题似乎是 "are these requests secure in transit, and how can I show this",我认为这足以表明正在协商 TLS 连接,Wireshark 应该能够向您显示这一点。 (您的连接库还需要对提供的证书进行适当的 PKI 评估;验证这是否正确发生有点复杂,但如果您调查您正在使用的工具,相信正确发生是合理的以及他们关于证书验证的断言)。
衷心祝愿并感谢您使用 GCP 和 Cloud KMS。如果您还有其他问题,请告诉我们。