ODP Password Obfuscation Guide

This document provides step-by-step instructions for implementing password obfuscation in ODP stack components, starting with release 3.3.6.2-1.

Using OBF Password Obfuscation

OBF password obfuscation converts plaintext passwords into an obfuscated format to prevent casual exposure in configuration files. This method is supported for components that explicitly state OBF format compatibility.

Locate Jetty Utilities

Run the following commands to locate the required Jetty utility JAR file:

Bash
Copy

Example output:

Bash
Copy

Generate an OBF Password

Use the Jetty Password utility to generate an obfuscated password:

Bash
Copy

Example:

Bash
Copy

Example output:

Bash
Copy

Update configuration files

  • Add the generated OBF value to the ssl.*.password properties.
  • Replace all plaintext passwords with the OBF string OBF:1dhw1i9a1inm1nse1x8e1x8g1nps1iks1i6o1dgq in the required configuration files.
  • Apply these steps to all components that explicitly support the OBF format.

Securing passwords in Ambari

In ODP-Ambari, database passwords and SSL truststore passwords stored in ambari.properties can be secured using the Ambari Server utility and OBF password obfuscation.

Bash
Copy

Verify that passwords are referenced by alias in ambari.properties:

Bash
Copy

Obfuscate SSL Password in https.pass.txt

The SSL password stored in /var/lib/ambari-server/keys/https.pass.txt can be updated in OBF format using Jetty utilities:

Bash
Copy

Confirm that the password is updated:

Bash
Copy

ZooKeeper

OBF password obfuscation is supported for SSL-related properties.

Generate an OBF Password

Use Jetty utilities to generate an obfuscated password:

Bash
Copy

Example:

Bash
Copy

Expected output:

Bash
Copy

Use the OBF value (for example, OBF:1dhw1i9a1inm1nse1x8e1x8g1nps1iks1i6o1dgq) in configuration.

Configure OBF Passwords in Ambari UI

Update the following ZooKeeper SSL properties in Ambari UI:

Bash
Copy

An example is shown below in the screenshot.

Verify Configuration

After restarting ZooKeeper, verify that the updated properties are applied:

Bash
Copy

Hadoop

OBF password obfuscation is supported for SSL-related properties.

Configuration File References

The following configuration files show SSL passwords stored in OBF format:

Bash
Copy

Tez

No passwords are exposed in the configuration. Password obfuscation is not applicable.

HBase

OBF format password obfuscation is supported and can be enabled. Add the OBF passwords to hbase-site.xml:

Bash
Copy

Flink supports password obfuscation in OBF format. You can configure it either from the Ambari UI or directly in the backend configuration files.

Configure from Ambari UI

  1. Go to Flink > Configs > Advanced flink-conf.
  2. Add the OBF passwords:
Bash
Copy
  1. Restart the Flink service.

Verify in Backend Configuration Files

In /etc/flink/conf/config.yaml

Bash
Copy

In /etc/flink/conf/history-server.conf/config.yaml

Bash
Copy

Post-Configuration Validation

  • Flink and History Server should start without errors.
  • HS WebUI should be accessible over HTTPS.
  • Backend config files will display passwords in OBF format, confirming obfuscation.

Knox

No passwords are exposed.

NiFi and NiFi Registry

Passwords are stored in encrypted format rather than plain text.

Example: nifi.properties

Bash
Copy

Key Points

  • Protected attributes (.protected) indicate that the corresponding password value is encrypted.
  • No plaintext credentials are stored in configuration files.

Schema Registry

  • Database master password is stored in an environment variable.
  • SSL key and truststore passwords are stored in OBF format in configuration files.

Example: registry.yaml

Bash
Copy

Sqoop

  • Not applicable (NA) — no password obfuscation mechanism required.

HttpFS

No passwords are exposed.

Infra Solr

  • Supports password obfuscation using OBF format.
  • Passwords are also stored locally as hashed values after configuration.

Generate an OBF Password

Run the following command:

Bash
Copy

*Output includes: *

  • Plaintext password (for confirmation)
  • OBF:<<hash generated>> — obfuscated password
  • MD5:<<md5 hash>> — hash representation

Update Infra Solr Configuration

Use the generated OBF password for both trust store and key store passwords.

Example (/etc/ambari-infra-solr/conf/infra-solr-env.sh):

Bash
Copy

Final Steps

  1. Save the updated configuration.
  2. Restart the Infra Solr service.
  3. Verify that passwords are stored locally in hashed format.

Isilon

No passwords are exposed.

Zeppelin

  • Supports password obfuscation using OBF format for SSL configuration.
  • Interpreter credentials can be securely stored through Zeppelin’s Credential UI.

Generate an OBF Password

Run the following command:

Bash
Copy

Output includes:

  • Plaintext password (for confirmation)
  • OBF:<<hash generated>> — obfuscated password
  • MD5:<<md5 hash>> — hash representation

Add Properties in Ambari

Update the following passwords in Ambari with the generated OBF value:

  • Key manager password
  • Keystore password
  • Truststore password

Example (zeppelin-site.xml):

Bash
Copy

In Ambari, passwords configured in OBF format show a check mark confirming obfuscation.

Secure Interpreter Credentials

Refer to Apache Zeppelin 0.7.3 Documentation: Data Source Authorization for guidance on securing interpreter passwords.

  • Visit https://<zeppelin host>:9995/#/credential
  • Add credentials — the Entity field acts similarly to an alias in JCEKS
  • Use the stored credentials directly in interpreter settings

Livy

No passwords are exposed.

Spark 3

No passwords are exposed.

Airflow

  • No passwords are exposed.
  • Password handling is managed by security_credential_helper.py for database connections.
  • No SSL passwords are exposed.

JupyterHub

  • No passwords are exposed.
  • Password handling is managed by security_credential_ helper.py for database connections.
  • No SSL passwords are exposed.

Pinot

Sensitive Pinot Controller configuration passwords (including Basic Auth and SSL keystore/truststore passwords) are now encrypted using the Hadoop JCEKS credential store. Passwords are no longer stored in plaintext in configuration files or static environment files. They are securely managed and injected at runtime.

*Key features: *

  • Passwords are stored encrypted in a Hadoop JCEKS file.
  • A wrapper script extracts the secrets at startup using Ambari’s GenericStorePasswordExtractor.
  • Secrets are injected as environment variables and referenced in Pinot configuration through dynamic environment settings.
  • No plaintext secrets appear in configuration or static environment files.

Steps

  1. Create and store passwords in JCEKS: Use the Hadoop credential command to store each password securely in the Hadoop JCEKS credential store.
Bash
Copy
  1. Configure Pinot for dynamic environment variables: In pinot-controller.conf, reference passwords using environment variable placeholders instead of hardcoding them.
Bash
Copy
  1. Wrapper script for secret extraction: Create /usr/odp/3.3.6.2-1/pinot/start-pinot-controller.sh to automatically fetch secrets from the JCEKS store and inject them as environment variables before starting Pinot.
Bash
Copy
  1. Update systemd service
Bash
Copy

Benefits

  • No plaintext passwords in config or environment files.
  • Centralized and secure password management using Hadoop JCEKS.
  • Easy password rotation without changing Pinot configs.
  • Compliant with security best practices for production systems.

References

In summary: Passwords are encrypted in a JCEKS file, extracted securely at runtime, and injected into Pinot Controller using dynamic environment variables—ensuring no plaintext secrets are ever present on disk or in process listings.

Hue

  • No passwords are exposed.
  • Password handling is managed by security_credential_ helper.py.

Kudu

  • Passwords have never been exposed.
  • A new option simplifies SSL support:
    • If you set SSL Certificate Password without specifying a custom password retrieval script, Kudu now uses security_credential_helper.py to save and retrieve the password automatically.
    • You can still override this behavior by setting specific options in the master and tablet server configurations.

Druid

No passwords are exposed.

Hive

No passwords are exposed.

Ranger

No passwords are exposed.

Cruise Control 2/3

  • SSL-related passwords that were previously exposed are now securely managed by Ambari automation using JCEKS.
  • No additional user action is required.

Kafka 2/3

  • SSL-related passwords that were previously exposed are now securely managed by Ambari automation using JCEKS.
  • No additional user action is required.

Kafka 2 Connect

  • SSL-related passwords that were previously exposed are now securely managed by Ambari automation using JCEKS.
  • No additional user action is required.

Kafka 3 Connect

  • SSL-related passwords that were previously exposed are now securely managed by Ambari automation using JCEKS.
  • No additional user action is required.

Kafka 2 Mirror Maker

  • All configurations must be provided under Advanced kafka-mirrormaker2 in Ambari.
  • Any property ending with .password must reference an environment variable rather than storing the value directly.

Example Configuration (Advanced kafka-mirrormaker2)

Bash
Copy

Adding Actual Passwords (Custom kafka-mirrormaker2)

  • Provide the real password values in Custom kafka-mirrormaker2 using secure variables.
  • This ensures that no plaintext passwords are exposed in Ambari configuration files.

Kafka 3 Mirror Maker

  • All configurations must be provided under Advanced kafka3-mirrormaker2 in Ambari.
  • Any property ending with .password must reference an environment variable instead of storing the password directly.

Example Configuration (Advanced kafka3-mirrormaker2)

Bash
Copy

Adding Actual Passwords (Custom kafka3-mirrormaker2)

  • Provide the real password values in Custom kafka3-mirrormaker2 using secure variables.
  • This approach prevents plaintext passwords from appearing in Ambari configuration files.

Impala

LDAP passwords are obfuscated using security_credential_helper.py.

Ozone

No passwords are exposed.

Oozie

  • Previously, SSL passwords were displayed in the Ambari UI, even though they were encrypted in the configuration file system under oozie-site.jceks.
  • These SSL passwords in the UI are now obfuscated.
Type to search, ESC to discard
Type to search, ESC to discard
Type to search, ESC to discard
  Last updated