【问题标题】:Update data in Google Cloud Secret Manager using Node.js使用 Node.js 更新 Google Cloud Secret Manager 中的数据
【发布时间】:2026-02-06 06:20:07
【问题描述】:

我在 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)
})

【问题讨论】:

    标签: node.js google-cloud-platform google-secret-manager


    【解决方案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,
          },
        });
        

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

        【讨论】: