通过 lambda 函数测试旋转秘密时

While testing for Rotating secret through lambda function

这是我的 lambda 函数 (https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/blob/master/SecretsManagerRotationTemplate/lambda_function.py) 当我在测试时

{"arn":"writing arn from secret",
"token":"any random 32 digit number",
"step":"testsecret"}

给出错误

  "errorMessage": "'SecretId'",
  "errorType": "KeyError",
  "requestId": "########",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 24, in lambda_handler\n    arn = event['SecretId']\n"
  ]
}

该函数需要 'SecretId' in the event,但您当前的 event 没有:

{"arn":"writing arn from secret",
"token":"any random 32 digit number",
"step":"testsecret"}

猜想arn应该是SecretId:

{"SecretId":"writing arn from secret",
"token":"any random 32 digit number",
"step":"testsecret"}

您可能还会遇到其他类似的错误,您必须以相同的方式修复这些错误。

这可能是由于三个原因造成的:

  1. 机密管理器中的现有密码与数据库密码不匹配。(当 lambda 函数尝试验证数据库时,它应该与现有密码匹配,以便它可以验证和更新密码)。您可以找到以下 cloudwatch 日志:

[ERROR] 2022-03-03T12:05:24.178Z 1a39a205-36f5-XXXX-XXXX-XXXXXXX setSecret: Unable to log into database with previous, current, or pending secret of secret arn arn:aws:secretsmanager:eu-west-2:XXXXXXXXXXX:secret:XYZXXXXXXXXXXXXX

  1. 数据库安全组应该允许 lambda fn 访问数据库实例(创建一个以 lambda sg 作为源和数据库端口的入站规则)

  2. 验证您已连接到 secretsmanager api(您的 NAT 网关应有权访问 secrets manager api 端点)和服务名称为 [= 的端点32=].eu-west-2.secretsmanager / 端点类型接口 还要验证执行 lambda fn 的区域。