Skip to main content

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

  1. Python 3.10 or later

  2. For each db user:

    1. Clone the user in the database and grant the necessary permissions. We suggest to add a -clone suffix to the username.

    2. 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, username is 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 database
      • database_port: The port of the database
      • database_name: The name of the database
      • username: The username for the user
      • password: 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.

  3. If you are using RDS Proxy:

    1. 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 database
      • password: The password for the user that the proxy will use to connect to the database
    2. Attach the secret to the RDS Proxy.
  4. The docker image can be pulled from GHCR:

    docker pull ghcr.io/Hapag-Lloyd/rds-proxy-password-rotation:edge
    

    :warning: The edge tag is used for the latest build. You SHOULD use a specific version tag in production.

Architecture

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:

  1. Enhanced Security: Regularly changing passwords reduces the risk of unauthorized access due to compromised credentials.
  2. Mitigates Risk: Limits the time window an attacker has to exploit a stolen password.
  3. Compliance: Many regulatory standards and security policies require periodic password changes.
  4. Reduces Impact of Breaches: If a password is compromised, rotating it ensures that the compromised password is no longer valid.
  5. Encourages Good Practices: Promotes the use of strong, unique passwords and discourages password reuse.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rds_proxy_password_rotation-0.6.515.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rds_proxy_password_rotation-0.6.515-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file rds_proxy_password_rotation-0.6.515.tar.gz.

File metadata

File hashes

Hashes for rds_proxy_password_rotation-0.6.515.tar.gz
Algorithm Hash digest
SHA256 1d14aa0491ceebecea8ea294db79f096b28d3e2d64eed49e6d5c1ced37ed6fac
MD5 4c8ec49d8dec59591c9c2b389454a32b
BLAKE2b-256 b88c59a85545e8a02bd5a0f5cce02a86cb46cc28ce8d1d0f9bfbcb7cfaba5b34

See more details on using hashes here.

Provenance

The following attestation bundles were made for rds_proxy_password_rotation-0.6.515.tar.gz:

Publisher: pypi_publish.yml on Hapag-Lloyd/rds-proxy-password-rotation

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rds_proxy_password_rotation-0.6.515-py3-none-any.whl.

File metadata

File hashes

Hashes for rds_proxy_password_rotation-0.6.515-py3-none-any.whl
Algorithm Hash digest
SHA256 4d84db6e910073bc4c4df4259fe8d9399b3c53150534b9ef44f34d0a7682cdf1
MD5 5d05d6618e19b58c424f3dbbfd730940
BLAKE2b-256 c0fc821c9af6177f39da3f8348518bce65bfdddc5c5ce3c1cf6b65634efdefd5

See more details on using hashes here.

Provenance

The following attestation bundles were made for rds_proxy_password_rotation-0.6.515-py3-none-any.whl:

Publisher: pypi_publish.yml on Hapag-Lloyd/rds-proxy-password-rotation

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.6.529

2 files

0.6.528

2 files

0.6.527

2 files

0.6.526

2 files

0.6.525

2 files

0.6.524

2 files

0.6.523

2 files

0.6.522

2 files

0.6.521

2 files

0.6.520

2 files

0.6.519

2 files

0.6.518

2 files

0.6.517

2 files

0.6.516

2 files

This release

0.6.515 This release

2 files

0.6.514

2 files

0.6.513

2 files

0.6.512

2 files

0.6.511

2 files

0.6.510

2 files

0.6.509

2 files

0.6.508

2 files

0.6.507

2 files

0.6.506

2 files

0.6.505

2 files

0.6.504

2 files

0.6.503

2 files

0.6.501

2 files

0.6.500

2 files

0.6.499

2 files

0.6.498

2 files

0.6.497

2 files

0.6.496

2 files

0.6.495

2 files

0.6.494

2 files

0.6.493

2 files

0.6.492

2 files

0.6.491

2 files

0.6.490

2 files

0.6.489

2 files

0.6.488

2 files

0.6.487

2 files

0.6.486

2 files

0.6.485

2 files

0.6.484

2 files

0.6.483

2 files

0.6.482

