使用 Node.js 更新 Google Cloud Secret Manager 中的数据

Posted

技术标签:

【中文标题】使用 Node.js 更新 Google Cloud Secret Manager 中的数据【英文标题】:Update data in Google Cloud Secret Manager using Node.js 【发布时间】:2021-10-03 06:12:42 【问题描述】:

我在 Google Cloud Secret Manager 中有一些数据,有什么方法可以更新这些数据。我正在尝试使用以下代码进行更新

client.updateSecret(
  secret: 
    name: 'projects/xyz/secrets/test',
    labels: 
      secretmanager: 'rocks',
    ,
  ,
  updateMask: 
    paths: ['labels'],
  ,
).then(res => 
  let [data] = res
  console.log('success in updating', data)
).catch(rej => 
  console.log('erro in updating', rej)
)

【问题讨论】:

【参考方案1】:

您可以使用此“Node.js”示例代码作为参考来更新 Google Cloud Secret Manager 中的数据。

/**
 * TODO(developer): Uncomment these variables before running.
 */
// const name = 'projects/my-project/secrets/my-secret';

// Imports the Secret Manager library
const SecretManagerServiceClient = require('@google-cloud/secret-manager');

// Instantiates a client
const client = new SecretManagerServiceClient();

async function updateSecret() 
  const [secret] = await client.updateSecret(
    secret: 
      name: name,
      labels: 
        secretmanager: 'rocks',
      ,
    ,
    updateMask: 
      paths: ['labels'],
    ,
  );

  console.info(`Updated secret $secret.name`);


updateSecret();

请参阅此documentation 了解更多信息。

【讨论】:

【参考方案2】:

假设秘密已经存在,您需要创建一个秘密版本来更新秘密数据。这是我使用的方法。

const  SecretManagerServiceClient  = require('@google-cloud/secret-manager');
const client = new SecretManagerServiceClient()
const parent = 'projects/YOUR_PROJECT' 

async function addSecretVersion(secretName, payload) 

    if (typeof payload != 'string') throw `Secret payload must be a string`
    const [version] = await client.addSecretVersion(
        parent: `$parent/secrets/$secretName`,
        payload: 
            data: Buffer.from(payload, 'utf8'),
        ,
    )
    console.info(`Added secret version $version.name`)

【讨论】:

【参考方案3】:

Secret Manager 中的数据存储在 Secret Version 上。

秘密 - 包含有关秘密的元数据,包括名称、时间戳、标签等。 秘密版本 - 包含实际的秘密数据。

一个 Secret 包含 0 个或多个 Secret Versions秘密版本是不可变的,所以你不能更新里面的值。但是,您可以add a new Secret Version。这将创建一个新的 Secret Version 并更新“最新”指针的值:

const [version] = await client.addSecretVersion(
  parent: parent,
  payload: 
    data: myNewPayload,
  ,
);

有关版本控制的更多信息,请查看:

What is first-class versioning? Secret and secret version definitions

【讨论】:

以上是关于使用 Node.js 更新 Google Cloud Secret Manager 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

Google Drive Node.js - 从节点v7更新到v9后上传文件时出错

使用 node.js 标准环境在 AppEngine 上找不到模块 @google-cloud/firestore

使用 Node.js 的 Google App Engine gcloud app 部署错误 [5]

Mongoose - 更新数组中的每个子文档(node.js)

Mongoose - 更新数组中的每个子文档(node.js)

如何使用 Google API 服务库 (Node.js) 运行 Google 应用脚本