问题标签 [google-cloud-kms]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2532 浏览

google-cloud-platform - Google Cloud KMS:无法解密

我正在尝试解密 kms 加密文件并遇到以下错误:

我正在使用示例解密代码。

我可以使用命令行解密文件。

从这里抛出异常:

代码:https ://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/kms/api-client/snippets.py

如果我在这里遗漏了什么,请告诉我。

0 投票
1 回答
165 浏览

google-cloud-platform - Google Cloud KMS:无法构建客户端对象

我在 Cloud ML 引擎中运行的培训应用程序中使用以下代码:

我收到以下错误:

我可以从安装了 Google Cloud SDK 的本地计算机上运行相同的代码,没有任何问题。如果我在这里遗漏了什么,请告诉我。

0 投票
2 回答
498 浏览

google-cloud-platform - Google 的密钥管理系统:密钥轮换后的数据解密

语境

我正在按照 GCP 的说明在存储桶中存储机密。在将文件上传到存储桶之前,KMS 用于文件加密。

由于数据加密发生在谷歌存储之外,我对密钥轮换的一个方面有点困惑。

设想

让我们考虑一个特定的场景:

  1. 在 2017 年1 月 1日,我创建了一个密钥环和一个密钥A(实际上是A_ver1因为密钥是版本化的)。此外,密钥轮换策略设置为每年触发轮换。
  2. 在 2017 年 1 月15 日some_file.txt,我运行了一个使用A_ver1: 加密的命令curl -s -X POST "https://cloudkms.googleapis.com/v1/projects/my-project/<...>" \ -d "{\"plaintext\":\"<...SOME_FILE_CONTENT...>\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json"
  3. 我立即将加密结果保存为存储桶some_file.txt.encrypted
  4. 我什么都不做,在2018 年-01 月 1 日发生了密钥轮换。据我了解A_ver1被禁用A_ver2生成并激活。这两个事件准同时发生。
  5. 2018-06 -01 我意识到我需要 unencrypt some_file.txt.encrypted。我正在下载文件,然后尝试运行命令以使用A_ver2...

问题

问题 1A_ver2 :如果文件是用早期版本加密的,当我尝试解密文件时会发生什么A_ver1

问题2:如果解密失败,我应该首先做些什么来防止它?

0 投票
1 回答
152 浏览

google-cloud-platform - 谷歌云 KMS 服务器安装

我想从源代码控制仓库在谷歌云计算引擎微实例上部署节点应用程序。

作为此部署的一部分,我想使用 KMS 来存储数据库凭据,而不是将它们放在我的源代码控制中。要从 KMS 获取凭据,我首先需要使用 GCLOUD 在实例上进行身份验证。

将 GCloud CLI 作为启动脚本的一部分安装并让默认服务帐户处理身份验证是否安全?然后使用它来提取解密的详细信息并将它们保存到文件中?

文档演练开发示例,但我还没有找到任何关于这应该如何在生产中工作的信息,特别是因为我显然也不想将 GCloud 凭据存储在源代码控制中。

0 投票
1 回答
2036 浏览

java - Dataproc 依赖冲突 - google-api-client

我正在构建一个库,用于从云存储中获取加密的秘密(在 Scala 中,使用 Java 客户端)。我正在使用以下谷歌库:

在本地一切正常,但是当我尝试在 Dataproc 中运行我的代码时,出现以下错误:

我的代码中的违规行是:

我在文档中看到 Dataproc 上提供了一些谷歌库(我使用的是带有映像版本 1.2.15 的 Spark 集群)。但据我所见,google-api-client 的传递依赖与我在本地使用的相同(1.23.0)。那怎么找不到方法呢?

为了在 Dataproc 上运行,我是否应该设置不同的依赖项?

编辑

最后设法在另一个项目中解决了这个问题。事实证明,除了着色所有 google 依赖项(包括 gcs-connector !!),您还必须向 JVM 注册您的着色类以处理 gs:// 文件系统。下面是适用于我的 maven 配置,可以使用 sbt 实现类似的功能:

父 POM:

子 POM:

并添加一个名为org.apache.hadoop.fs.FileSystemunder的文件path/to/your-project/src/main/resources/META-INF/services,其中包含您的着色类的名称,例如:

