📖 Scenario: You are setting up Apache Airflow to securely manage sensitive information like database passwords and API keys. Instead of hardcoding secrets in your DAGs, you will use Airflow's built-in secrets backend to fetch secrets at runtime.
🎯 Goal: Build a simple Airflow DAG that retrieves a secret value from Airflow's Variable store using the secrets backend and prints it. This will demonstrate how to manage secrets securely in Airflow.
📋 What You'll Learn
Create a dictionary to simulate Airflow Variables with secret values
Add a configuration variable to specify the secret key to fetch
Write a function to retrieve the secret from the dictionary using the key
Print the retrieved secret value
💡 Why This Matters
🌍 Real World
In real Airflow setups, secrets like passwords and API keys are stored securely and accessed at runtime to avoid exposing sensitive data in code.
💼 Career
Understanding secrets management is crucial for DevOps roles to maintain security and compliance when deploying workflows and applications.
Progress0 / 4 steps
1
Create a dictionary to simulate Airflow Variables
Create a dictionary called airflow_variables with these exact entries: 'db_password': 'SuperSecret123', 'api_key': 'XYZ-987654'
Apache Airflow
Hint
Use curly braces {} to create a dictionary with the exact keys and values.
2
Add a configuration variable for the secret key
Create a variable called secret_key and set it to the string 'db_password'
Apache Airflow
Hint
Assign the string 'db_password' to the variable secret_key.
3
Write a function to retrieve the secret
Define a function called get_secret that takes a parameter key and returns the value from airflow_variables for that key
Apache Airflow
Hint
Use def to define the function and return the dictionary value for the given key.
4
Print the retrieved secret value
Write a print statement that calls get_secret(secret_key) and prints the result
Apache Airflow
Hint
Use print(get_secret(secret_key)) to display the secret.
Practice
(1/5)
1. What is the main purpose of secrets management in Apache Airflow?
easy
A. To keep sensitive information like passwords out of the code
B. To speed up DAG execution
C. To store large datasets
D. To monitor task progress visually
Solution
Step 1: Understand what secrets management means
Secrets management is about protecting sensitive data such as passwords or API keys from being exposed in code.
Step 2: Identify the main goal in Airflow context
Airflow uses secrets management to keep such sensitive info safe and separate from DAG code.
Final Answer:
To keep sensitive information like passwords out of the code -> Option A
Quick Check:
Secrets management = protect sensitive info [OK]
Hint: Secrets management means hiding passwords from code [OK]
Common Mistakes:
Confusing secrets management with data storage
Thinking it speeds up DAGs
Assuming it monitors tasks
2. Which of the following is the correct way to retrieve a secret stored as an Airflow Variable in a DAG?
easy
A. get_variable('my_secret')
B. Variable.get('my_secret')
C. Variable.fetch('my_secret')
D. fetch_variable('my_secret')
Solution
Step 1: Recall Airflow's Variable API
Airflow provides a Variable class with a get() method to access stored variables or secrets.
Step 2: Match the correct syntax
The correct method call is Variable.get('variable_name'), so Variable.get('my_secret') is correct.
Final Answer:
Variable.get('my_secret') -> Option B
Quick Check:
Use Variable.get() to access secrets [OK]
Hint: Use Variable.get() to fetch secrets in Airflow [OK]
Common Mistakes:
Using non-existent methods like fetch or get_variable
Confusing function names
Missing the Variable class prefix
3. Given this Airflow DAG snippet, what will be the output if the secret 'db_password' is stored as 'mypassword123' in Airflow Variables?
from airflow.models import Variable
password = Variable.get('db_password')
print(password)
medium
A. Error: Variable not found
B. db_password
C. Variable.get('db_password')
D. mypassword123
Solution
Step 1: Understand Variable.get() behavior
Variable.get('db_password') fetches the value stored under 'db_password' key, which is 'mypassword123'.
Step 2: Predict the print output
Printing the variable will output the string 'mypassword123'.
Final Answer:
mypassword123 -> Option D
Quick Check:
Variable.get() returns stored secret value [OK]
Hint: Variable.get() returns the secret's stored value [OK]
Common Mistakes:
Thinking it prints the key name
Expecting the method call as output
Assuming an error without checking storage
4. You wrote this code in your Airflow DAG to get a secret:
from airflow.models import Variable
api_key = Variable.get('api_key')
But you get an error: "KeyError: 'api_key' not found". What is the best way to fix this?
medium
A. Add a default value like Variable.get('api_key', default_var='default')
B. Change Variable.get to Variable.fetch
C. Remove the import statement
D. Rename 'api_key' to 'API_KEY'
Solution
Step 1: Understand the error cause
The error means 'api_key' variable does not exist in Airflow Variables, so Variable.get() fails.
Step 2: Use default_var to avoid error
Adding default_var='default' returns 'default' if the variable is missing, preventing the error.
Final Answer:
Add a default value like Variable.get('api_key', default_var='default') -> Option A
Quick Check:
Use default_var to handle missing secrets safely [OK]
Hint: Use default_var to avoid missing variable errors [OK]
Common Mistakes:
Using non-existent Variable.fetch method
Removing imports breaks code
Changing variable name without updating storage
5. You want to securely store and access AWS credentials in Airflow using AWS Secrets Manager. Which approach correctly integrates this with Airflow's secrets backend?
hard
A. Hardcode AWS credentials in DAG files for faster access
B. Store credentials in Airflow Variables and access with Variable.get() only
C. Configure airflow.cfg with [secrets] backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
D. Use environment variables without any Airflow configuration
Solution
Step 1: Identify how Airflow integrates with AWS Secrets Manager
Airflow supports multiple secrets backends configured in airflow.cfg under the [secrets] section.
Step 2: Correctly configure the secrets backend
Setting backend to airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend enables Airflow to fetch secrets from AWS Secrets Manager securely.
Final Answer:
Configure airflow.cfg with [secrets] backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend -> Option C
Quick Check:
Configure secrets backend for AWS Secrets Manager [OK]
Hint: Set secrets backend in airflow.cfg for AWS Secrets Manager [OK]
Common Mistakes:
Hardcoding credentials in DAGs (unsafe)
Using Variables only without backend config
Ignoring Airflow secrets backend configuration
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.