2 files

0.6.481

2 files

0.6.480

2 files

0.6.479

2 files

0.6.478

2 files

0.6.477

2 files

0.6.476

2 files

0.6.475

2 files

0.6.474

2 files

0.6.473

2 files

0.6.472

2 files

0.6.471

2 files

0.6.470

2 files

0.6.469

2 files

0.6.468

2 files

0.6.467

2 files

0.6.466

2 files

0.6.465

2 files

0.6.464

2 files

0.6.463

2 files

0.6.462

2 files

0.6.461

2 files

0.6.460

2 files

0.6.459

2 files

0.6.458

2 files

0.6.457

2 files

0.6.456

2 files

0.6.455

2 files

0.6.454

2 files

0.6.453

2 files

0.6.452

2 files

0.6.451

2 files

0.6.450

2 files

0.6.449

2 files

0.6.448

2 files

0.6.447

2 files

0.6.446

2 files

0.6.445

2 files

0.6.444

2 files

0.6.443

2 files

0.6.442

2 files

0.6.441

2 files

0.6.440

2 files

0.6.439

2 files

0.6.438

2 files

0.6.437

2 files

0.6.435

2 files

0.6.434

2 files

0.6.433

2 files

0.6.432

2 files

0.6.431

2 files

0.6.430

2 files

0.6.429

2 files

0.6.428

2 files

0.6.427

2 files

0.6.426

2 files

0.6.425

2 files

0.6.424

2 files

0.6.423

2 files

0.6.422

2 files

0.6.421

2 files

0.6.420

2 files

0.6.419

2 files

0.6.418

2 files

0.6.417

2 files

0.6.416

2 files

0.6.415

2 files

0.6.414

2 files

0.6.413

2 files

0.6.412

2 files

0.6.411

2 files

0.6.410

2 files

0.6.409

2 files

0.6.408

2 files

0.6.407

2 files

0.6.406

2 files

0.6.405

2 files

0.6.404

2 files

0.6.403

2 files

0.6.402

2 files

0.6.401

2 files

0.6.400

2 files

0.6.399

2 files

0.6.398

2 files

0.6.397

2 files

0.6.396

2 files

0.6.395

2 files

0.6.394

2 files

0.6.393

2 files

0.6.392

2 files

0.6.391

2 files

0.6.390

2 files

0.6.389

2 files

0.6.388

2 files

0.6.387

2 files

0.6.386

2 files

0.6.385

2 files

0.6.384

2 files

0.6.383

2 files

0.6.382

2 files

0.6.381

2 files

0.6.380

2 files

0.6.379

2 files

0.6.378

2 files

0.6.377

2 files

0.6.376

2 files

0.6.375

2 files

0.6.374

2 files

0.6.373

2 files

0.6.372

2 files

0.6.371

2 files

0.6.370

2 files

0.6.369

2 files

0.6.368

2 files

0.6.367

2 files

0.6.366

2 files

0.6.365

2 files

0.6.364

2 files

0.6.363

2 files

0.6.362

2 files

0.6.361

2 files

0.6.360

2 files

0.6.359

2 files

0.6.358

2 files

0.6.357

2 files

0.6.356

2 files

0.6.355

2 files

0.6.354

2 files

0.6.353

2 files

0.6.352

2 files

0.6.351

2 files

0.6.350

2 files

0.6.349

2 files

0.6.348

2 files

0.6.347

2 files

0.6.346

2 files

0.6.345

2 files

0.6.344

2 files

0.6.343

2 files

0.6.342

2 files

0.6.341

2 files

0.6.340

2 files

0.6.339

2 files

0.6.338

2 files

0.6.337

2 files

0.6.336

2 files

0.6.335

2 files

0.6.334

2 files

0.6.333

2 files

0.6.332

2 files

0.6.331

2 files

0.6.330

2 files

0.6.329

2 files

0.6.328

2 files

0.6.327

2 files

0.6.326

2 files

0.6.325

2 files

0.6.324

2 files

0.6.323

2 files

0.6.322

2 files

0.6.321

2 files

0.6.320

2 files

0.6.319