(注意这个文件是从gcs-connector父 POM 的库中过滤出来的)

0 投票
1 回答
6511 浏览

google-cloud-kms - 谷歌云 KMS:加密有效但解密失败

我正在尝试使用 google KMS 工具解密令牌。由于某种原因,在本地运行它,加密似乎有效,但解密无效。

我正在运行以下代码:

最后一行返回 400 错误:

然而,这个名字实际上似乎是正确的。令人惊讶的是,替换对decryptby的调用encrypt,我得到了一个有效的输出。

我错过了一个明显的错误,还是应该在项目的 github 上打开一个问题?

编辑:我试图解密纯文本,这当然没有多大意义(但错误消息在某种程度上误导了我)。

0 投票
1 回答
694 浏览

google-cloud-platform - 从 KMS 获取 GCP 部署的机密

我想使用 Deployment Manager 在 GCP 中部署 Cloud VPN 隧道

为此,我使用 Python 设置了一个部署脚本,并且我不希望在我的配置中以纯文本形式共享 VPN 隧道的密钥。

所以我尝试包含通过KMS加密的秘密,然后在 python 脚本中调用 KMS 以获取纯文本秘密。

解密秘密的 python 代码如下所示:

但是,如果我部署此代码,我只会从部署管理器中收到以下错误消息:

我还尝试在我的配置 yaml 中包含完整的 google-api-python-client 库,但我仍然收到此错误。

有人知道吗?

0 投票
1 回答
2353 浏览

javascript - "Invalid value at 'ciphertext' (TYPE_BYTES)"

SITUATION:

I am trying to download and decrypt some data from my google cloud bucket.

For encryption and decryption, I use:

https://cloud.google.com/kms/docs/quickstart#decrypt_data

Sadly, I get an error : "Invalid value at 'ciphertext' (TYPE_BYTES)".

I know the cyphertext is correct, I believe this may be an issue with the type of data expected by the Google KMS API, i.e.: when retrieving the encrypted data, my code somehow changed it's type before sending the POST request to the Google KMS API.

What did I do wrong and how do I fix it ?


CODE:


OUTPUT:

0 投票
3 回答
1220 浏览

security - 我应该如何使用 Google Cloud KMS 存储由另一个应用程序生成的访问令牌?

我正在构建一个 Node.js 应用程序,该应用程序从我需要访问的另一个应用程序接收长期访问令牌。我不想将这些访问令牌直接存储在数据库中,因为任何有权访问这些令牌的人基本上都可以用它做任何他们想做的事情。

我是 Cloud KMS 和一般此类系统的新手,但花了最后几个小时学习它。这似乎是解决我的问题的理想解决方案,但我不完全确定应该遵循什么策略来存储这些访问令牌:

  1. 我是否应该在 Cloud KMS 中存储一个加密密钥,并将该加密密钥与像这样的 NPM 包一起使用,以便在我的数据库中存储访问令牌?
  2. 我应该将访问令牌直接存储在 KMS 中吗?我的假设是我将拥有一个密钥库,并且每 14 天轮换一次密钥。每当我收到访问令牌时,我只需对其进行加密并将其存储在 KMS 中。我只将密文存储在我的数据库中。当我需要从 KMS 访问访问令牌时,我使用密文对其进行解密。

以上哪项是使用 KMS 的正确方法?如果是选项 2,我还有其他问题:

  • 我可以使用单个密钥加密大量访问令牌,还是需要为每个访问令牌创建一个新密钥?
  • 如果我需要修改在 KMS 加密的访问令牌,我可以简单地修改它还是需要销毁旧版本并重新加密?

谢谢你的帮助!

0 投票
1 回答
2052 浏览

google-app-engine - 您可以在具有服务角色的项目之间共享 Google Cloud KMS 密钥吗?

这篇 GCP 文章建议使用两个独立的项目:一个用于密钥管理,另一个用于加密/解密。

这似乎是一个适用于用户角色的设置,但不适用于服务角色,因为服务角色绑定到它所属的项目。我错过了什么吗?

实际上有没有一种方法可以让一个角色(比如项目 1)创建 KMS 密钥,然后拥有一个服务角色(比如项目 2),可以在运行时访问所述密钥进行解密?