Amazon cloudformation 如何在aws中正确设置postgres rds db的多用户轮换?

Amazon cloudformation 如何在aws中正确设置postgres rds db的多用户轮换?,amazon-cloudformation,aws-cdk,Amazon Cloudformation,Aws Cdk,我正在cdk中设置db用户,如下所示: const serviceUser = new rds.DatabaseSecret(this, 'my-foo-service-user-secret', { username: 'my-foo-service-user', masterSecret: this.postgresDb.secret, }); const myAttachedSecret = serviceUser.attach(t

我正在cdk中设置db用户,如下所示:

    const serviceUser = new rds.DatabaseSecret(this, 'my-foo-service-user-secret', {
        username: 'my-foo-service-user',
        masterSecret: this.postgresDb.secret,
    });

    const myAttachedSecret = serviceUser.attach(this.postgresDb);
    this.postgresDb.addRotationMultiUser('my-foo-service-user-rotation', {
        secret: myAttachedSecret,
    });
My db已添加用户:

        CREATE USER "my-foo-service-user";
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 79, in lambda_handler
    set_secret(service_client, arn, token)
  File "/var/task/lambda_function.py", line 168, in set_secret
    raise ValueError("Unable to log into database using current credentials for secret %s" % arn)
ValueError: Unable to log into database using current credentials for secret ...
(主用户正在使用单用户旋转btw)

First cloudwatch告诉我,机密已在secrets manager中成功创建:

已成功为。。。和版本…

cloudwatch告诉我它无法更新用户:

        CREATE USER "my-foo-service-user";
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 79, in lambda_handler
    set_secret(service_client, arn, token)
  File "/var/task/lambda_function.py", line 168, in set_secret
    raise ValueError("Unable to log into database using current credentials for secret %s" % arn)
ValueError: Unable to log into database using current credentials for secret ...
我在旋转lambda上挖苦了一番,据我所知,“createSecret”只更新secrets manager,这行代码(setSecret方法):


对我来说这看起来像一个bug,但我找不到关于多用户postgres轮换的任何问题,所以我猜我的设置是错误的。有谁能发现我的错误吗?

您是否在数据库中为
my foo service user
设置了密码?使用由Secrets Manager生成并在控制台中可见的。然后轮换就可以开始了。我不想手动这样做,因为它破坏了全自动开发的目的。您已经需要手动创建用户了(
create user“my foo service user”;
),您可以对自定义资源进行编码,以查找密码并使用主密码在您的数据库中创建具有此密码的用户。我通过从数据库修补步骤访问secret manager并使用生成的密码一次性设置数据库用户的密码来解决此问题。因此,我仍然是全自动的,但如果轮换lambda在secrets manager中第一次创建机密时这样做会更好。您是否在DB中为
my foo service user
设置了密码?使用由Secrets Manager生成并在控制台中可见的。然后轮换就可以开始了。我不想手动这样做,因为它破坏了全自动开发的目的。您已经需要手动创建用户了(
create user“my foo service user”;
),您可以对自定义资源进行编码,以查找密码并使用主密码在您的数据库中创建具有此密码的用户。我通过从数据库修补步骤访问secret manager并使用生成的密码一次性设置数据库用户的密码来解决此问题。因此,我仍然是完全自动化的,但如果轮换lambda在secrets manager中第一次创建机密时这样做会更好。