2 files

0.6.318

2 files

0.6.317

2 files

0.6.316

2 files

0.6.315

2 files

0.6.314

2 files

0.6.313

2 files

0.6.312

2 files

0.6.311

2 files

0.6.310

2 files

0.6.309

2 files

0.6.308

2 files

0.6.307

2 files

0.6.306

2 files

0.6.305

2 files

0.6.304

2 files

0.6.303

2 files

0.6.302

2 files

0.6.301

2 files

0.6.300

2 files

0.6.299

2 files

0.6.298

2 files

0.6.297

2 files

0.6.296

2 files

0.6.295

2 files

0.6.294

2 files

0.6.293

2 files

0.6.292

2 files

0.6.291

2 files

0.6.290

2 files

0.6.289

2 files

0.6.288

2 files

0.6.287

2 files

0.6.286

2 files

0.6.285

2 files

0.6.284

2 files

0.6.283

2 files

0.6.282

2 files

0.6.281

2 files

0.6.280

2 files

0.6.279

2 files

0.6.278

2 files

0.6.277

2 files

0.6.276

2 files

0.6.275

2 files

0.6.274

2 files

0.6.273

2 files

0.6.272

2 files

0.6.271

2 files

0.6.270

2 files

0.6.269

2 files

0.6.268

2 files

0.6.267

2 files

0.6.266

2 files

0.6.265

2 files

0.6.264

2 files

0.6.263

2 files

0.6.262

2 files

0.6.261

2 files

0.6.260

2 files

0.6.259

2 files

0.6.258

2 files

0.6.257

2 files

0.6.256

2 files

0.6.255

2 files

0.6.254

2 files

0.6.253

2 files

0.6.252

2 files

0.6.251

2 files

0.6.250

2 files

0.6.249

2 files

0.6.248

2 files

0.6.247

2 files

0.6.246

2 files

0.6.245

2 files

0.6.244

2 files

0.6.243

2 files

0.6.242

2 files

0.6.241

2 files

0.6.240

2 files

0.6.239

2 files

0.6.238

2 files

0.6.237

2 files

0.6.236

2 files

0.6.235

2 files

0.6.234

2 files

0.6.233

2 files

0.6.232

2 files

0.6.231

2 files

0.6.230

2 files

0.6.229

2 files

0.6.228

2 files

0.6.227

2 files

0.6.226

2 files

0.6.225

2 files

0.6.224

2 files

0.6.223

2 files

0.6.222

2 files

0.6.221

2 files

0.6.220

2 files

0.6.219

2 files

0.6.218

2 files

0.6.217

2 files

0.6.216

2 files

0.6.215

2 files

0.6.214

2 files

0.6.213

2 files

0.6.212

2 files

0.6.211

2 files

0.6.210

2 files

0.6.209

2 files

0.6.208

2 files

0.6.207

2 files

0.6.206

2 files

0.6.205

2 files

0.6.204

2 files

0.6.203

2 files

0.6.202

2 files

0.6.201

2 files

0.6.200

2 files

0.6.199

2 files

0.6.198

2 files

0.6.197

2 files

0.6.196

2 files

0.6.195

2 files

0.6.194

2 files

0.6.193

2 files

0.6.192

2 files

0.6.191

2 files

0.6.190

2 files

0.6.189

2 files

0.6.188

2 files

0.6.187

2 files

0.6.186

2 files

0.6.185

2 files

0.6.184

2 files

0.6.183

2 files

0.6.182

2 files

0.6.181

2 files

0.6.180

2 files

0.6.179

2 files

0.6.178

2 files

0.6.177

2 files

0.6.176

2 files

0.6.175

2 files

0.6.174

2 files

0.6.173

2 files

0.6.172

2 files

0.6.171

2 files

0.6.170

2 files

0.6.169

2 files

0.6.168

2 files

0.6.167

2 files

0.6.166

2 files

0.6.165

2 files

0.6.164

2 files

0.6.163

2 files

0.6.162

2 files

0.6.161

2 files

0.6.160

2 files

0.6.159

2 files

0.6.158

2 files

