Google Cloud KMS App Engine 加密不起作用

Posted

技术标签:

【中文标题】Google Cloud KMS App Engine 加密不起作用【英文标题】:Google Cloud KMS App Engine Encrypt not working 【发布时间】:2020-08-11 08:13:43 【问题描述】:

我想使用多个 AppEngine 服务加密/解密 Google Cloud 项目中的一些敏感数据。我启用了 Cloud KMS API,并通过 IAM 将角色“Cloud KMS CryptoKey Encrypter/Decrypter”添加到 App Engine 服务帐户 (projectId@appspot.gserviceaccount.com)。

然后,我创建了一个环 (my-ring) 和一个环内的密钥 (my-key),接受默认轮换策略(90 天)。所以我有一个像“projects/my-project-id/locations/europe-west3/keyRings/my-ring/cryptoKeys/my-key”这样的密钥

我下载了 App 服务帐户 json 凭据,以便可以在本地调试代码。 GOOGLE_APPLICATION_CREDENTIALS 环境变量指向下载的文件。

当我尝试加密消息时,我收到以下错误:"error":"invalid_grant","error_description":"Invalid grant: account not found"

我的 Go 代码如下所示:

func encrypt(plainText []byte) (string, error) 
    ctx := context.Background()
    client, err := kms.NewKeyManagementClient(ctx)
    if err != nil 
        return "", err
    
    req := &kmspb.EncryptRequestName: variables.EncryptionKey, Plaintext: plainText
    result, err := client.Encrypt(ctx, req)
    if err != nil 
        fmt.Println(fmt.Errorf("encryption error %s", err))
        return "", err
    
    return base64.URLEncoding.EncodeToString(result.Ciphertext), nil


我不知道我做错了什么。

【问题讨论】:

可能有很多原因:blog.timekit.io/… 【参考方案1】:

除了GOOGLE_APPLICATION_CREDENTIALS 指向另一个项目的帐户外,一切都很好。这只是我的错

【讨论】:

以上是关于Google Cloud KMS App Engine 加密不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud KMS:无法解密

Google Cloud KMS 错误 - 您所在地区无法访问此 API。 (HTTP 状态 - 403)

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

使用 Google Cloud KMS 进行 Firebase 实时数据库加密的最佳实践 [关闭]

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

Cloud Function 使用 KMS 密钥解密的权限被拒绝