问题标签 [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.
node.js - 用于签署 JSON Web 令牌的 Google Cloud Key Management Service
首先,我尝试了以下解决方案:Using Google Cloud Key Management Service to sign JSON Web Tokens 但它不起作用。
创建签名:
然后验证:
我无法弄清楚代码有什么问题。
php - 谷歌云 KMS 权限问题与加密
我尝试加密文件的内容并将加密的数据写入使用 Google 云 KMS 的密码文件。但是 php 脚本显示权限错误。这是我尝试过的 php 脚本
我收到了这个错误
致命错误:未捕获的 Google\ApiCore\ApiException: { "message": "Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied for resource 'projects/testproject/locations/global/keyRings/test/cryptoKeys/testkey'.", "code" : 7, "status": "PERMISSION_DENIED", "details": [] } 在第 139 行的 /home/xxxxx/xxx.com/vendor/google/gax/src/ApiException.php 中抛出
当我打印用户权限时,它显示
curl - 尝试使用 Google Cloud KMS 和 API-KEY 加密文本时出现“未验证”
我正在尝试使用 Google Cloud KMS 加密/解密文件。使用 gcloud 命令加密/解密非常有效。但是现在我需要将此传递给其他没有/不应该访问我的 gcloud 帐户的用户。他们应该能够使用 curl 命令进行解密和加密。
我试过: - 使用 gcloud 命令加密/解密。完美运行 - 在谷歌云计算引擎上加密/解密。完美运行 - 使用 curl 进行加密/解密。不工作。
我希望得到加密的文本。
现在我得到:
google-cloud-platform - 使用云存储时对 Cloud KMS 密钥的权限被拒绝
我正在使用cloud storage
带有 kms 密钥的文件上传。这是我的代码:
我有一个获得许可的cloud-storage-admin.json
服务帐户。使用此服务帐户cloud storage admin
初始化。storage
而且,我使用gcloud kms keys add-iam-policy-binding
添加roles/cloudkms.cryptoKeyEncrypterDecrypter
到cloud-storage-admin.json
服务帐户。
当我尝试使用 kms 密钥上传文件时,仍然出现此权限错误:
Cloud KMS 密钥的权限被拒绝。请确保您的云存储服务帐号已被授权使用此密钥。
更新
c# - 用于 GCP KMS 非对称解密的 C# 加密示例
我们正在使用 GCP 的 KMS 功能进行密钥管理。我们有一个 C# 代理,它将从密钥环中获取最新的公钥,加密一些数据并将其发送到后端服务,该服务将使用非对称解密和密钥环/密钥对其进行解密。
我很难让 C# 生成与 GCP KMS 一起使用的加密有效负载,可能某处的填充设置不正确?KMS 只是响应“解密失败”。
我已经尝试过两者System.Security.Cryptography
但BouncyCastle.NetCore
无济于事。每次都是同样的错误。
KMS 密钥创建如下:
然后我获取公钥:
C# 看起来像这样:
然后尝试解密文件(这是它失败的地方):
我们期望得到解密的文件,但只是得到错误Decryption Failed。
google-cloud-platform - Google Cloud Build 不会替换 cloudbuild.yaml 的机密部分中的值
我正在尝试创建一个 Cloud Build 触发器,其中秘密环境变量使用云 KMS 加密并存储为 Cloud Build 中的替换变量。这样,我的云构建 yaml 相当通用,并且在我们部署到的所有环境中都是相同的。
此云构建 yaml 工作正常:
构建步骤生成此日志行:
完全符合预期。
现在对于那些不起作用的东西,或者至少我不能去工作。假设我想让密钥环名称动态化。然后,我将该 yaml 中的“keyring-dev”替换为${_KMS_KEYRING_NAME}
. 这将产生如下错误:
如果我将 YAML 中的 base64 字符串(以“CiQAH ...”开头)更改为 ${_KMS_VAR_HELLO_WORLD} 之类的替换变量,我将收到此错误:
仅供参考:base64 字符串的值不超过变量值的最大字符数 255。
所以我的猜测是,Cloud Build 不会替代 cloudbuild.yaml 的机密部分中的任何内容。有谁知道解决这个问题?
node.js - 在 HTTP Google Cloud Function (NodeJS) 中同步加载机密
我有一个提供登录 API 端点的谷歌云函数。该函数使用私钥对 JWT 进行签名。
现在,在部署该功能时,我需要安全地加载用于签署 JWT 的私钥。当然,我不能使用环境变量或将其嵌入代码的任何部分,因为任何可以在 gcloud 中读取函数的人都可以看到。
我考虑过的选项是:
为该函数创建一个专用服务帐户,以及一个只有该服务帐户可以访问的 GCS 存储桶,并将密钥以纯文本形式存储在其中。当函数加载时,加载秘密(
await loadMySecrets(...)
)并继续。推荐的方法:创建一个KMS密钥,用该密钥加密秘密,然后将密文与功能码一起上传。在运行时,要求 KMS 解密密钥 (
await decryptSecret(...)
)。
问题是:据我所知,当一个 HTTP 函数被加载时,整个加载过程必须是同步的。
您的函数返回一个请求处理程序,然后 GCF 执行它。在您返回请求处理程序之前没有机会await
返回 Promise,并且 GCF 不支持 HTTP 函数的返回 Promise。GCS 和 KMS API 是基于 Promise 的,不*Sync()
支持调用。
其他人是如何解决这个问题的?我无法同步等待我的 Promise 解决(例如 via sleep()
),因为这会阻塞 Node 事件循环。我是否被迫以某种方式同步提供秘密,或者有没有一种方法可以异步执行它与 GCF 配合得很好?
注意:这是普通的 Google Cloud Functions,而不是Firebase。
注 2:有一个核选项,即将异步方面移到 Express 中间件中。我真的,真的不想这样做,因为我必须包装诸如cookie-parser
and之类的东西passport
,它期望在第一次创建中间件时秘密可用,在异步中间件中加载我的秘密然后委托。丑陋,可能会影响性能。
encryption - 如何使用 Google Cloud Build 和 Google Cloud KMS 从构建时解密的文件中读取变量
我正在按照本教程将加密密钥添加到我的 cloudbuild YAML 文件中。我试图了解我应该如何在我的 YAML 文件的后续步骤中“使用工作区目录中的解密 ... 文件”变量。
我解密密钥文件的 cloudbuild 步骤如下:
该教程不清楚如何执行此操作,我在 Internet 上找不到与此相关的任何内容。
非常感谢任何帮助。
谢谢。
encryption - 如何从 Google Cloud Storage 解密文件?
我有一个存储在使用以下命令行生成的 Google Cloud Storage 存储桶中的加密文件:
我现在正在尝试使用以下代码在 Cloud Run 服务中解密此类文件:
我收到以下错误:
其中,根据这具有误导性,应被视为未正确破译。我无法摆脱在某处缺少 base64 编码/解码的感觉,但我似乎没有找到解决方案。
如果我从命令行运行解密它就可以了。
非常感谢任何帮助。
谢谢。
编辑:感谢这个很棒的社区,问题解决了。以下是完成这项工作的步骤,以防其他人面临同样的问题:
使用以下命令行加密文件并通过 Web UI 上传。
使用以下代码解密:
gcloud - 这些 google KMS 客户端软件包有什么区别?(CloudKMS 与 KeyManagementServiceClient)
我有一个似乎使用“com.google.api.services.cloudkms.v1.CloudKMS”来调用 KMS 的 java 代码库。在线文档说使用“com.google.cloud.kms.v1.KeyManagementServiceClient”
当我查找这两个软件包时,似乎都已更新,但是参考文档建议使用后者。
https://cloud.google.com/kms/docs/reference/libraries
有人能告诉我这两个客户包有什么区别吗?我是否应该移到参考链接的那个?