🌟 Mastering Secure API Requests in Databricks with HMAC and Secrets 🚀🛡️

Dhruv Singhal
2 min readNov 28, 2023

--

Sending data securely over the internet is crucial, especially when dealing with sensitive information. In this tutorial, we’ll explore a powerful technique called HMAC (Hash-based Message Authentication Code) to ensure the integrity and authenticity of our API requests. We’ll also leverage Databricks Secrets to securely store our API keys.

Prerequisites:

  • Databricks account
  • Access to a RESTful API
  • Basic understanding of Python

Step 1: Set Up Secrets in Databricks

Navigate to the Secrets Tab:

  • Open your Databricks workspace.
  • Go to the “Workspace” tab.
  • Click on “Secrets” in the left sidebar.

Create a Secret:

  • Click on “Create” to add a new secret.
  • Enter a name (e.g., api_key) and input your API key as the secret's value.
  • Save the secret.

Step 2: Create a Databricks Notebook

  1. Create a New Notebook:
  • Go to the “Workspace” tab.
  • Click on “Create” and choose “Notebook.”

2. Write Python Code:

  • In your notebook, write Python code to load the API key securely.
# Load the API key from the secret 
api_key = dbutils.secrets.get(scope="<secret-scope>", key="api_key")

Replace <secret-scope> with the name of your secret scope.

Step 3: Install Required Libraries

# Install the 'requests' library for making HTTP requests
dbutils.library.installPyPI("requests")

Step 4: Send a Secure API Request using HMAC

To authenticate our API request using HMAC, we’ll employ the hmac library in Python. The HMAC algorithm takes a secret key and a message as input and produces a fixed-size hash value as output.

import requests
import hmac
import hashlib

# API Endpoint
url = "https://api.example.com/endpoint"

# Example Payload
payload = {"param1": "value1", "param2": "value2"}

# Create an HMAC object with the secret key
h = hmac.new(bytes(api_key, 'utf-8'), msg=bytes(str(payload), 'utf-8'), digestmod=hashlib.sha256)

# Include the HMAC signature in the request headers
headers = {"Authorization": f"HMAC {h.hexdigest()}"}

# Send the API request
response = requests.post(url, json=payload, headers=headers)

# Print the API response
print(response.json())

Replace the url with your actual API endpoint and update the payload accordingly.

hmac library and its parameters:

Key (bytes or bytearray):

  • The secret key is used for the HMAC calculation. It should be kept private.
  • In our case, this is often the API key retrieved from Databricks Secrets.

msg (bytes):

  • The message input to the HMAC algorithm. It can be your entire HTTP request or a part of it.
  • In our example, this could be the concatenated string of the HTTP method, endpoint, and any request payload.

digestmod (hash function):

  • The hash function used by HMAC to produce the hash value. Common choices include hashlib.sha256() or hashlib.md5().
  • It’s crucial to match the hash function with what the server expects.

Returns:

  • The resulting HMAC hash value is often represented as a hexadecimal string.

Conclusion:

By following this tutorial, you’ve learned how to securely send API requests in Databricks using HMAC for message authentication and storing sensitive information in Databricks Secrets.

🚀 Happy coding and secure API interactions! 🛡️

--

--

Dhruv Singhal
Dhruv Singhal

Written by Dhruv Singhal

Data engineer with expertise in PySpark, SQL, Flask. Skilled in Databricks, Snowflake, and Datafactory. Published articles. Passionate about tech and games.

No responses yet