0.6.157

2 files

0.6.156

2 files

0.6.155

2 files

0.6.154

2 files

0.6.153

2 files

0.6.152

2 files

0.6.151

2 files

0.6.150

2 files

0.6.149

2 files

0.6.148

2 files

0.6.147

2 files

0.6.146

2 files

0.6.145

2 files

0.6.144

2 files

0.6.143

2 files

0.6.142

2 files

0.6.141

2 files

0.6.140

2 files

0.6.139

2 files

0.6.138

2 files

0.6.137

2 files

0.6.136

2 files

0.6.135

2 files

0.6.134

2 files

0.6.133

2 files

0.6.132

2 files

0.6.131

2 files

0.6.130

2 files

0.6.129

2 files

0.6.128

2 files

0.6.127

2 files

0.6.126

2 files

0.6.125

2 files

0.6.124

2 files

0.6.123

2 files

0.6.122

2 files

0.6.121

2 files

0.6.120

2 files

0.6.119

2 files

0.6.118

2 files

0.6.117

2 files

0.6.116

2 files

0.6.115

2 files

0.6.114

2 files

0.6.113

2 files

0.6.112

2 files

0.6.111

2 files

0.6.110

2 files

0.6.109

2 files

0.6.108

2 files

0.6.107

2 files

0.6.106

2 files

0.6.105

2 files

0.6.104

2 files

0.6.103

2 files

0.6.102

2 files

0.6.101

2 files

0.6.100

2 files

0.6.99

2 files

0.6.98

2 files

0.6.97

2 files

0.6.96

2 files

0.6.95

2 files

0.6.94

2 files

0.6.93

2 files

0.6.92

2 files

0.6.91

2 files

0.6.90

2 files

0.6.89

2 files

0.6.88

2 files

0.6.87

2 files

0.6.86

2 files

0.6.85

2 files

0.6.84

2 files

0.6.83

2 files

0.6.82

2 files

0.6.81

2 files

0.6.80

2 files

0.6.79

2 files

0.6.78

2 files

0.6.77

2 files

0.6.76

2 files

0.6.75

2 files

0.6.74

2 files

0.6.73

2 files

0.6.72

2 files

0.6.71

2 files

0.6.70

2 files

0.6.69

2 files

0.6.68

2 files

0.6.67

2 files

0.6.66

2 files

0.6.65

2 files

0.6.64

2 files

0.6.63

2 files

0.6.62

2 files

0.6.61

2 files

0.6.60

2 files

0.6.59

2 files

0.6.58

2 files

0.6.57

2 files

0.6.56

2 files

0.6.55

2 files

0.6.54

2 files

0.6.53

2 files

0.6.52

2 files

0.6.51

2 files

0.6.50

2 files

0.6.49

2 files

0.6.48

2 files

0.6.47

2 files

0.6.46

2 files

0.6.45

2 files

0.6.44

2 files

0.6.43

2 files

0.6.42

2 files

0.6.41

2 files

0.6.40

2 files

0.6.39

2 files

0.6.38

2 files

0.6.37

2 files

0.6.36

2 files

0.6.35

2 files

0.6.34

2 files

0.6.33

2 files

0.6.32

2 files

0.6.31

2 files

0.6.30

2 files

0.6.29

2 files

0.6.28

2 files

0.6.27

2 files

0.6.26

2 files

0.6.25

2 files

0.6.24

2 files

0.6.23

2 files

0.6.21

2 files

0.6.20

2 files

0.6.19

2 files

0.6.18

2 files

0.6.17

2 files

0.6.16

2 files

0.6.15

2 files

0.6.14

2 files

0.6.13

2 files

0.6.12

2 files

0.6.11

2 files

0.6.10

2 files

0.6.9

2 files

0.6.8

2 files

0.6.7

2 files

0.6.6

2 files

0.6.5

2 files

0.6.4

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.17

2 files

0.5.16

2 files

0.5.15

2 files

0.5.14

2 files

0.5.13

2 files

0.5.12

2 files

0.5.11

2 files

0.5.10

2 files

0.5.9

2 files

0.5.8

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page