Accessing a PostgreSQL database securely is a foundational task for cloud-based data pipelines. Whether you’re building ETL jobs on AWS Glue or running advanced analytics in Databricks, managing database credentials properly — without hardcoding — is essential.
This blog compares two secure methods to connect to PostgreSQL:
- AWS Glue + AWS Secrets Manager
- Databricks + Secret Scopes with Access Control Lists (ACLs)
We’ll walk through connection steps, security controls, and how Databricks ACLs ensure your secrets stay safe.
✅ Scenario
You need to:
- Connect to a PostgreSQL database.
- Prevent hardcoding of credentials.
- Use a secure, auditable, and role-restricted method.
🔐 Option 1: AWS Glue + AWS Secrets Manager
🔸 Overview
AWS Secrets Manager stores secrets securely, such as:
- Username
- Password
- Host, Port, DB Name
It encrypts secrets using AWS KMS, supports automatic rotation, and integrates with IAM for fine-grained access control.
🔸 Example (PySpark in Glue)
import boto3, jsondef get_secret(secret_name): client = boto3.client('secretsmanager') response = client.get_secret_value(SecretId=secret_name) return json.loads(response['SecretString'])secret = get_secret("postgres-creds")jdbc_url = f"jdbc:postgresql://{secret['host']}:{secret['port']}/{secret['dbname']}"df = spark.read.format("jdbc")\ .option("url", jdbc_url)\ .option("user", secret["username"])\ .option("password", secret["password"])\ .option("driver", "org.postgresql.Driver")\ .option("dbtable", "public.my_table")\ .load()✅ Pros
- Central secret storage across all AWS services.
- IAM-enforced access control.
- Supports secret rotation and audit logging via CloudTrail.
💼 Option 2: Databricks + Secret Scopes + ACLs
Databricks Secret Scopes let you store credentials securely within a workspace. They are ideal for notebook and job-based environments.
🔸 Secret Scope Types
- Databricks-backed scopes (default)
- Azure Key Vault-backed scopes (for Azure Databricks)
🔒 What are Databricks ACLs?
Access Control Lists (ACLs) in Databricks control who can read or write secrets in a given scope.
You can:
- Allow specific users or groups to read secrets.
- Restrict write/delete privileges to admins only.
- Prevent accidental or malicious exposure of credentials.
🔹 ACL Example
To allow the analytics-team group to read from postgres-creds scope:
databricks secrets put-acl --scope postgres-creds --principal analytics-team --permission READPermissions available:
READ: User can read secretsWRITE: User can create, update, delete secretsMANAGE: Full access, including ACL changes
🔹 Enable ACLs on a scope
databricks secrets put-acl --scope postgres-creds --principal admins --permission MANAGENote: ACLs must be enabled at workspace level by admin.
🔸 Databricks PostgreSQL Connection Example
username = dbutils.secrets.get(scope="postgres-creds", key="username")password = dbutils.secrets.get(scope="postgres-creds", key="password")host = dbutils.secrets.get(scope="postgres-creds", key="host")dbname = dbutils.secrets.get(scope="postgres-creds", key="dbname")jdbc_url = f"jdbc:postgresql://{host}:5432/{dbname}"df = spark.read.format("jdbc") \ .option("url", jdbc_url) \ .option("user", username) \ .option("password", password) \ .option("driver", "org.postgresql.Driver") \ .option("dbtable", "public.my_table") \ .load()⚖️ Feature Comparison: AWS vs. Databricks
| Feature | AWS Glue + Secrets Manager | Databricks + Secret Scopes + ACLs |
|---|---|---|
| Secret storage | Centralized in Secrets Manager | Workspace-scoped or Azure Vault |
| IAM/ACL support | ✅ IAM roles + CloudTrail | ✅ ACL-based user/group control |
| Audit logs | ✅ CloudTrail | ✅ Workspace audit logs |
| Secret rotation | ✅ Built-in rotation | ❌ Manual (unless external vault) |
| Ease of use | Moderate (code-heavy) | Very easy (notebook-native) |
| Cross-service integration | ✅ Lambda, EC2, Glue, etc. | ✅ Notebooks, Jobs, Workflows |
| Fine-grained permissions | ✅ IAM policies | ✅ ACLs per secret scope |
🧠 Developer Experience
- AWS Glue requires managing IAM, boto3 code, and JSON parsing — powerful, but verbose.
- Databricks offers a simpler approach via
dbutils.secrets.get()and easy ACL configuration — ideal for fast development cycles.
🛡️ Best Practices for Secrets in Both
- Never hardcode credentials in notebooks or jobs.
- Use IAM/ACL policies with least privilege.
- Audit secret access periodically.
- Rotate credentials regularly.
- Add
?ssl=trueto PostgreSQL JDBC URLs for encrypted connections.
🧾 Conclusion
If you’re deciding between AWS Glue and Databricks for connecting to PostgreSQL:
| Use Case | Recommendation |
|---|---|
| Enterprise with AWS-native stack | Secrets Manager + Glue for central management |
| Notebook-driven workflows | Databricks + Secret Scopes with ACLs |
| Need auto-rotation of secrets | Prefer AWS Secrets Manager |
| Need rapid experimentation | Prefer Databricks Secret Scopes |
Regardless of platform, secure secrets handling is non-negotiable. Tools like Secrets Manager and Databricks ACLs ensure your pipelines are not only efficient but compliant and safe.
