Skip to content

Commit 274e468

Browse files
committed
Replace PostgreSQL password authentication with IAM authentication
1 parent 64c9e39 commit 274e468

File tree

2 files changed

+32
-44
lines changed
  • pet_clinic_billing_service/pet_clinic_billing_service
  • pet_clinic_insurance_service/pet_clinic_insurance_service

2 files changed

+32
-44
lines changed

pet_clinic_billing_service/pet_clinic_billing_service/settings.py

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -92,31 +92,22 @@
9292
},
9393
}
9494

95-
# Get secret name and region from environment or use defaults
96-
SECRET_NAME = os.environ.get('SECRET_NAME', 'petclinic-python-dbsecret')
9795
REGION = os.environ.get('REGION', 'us-east-1')
9896

99-
def get_secret_value(secret_name: str, region_name: str) -> str:
97+
def get_rds_auth_token():
10098
"""
101-
Retrieve a secret string from AWS Secrets Manager.
99+
Generate IAM authentication token for RDS PostgreSQL.
102100
"""
103-
client = boto3.client('secretsmanager', region_name=region_name)
104-
response = client.get_secret_value(SecretId=secret_name)
105-
return response['SecretString']
106-
107-
108-
env_db_password = os.environ.get('DB_USER_PASSWORD')
109-
110-
if env_db_password:
111-
DB_PASSWORD = env_db_password
112-
else:
113-
# Retrieve from Secrets Manager
114-
try:
115-
DB_PASSWORD = get_secret_value(SECRET_NAME, REGION)
116-
print(f"Retrieved secret '{SECRET_NAME}' from AWS Secrets Manager {DB_PASSWORD}")
117-
except Exception as e:
118-
# Print the error
119-
print(f"Error retrieving secret '{SECRET_NAME}' from AWS Secrets Manager: {e}", file=sys.stderr)
101+
rds_client = boto3.client('rds', region_name=REGION)
102+
hostname = os.environ.get("DB_SERVICE_HOST")
103+
username = os.environ.get("DB_USER")
104+
105+
auth_token = rds_client.generate_db_auth_token(
106+
DBHostname=hostname,
107+
Port=5432,
108+
DBUsername=username
109+
)
110+
return auth_token
120111

121112

122113
# Database
@@ -131,9 +122,12 @@ def get_secret_value(secret_name: str, region_name: str) -> str:
131122
"ENGINE": "django.db.backends.postgresql",
132123
"NAME": os.environ.get('DB_NAME'),
133124
"USER": os.environ.get('DB_USER'),
134-
"PASSWORD": DB_PASSWORD,
125+
"PASSWORD": get_rds_auth_token(),
135126
"HOST": os.environ.get("DB_SERVICE_HOST"),
136127
"PORT": os.environ.get("DB_SERVICE_PORT"),
128+
"OPTIONS": {
129+
"sslmode": "require",
130+
}
137131
}
138132
}
139133

pet_clinic_insurance_service/pet_clinic_insurance_service/settings.py

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -75,31 +75,22 @@
7575
WSGI_APPLICATION = "pet_clinic_insurance_service.wsgi.application"
7676

7777

78-
# Get secret name and region from environment or use defaults
79-
SECRET_NAME = os.environ.get('SECRET_NAME', 'petclinic-python-dbsecret')
8078
REGION = os.environ.get('REGION', 'us-east-1')
8179

82-
def get_secret_value(secret_name: str, region_name: str) -> str:
80+
def get_rds_auth_token():
8381
"""
84-
Retrieve a secret string from AWS Secrets Manager.
82+
Generate IAM authentication token for RDS PostgreSQL.
8583
"""
86-
client = boto3.client('secretsmanager', region_name=region_name)
87-
response = client.get_secret_value(SecretId=secret_name)
88-
return response['SecretString']
89-
90-
91-
env_db_password = os.environ.get('DB_USER_PASSWORD')
92-
93-
if env_db_password:
94-
DB_PASSWORD = env_db_password
95-
else:
96-
# Retrieve from Secrets Manager
97-
try:
98-
DB_PASSWORD = get_secret_value(SECRET_NAME, REGION)
99-
print(f"Retrieved secret '{SECRET_NAME}' from AWS Secrets Manager {DB_PASSWORD}")
100-
except Exception as e:
101-
# Print the error
102-
print(f"Error retrieving secret '{SECRET_NAME}' from AWS Secrets Manager: {e}", file=sys.stderr)
84+
rds_client = boto3.client('rds', region_name=REGION)
85+
hostname = os.environ.get("DB_SERVICE_HOST")
86+
username = os.environ.get("DB_USER")
87+
88+
auth_token = rds_client.generate_db_auth_token(
89+
DBHostname=hostname,
90+
Port=5432,
91+
DBUsername=username
92+
)
93+
return auth_token
10394

10495

10596
# Database
@@ -114,9 +105,12 @@ def get_secret_value(secret_name: str, region_name: str) -> str:
114105
"ENGINE": "django.db.backends.postgresql",
115106
"NAME": os.environ.get('DB_NAME'),
116107
"USER": os.environ.get('DB_USER'),
117-
"PASSWORD": DB_PASSWORD,
108+
"PASSWORD": get_rds_auth_token(),
118109
"HOST": os.environ.get("DB_SERVICE_HOST"),
119110
"PORT": os.environ.get("DB_SERVICE_PORT"),
111+
"OPTIONS": {
112+
"sslmode": "require",
113+
}
120114
}
121115
}
122116

0 commit comments

Comments
 (0)