rds-proxy-password-rotation
:warning: Work in progress :warning:
- add Terraform module
Python script for multi-user password rotation using RDS and RDS proxy. It supports credentials for the application and the RDS proxy.
We implemented this logic again, because current implementations
- have no tests
- have no release process
- are not published to PyPI
- have no Docker image available
- have no Terraform module available
Pre-requisites
-
Python 3.10 or later
-
For each db user:
-
Clone the user in the database and grant the necessary permissions. We suggest to add a
-clonesuffix to the username. -
Create a secret in AWS Secrets Manager with the following key-value pairs (for every user and its clone):
rotation_type: "AWS RDS"rotation_usernames: Optional. The list of usernames that a part of the rotation, e.g.["app_user", "app_user-clone"]. If not provided,usernameis used only.proxy_secret_ids: Optional. The list of ARNs of the secrets that are attached to the RDS Proxy, e.g.["arn:aws:secretsmanager:region:account-id:secret:secret-name"]. If not provided, the proxy credentials are not adjusted.database_host: The hostname of the databasedatabase_port: The port of the databasedatabase_name: The name of the databaseusername: The username for the userpassword: The password for the user
This credential will be used by the application to connect to the proxy. You may add additional key-value pairs as needed.
-
-
If you are using RDS Proxy:
- Create a secret in AWS Secrets Manager with the following key-value pairs:
username: The username for the user that the proxy will use to connect to the databasepassword: The password for the user that the proxy will use to connect to the database
- Attach the secret to the RDS Proxy.
- Create a secret in AWS Secrets Manager with the following key-value pairs:
-
The docker image can be pulled from GHCR:
docker pull ghcr.io/Hapag-Lloyd/rds-proxy-password-rotation:edge
:warning: The
edgetag is used for the latest build. You SHOULD use a specific version tag in production.
Architecture
Challenges with RDS and RDS Proxy
RDS Proxy is a fully managed, highly available database proxy for Amazon Relational Database Service (RDS) that makes applications more scalable, more resilient to database failures, and more secure. It allows applications to pool and share database connections to improve efficiency and reduce the load on your database instances.
However, RDS Proxy does not support multi-user password rotation out of the box. This script provides a solution to this problem.
Using an RDS Proxy requires a secret in AWS Secrets Manager with the credentials to connect to the database. This secret is used by the proxy to connect to the database. The proxy allows the application to connect to the database using the same credentials and then forwards the requests to the database with the same credentials. This means that the credentials in the secret must be valid in the database at all times. But what if you want to rotate the password for the user that the proxy uses to connect to the database? You can’t just update the secret in SecretsManager because the proxy will stop working as soon as the secret is updated. And you can’t just update the password in the database because the proxy will stop working as soon as the password is updated.
Why password rotation is a good practice
Password rotation is a good idea for several reasons:
- Enhanced Security: Regularly changing passwords reduces the risk of unauthorized access due to compromised credentials.
- Mitigates Risk: Limits the time window an attacker has to exploit a stolen password.
- Compliance: Many regulatory standards and security policies require periodic password changes.
- Reduces Impact of Breaches: If a password is compromised, rotating it ensures that the compromised password is no longer valid.
- Encourages Good Practices: Promotes the use of strong, unique passwords and discourages password reuse.
Release files for rds-proxy-password-rotation 0.6.540
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rds_proxy_password_rotation-0.6.540.tar.gz | 9.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rds_proxy_password_rotation-0.6.540-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.9 kB
Release files / rds_proxy_password_rotation-0.6.540.tar.gz
| Download URL | rds_proxy_password_rotation-0.6.540.tar.gz |
|---|---|
| Size | 9.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6ce4a51741e973b92ed0fcd4b1074656bc2c8ff49a92f414d3a5ba1de9153f7d
|
|
BLAKE2b-256 checksum How to use checksums |
ed604c23dbb753e205d2246c598d341b7c2d66f37bc21966a45ded70484b123d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logRelease files / rds_proxy_password_rotation-0.6.540-py3-none-any.whl
| Download URL | rds_proxy_password_rotation-0.6.540-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e2e331bcb0466902d111326983e2f6ca8b4faa28c186ca9fe52997a00c01c76a
|
|
BLAKE2b-256 checksum How to use checksums |
82518d2bc35f4bdabff47c8b672942778832874a651761e8f0d929426c588536
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency log