在测试我编写的一个Google Cloud函数,该函数试图访问存储在secret Manager中的密钥时,我得到了这个错误:Error: 7 PERMISSION_DENIED: Permission 'secretmanager.versions.access' denied for resource '<resource-name>' (or it may not exist).
我的代码:
const {SecretManagerServiceClient} = require('@google-cloud/secret-manager');
const secretClient = new SecretManagerServiceClient();
...
const [version] = await secretClient.accessSecretVersion({
name: secretName
});
const secret = version.payload.data.toString();我遵循了文档中的步骤,在对服务的调用中指定了密钥的全名(projects/<project-id>/secrets/<secret-name>/versions/latest,所以Can't access secret in GCP Secret Manager中的问题在这里不适用),并为运行我的云函数的服务帐户提供了"Secret Manager secret Accessor“角色(这应该可以排除Why isn't my Firebase app connecting to Google Secret Manager?中的根本问题)。
我在尝试使用curl本地触发函数和在UI (GCF > function details > Testing)中测试函数时都遇到过这个问题。
我是不是漏掉了什么?
发布于 2020-07-21 11:53:45
事实证明,我将"Secret Manager Secret Accessor“角色分配给了错误的服务帐户--我将其分配给了用于创建/更新/删除函数(service-<project-id>@gcf-admin-robot.iam.gserviceaccount.com)的GCF administrative service account,而不是实际用于运行函数(<project-id>@appspot.gserviceaccount.com)的runtime service account。
一旦我将上面的角色(以及其他所需的功能)添加到运行时服务帐户,该功能就成功完成了。
https://stackoverflow.com/questions/63000973
复制相似问题