当前位置: 首页 > 知识库问答 >
问题:

尽管服务号的角色正确,但秘密管理器访问被拒绝

澹台正真
2023-03-14

我正在Nodejs(10)中编写一个云函数,并尝试访问这样一个秘密:

const [secret] = await new SecretManagerServiceClient().accessSecretVersion({
    name: `projects/PROJECT_NUMBER/secrets/SECRET_NAME/versions/latest`
})

我在web控制台中创建了该机密,代码中使用的名称与现有机密的名称匹配。在云功能详细信息页面上,它指出服务帐户是PROJECT_ID@appspot.gserviceaccount,com,所以我添加了secretmanager。秘书助理角色。但是,每次我都会遇到同样的错误:

<代码>错误:7 PERMISSION\u DENIED:PERMISSION“secretmanager”。版本。“拒绝访问资源”项目/项目编号/机密/机密名称/版本/最新版本(或者它可能不存在)

如果我指定一个具体的版本或者只使用最新版本,这没有什么区别。

共有3个答案

雷献
2023-03-14

我在使用secretmanager和python google cloud secretmanager库(2.4)时遇到过类似的问题。具体来说,在创建一个秘密并将我的服务帐户交给secretmanager之后。secretAccessor在这个秘密上的角色(没有其他,遵循最小特权原则),我在尝试访问它时遇到以下错误:

details = "Permission 'secretmanager.versions.access' denied for resource 'projects/projectid/secrets/keyname/versions/latest' (or it may not exist)."

我只能通过添加secretmanager来实现它。查看器在项目级别的角色,据我所知,文档中没有描述。

甄德寿
2023-03-14

我也有同样的问题,要解决它,我必须:

>

它看起来像

在IAM Admin中,将“Secret Manager Secret Accessor”角色添加到此服务帐户。

在这之后,一切都正常了!

米俊喆
2023-03-14

HTTP云功能代码:

const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');

const secretManagerServiceClient = new SecretManagerServiceClient();
const name = 'projects/shadowsocks-218808/secrets/workflow/versions/latest';

exports.testSecretManager = async (req, res) => {
  const [version] = await secretManagerServiceClient.accessSecretVersion({ name });
  const payload = version.payload.data.toString();
  console.debug(`Payload: ${payload}`);
  res.sendStatus(200);
};

部署:

gcloud functions deploy testSecretManager --runtime nodejs10 --trigger-http --allow-unauthenticated

Deploying function (may take a while - up to 2 minutes)...done.                                                                                                                                                                                                                        
availableMemoryMb: 256
entryPoint: testSecretManager
httpsTrigger:
  url: https://us-central1-shadowsocks-218808.cloudfunctions.net/testSecretManager
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
name: projects/shadowsocks-218808/locations/us-central1/functions/testSecretManager
runtime: nodejs10
serviceAccountEmail: shadowsocks-218808@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/gcf-upload-us-central1-43476143-b555-4cb2-8f6f-1b2d1952a2d7/42c4cda4-98a8-4994-a3be-d2203b9e646a.zip?GoogleAccessId=service-16536262744@gcf-admin-robot.iam.gserviceaccount.com&Expires=1596513795&Signature=kbLw5teN8EoYmj4fEweKKiIaakxcrhlUg2GGHV4jWJjvmeEfXePpRNOn9yz2zLn%2Fba0UqM9qdJMXujs5afBk%2BVBmywPEiptAZe2qgmldpr%2BsYejFu0woNgsPHVqtJ0NoWDo6W2dq4CuNNwO%2BaQ89mnhahUUQTInkJ55Y3wCIe9smk%2BqWtcvta3zICiToA7RQvPKY5MS6NViyj5mLxuJtDlTY9IKPL%2BqG6JAaQJSFYKYVgLyb6JfirXk8Q7%2FMvnHPpXPlhvsBLQksbF6jDPeefp2HyW4%2FSIQYprfpwKV3hlEIQyRQllz5J9yF83%2FxDPh%2BQPc5QmswKP5XAvYaszJPEw%3D%3D
status: ACTIVE
timeout: 60s
updateTime: '2020-08-04T03:34:32.665Z'
versionId: '2'

测试:

gcloud functions call testSecretManager --data '{}'

获得与您相同的错误:

error: |-
  Error: function terminated. Recommended action: inspect logs for termination reason. Details:
  7 PERMISSION_DENIED: Permission 'secretmanager.versions.access' denied for resource 'projects/shadowsocks-218808/secrets/workflow/versions/latest' (or it may not exist).

解决方案:

您可以找到serviceAccountEmail:shadowsocks-218808@appspot.gserviceaccount.com来自云功能的部署详细信息。

转到IAM

再次测试:

> gcloud functions call testSecretManager --data '{}'

executionId: 1tsatxl6fndw
result: OK

阅读testSECManager云函数的日志:

gcloud functions logs read testSecretManager

您将看到机密负载字符串的日志。

 类似资料:
  • 我在帐户a中存储了一个密钥(USRFTP),我想从EC2框中使用帐户B中的角色ASHISHROLE访问这个密钥。我正在运行python代码来获取密钥,如下所示,在密钥中使用资源策略,KMS策略如下所示,但仍然得到这个问题 clienterRor:调用GetSecretValue操作时发生错误(AccessDeniedException):User:ARN:AWS:STS::AccountB:假定-

  • 这是一个棘手的问题,我有以下输出: mysqldump:得到错误: 1045:访问拒绝用户'root'@'localhost'(使用密码:是)当尝试连接 当试图在Windows XP上使用导出我的数据库时。用户名为root,密码正确,仅包含字母数字字符。我尝试过不同的情况,有/没有引号,指定使用和,指定使用和和其他指定用户/密码的方法等,指定主机(它是所有本地的),甚至使用来指定数据库,而不仅仅是

  • 我正在尝试从使用文件,以使用谷歌云平台机密管理器。我已经按照这里的说明操作了,但是我遇到了一个错误,说我没有权限访问这个秘密。 这就是我得到的错误: 我确实创建了一个具有“所有者”权限的服务帐户,下载了它,并使其

  • 我正在构建一个简单的应用程序,它将Twilio凭据存储在GCP秘密管理器中,并在需要时将其拉下来。但是,我一直收到项目资源上的拒绝权限错误(403): 谷歌。api_核心。例外。PermissionDenied:403资源项目的权限被拒绝。 我使用环境变量设置到包含服务号凭据的JSON文件的路径。 以下是我已经尝试过的: 确保在GCP控制台中正确设置权限。服务帐户被设置为项目的所有者和项目级别的机

  • 我有一个使用Bosh部署的concourse环境。它配置有AWS机密管理器。管道机密模板的格式为 我在AWS秘密管理器(其他类型的秘密)中创建了一个秘密,其值如下。 我在团队中设置了一个总汇管道。

  • 我们在AWS环境中部署了完整的应用程序,我们发现AWS秘密管理器是存储数据库和其他一些组件的秘密的正确选择。