簡體   English   中英

如何從 lambda function 更新秘密管理器秘密值?

[英]how to update secrets manager secret value from lambda function?

我有一個從 api 檢索到的訪問令牌,它的生命周期為 5 小時。 我看到秘密經理可以輪換一個秘密,但最短輪換時間是 1 天。 因此,我認為我可以編寫一個 lambda function 每 5 小時工作一次,並從 api 獲取一個新令牌並使用此令牌更新秘密。 此答案https://stackoverflow.com/a/a/66610124/11902308提到它可以做到這一點,但我找不到有關如何更新Z945FC4444444444444449555F55555F55F55F55F55F55F55F55F55F55F55F55F55F55F55F55F55F55F555F555F555F555F555F555F55F555F555F555F555F55F55F55F55F55F55F55F55F55F55F55F55F55F55F555F55F5555F50B6C5.BADE5Z:/

注意:我有多個任務,生成新任務時令牌無效,因為該任務必須共享它。

您沒有提到您正在使用哪個 AWS SDK,但這里有一個 AWS SDK 示例供 JS 創建或更新 Secret。 此外,它處理已刪除機密的情況(SecretsManager 不會立即刪除機密,它會將它們標記為計划刪除)並恢復和更新它們。

import { AWSError } from 'aws-sdk';
import SecretsManager, { SecretARNType } from 'aws-sdk/clients/secretsmanager';

const secretsManager = new SecretsManager({ apiVersion: '2017-10-17' });

const putSecret = async (name: string, secret: Record<string, unknown>, secretId?: SecretARNType): Promise<SecretARNType> => {
  try {
    const result = secretId
      ? secretsManager.updateSecret({
          SecretId: secretId,
          SecretString: JSON.stringify(secret),
        })
      : secretsManager.createSecret({
          Name: name,
          SecretString: JSON.stringify(secret),
        });

    const { ARN } = await result.promise();

    if (!ARN) throw new Error(`Error saving secret ${name}`);

    return ARN;
  } catch (error) {
    const awsError = error as AWSError;

    // InvalidRequestException indicates that the secret is scheduled for deletion
    if (awsError.code === 'InvalidRequestException') {
      // restore existng secret
      await secretsManager
        .restoreSecret({
          SecretId: secretId || name,
        })
        .promise();
      // update secret
      const { ARN } = await secretsManager
        .updateSecret({
          SecretId: secretId || name,
          SecretString: JSON.stringify(secret),
        })
        .promise();

      if (!ARN) throw new Error(`Error restoring secret ${name}`);

      return ARN;
    }

    throw error;
  }
};

代碼在 TypeScript 中,但應該很容易轉換為您選擇的語言,因為 AWS SDK 函數在其他語言中具有相同的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM