Mitigation Strategy: Principle of Least Privilege for DAG Authors (Airflow RBAC)
Mitigation Strategy: Principle of Least Privilege for DAG Authors (using Airflow RBAC)
Description:
- Identify DAG Requirements: For each DAG, list the required Airflow resources (Connections, Variables, Pools).
- Create Custom Roles: Define custom Airflow RBAC roles within Airflow's UI or via code. Each role should grant only the permissions identified in step 1. Avoid using "Admin" or "User" roles for DAG authors. Example: Create a role "DAG_Author_ProjectX" with access only to specific connections and variables related to Project X.
- Assign Roles: Assign the appropriate custom role to each DAG author based on the DAGs they manage. This is done through the Airflow UI or programmatically.
- Regular Review: Periodically (e.g., quarterly) review the assigned roles and permissions within Airflow's UI to ensure they remain aligned with DAG requirements. Revoke unnecessary permissions.
- Audit Logs: Enable and monitor Airflow's audit logs (if configured) to track role assignments and permission changes.
Threats Mitigated:
- Malicious DAG Code Execution (Severity: High): A DAG author intentionally introduces malicious code.
- Accidental DAG Code Errors (Severity: Medium): A DAG author unintentionally introduces code that causes issues.
- Data Exfiltration (Severity: High): A DAG author attempts to steal data through the DAG.
- Privilege Escalation (Severity: High): A DAG author exploits vulnerabilities to gain higher Airflow privileges.
Impact:
- Malicious DAG Code Execution: Reduces the damage potential; code can only access limited resources.
- Accidental DAG Code Errors: Limits the scope of damage to accessible resources.
- Data Exfiltration: Restricts exfiltratable data to what's accessible via the role.
- Privilege Escalation: Makes privilege escalation harder, starting from limited permissions.
Currently Implemented: Partially. Custom roles exist for some projects, but not consistently applied. Audit logs are enabled.
Missing Implementation: Comprehensive review of all DAG author roles and permissions is needed. Standardized process for creating/assigning roles based on DAG requirements needs formalization and enforcement. The "User" role is still used in some cases.
Mitigation Strategy: Code Review and Static Analysis of DAGs (Integrated with Airflow CI/CD)
Mitigation Strategy: Code Review and Static Analysis of DAGs (integrated with Airflow's deployment process)
Description:
- Establish Code Review Guidelines: Create guidelines outlining security checks for DAG code reviews (no hardcoded secrets, input validation, secure libraries).
- Mandatory Code Reviews: Enforce a policy requiring all DAG code changes to be reviewed before deployment. Use a version control system (Git) with pull requests.
- Integrate Static Analysis Tools: Integrate static analysis tools (
pylint
,flake8
,bandit
) into the CI/CD pipeline that deploys DAGs to Airflow. Configure tools to flag security issues. - Automated Checks: Configure the CI/CD pipeline to automatically run static analysis on every code commit. Fail the build (and prevent DAG deployment) if security violations are detected.
- Regular Tool Updates: Keep static analysis tools and rule sets up-to-date.
Threats Mitigated:
- Malicious DAG Code Injection (Severity: High): Code review helps identify malicious code.
- Accidental Vulnerabilities (Severity: Medium): Static analysis catches common coding errors.
- Vulnerable Libraries (Severity: Medium): Static analysis can detect vulnerable libraries.
- SQL Injection (Severity: High): Static analysis and code review can identify potential SQL injection.
Impact:
- Malicious DAG Code Injection: Reduces the likelihood of malicious code reaching production.
- Accidental Vulnerabilities: Reduces vulnerabilities from coding errors.
- Vulnerable Libraries: Provides early warning of vulnerable libraries.
- SQL Injection: Reduces the risk of SQL injection attacks.
Currently Implemented: Partially. Code reviews are generally performed, but not always with a strong security focus. pylint
is used, but bandit
and other security tools are not integrated into the CI/CD pipeline that deploys to Airflow.
Missing Implementation: Formal security guidelines for code reviews are needed. bandit
and other security-focused static analysis tools should be integrated into the Airflow deployment pipeline. The pipeline should fail builds with security violations.
Mitigation Strategy: DAG Isolation (Using Airflow Executors)
Mitigation Strategy: DAG Isolation using Airflow Executors (e.g., KubernetesExecutor
)
Description:
- Choose an Executor: Select an Airflow executor that supports isolation:
KubernetesExecutor
orCeleryKubernetesExecutor
. - Create Docker Images: For each DAG (or group), create a Docker image with all dependencies. Avoid a single, monolithic image.
- Configure Executor: Configure the chosen executor within Airflow (via
airflow.cfg
or environment variables) to use the Docker images. Specify the image name, environment variables, and resource limits. - Test Isolation: Thoroughly test DAGs within their isolated containers.
- Regular Image Updates: Regularly update base images and dependencies in the Docker images.
Threats Mitigated:
- Dependency Conflicts (Severity: Medium): Prevents conflicts between DAGs.
- Task Interference (Severity: Medium): Prevents tasks from affecting each other.
- Compromised Task Exploitation (Severity: High): Limits the impact of a compromised task.
- Resource Exhaustion (Severity: Medium): Allows setting resource limits for each container.
Impact:
- Dependency Conflicts: Eliminates dependency conflicts.
- Task Interference: Prevents task interference.
- Compromised Task Exploitation: Reduces damage from a compromised task.
- Resource Exhaustion: Prevents resource exhaustion.
Currently Implemented: Partially. KubernetesExecutor
is used; some DAGs have dedicated containers.
Missing Implementation: Not all DAGs have dedicated Docker images. A consistent process for creating/managing Docker images for all DAGs is needed. Resource limits are not consistently enforced.
Mitigation Strategy: Secure Handling of Secrets (Using Airflow Secrets Backends)
Mitigation Strategy: Secure Secrets Management using Airflow Secrets Backends
Description:
- Choose a Secrets Backend: Select a secure secrets backend (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager).
- Configure Airflow: Configure Airflow (via
airflow.cfg
or environment variables) to use the chosen secrets backend. This involves setting connection details for the backend. - Store Secrets: Store all secrets in the secrets backend. Never store secrets in DAG code, environment variables (for sensitive secrets), or the Airflow metadata database.
- Retrieve Secrets in DAGs: Use Airflow's mechanisms (
Variable.get()
,Connection.get_connection()
) to retrieve secrets from the backend within DAGs. Use operators that support retrieving credentials from connections. - Rotate Secrets: Regularly rotate secrets.
- Audit Access: Monitor access to the secrets backend.
Threats Mitigated:
- Secrets Exposure (Severity: High): Prevents secrets from being exposed.
- Unauthorized Access to Secrets (Severity: High): Limits access to secrets.
- Credential Theft (Severity: High): Makes credential theft harder.
Impact:
- Secrets Exposure: Eliminates plain text secret exposure.
- Unauthorized Access to Secrets: Reduces unauthorized access risk.
- Credential Theft: Makes theft much more difficult.
Currently Implemented: Partially. AWS Secrets Manager is configured. Some DAGs use it, others have hardcoded credentials or use environment variables insecurely.
Missing Implementation: Complete audit of all DAGs to remove hardcoded secrets/insecure environment variables. All DAGs must retrieve secrets from AWS Secrets Manager. Secret rotation process needs establishment and automation.
Mitigation Strategy: Disable Example DAGs (Airflow Configuration)
Mitigation Strategy: Disable Example DAGs in Production via Airflow Configuration
Description:
- Locate Configuration: Find your
airflow.cfg
file or the environment variable settings for your Airflow deployment. - Set
load_examples
: Setload_examples = False
inairflow.cfg
or set the environment variableAIRFLOW__CORE__LOAD_EXAMPLES=False
. - Restart Airflow Components: Restart the Airflow webserver and scheduler for the change to take effect.
Threats Mitigated:
- Exposure of Example Code (Severity: Low): Example DAGs might contain outdated or insecure code.
- Unintentional Execution of Example DAGs (Severity: Low): Prevents accidental triggering of example DAGs.
Impact:
- Exposure of Example Code: Removes potentially vulnerable example code.
- Unintentional Execution: Prevents accidental execution.
Currently Implemented: Yes. load_examples
is set to False
in the airflow.cfg
.
Missing Implementation: None.
Mitigation Strategy: Secure Configuration of Airflow Webserver (HTTPS, Headers)
Mitigation Strategy: Secure Airflow Webserver Configuration (HTTPS, Security Headers)
Description:
- HTTPS Only: Configure the Airflow webserver (Gunicorn) to only accept HTTPS connections. Obtain a valid SSL/TLS certificate. Configure Gunicorn to use this certificate.
- Strong Ciphers: Configure Gunicorn to use only strong cipher suites and TLS versions (e.g., TLS 1.2 or 1.3).
- HTTP Headers: Configure Gunicorn (or a reverse proxy in front of it) to set security headers:
Strict-Transport-Security
(HSTS)Content-Security-Policy
(CSP)X-Frame-Options
X-Content-Type-Options
X-XSS-Protection
- Authentication Backend: Configure a secure authentication backend for Airflow (LDAP, OAuth, database with strong password policies).
- Multi-Factor Authentication: Enforce MFA for all Airflow UI users.
Threats Mitigated:
- Man-in-the-Middle Attacks (Severity: High): HTTPS prevents eavesdropping and tampering with traffic.
- Cross-Site Scripting (XSS) (Severity: High): CSP and
X-XSS-Protection
headers mitigate XSS. - Clickjacking (Severity: Medium):
X-Frame-Options
prevents clickjacking. - MIME Sniffing Attacks (Severity: Low):
X-Content-Type-Options
prevents MIME sniffing. - Unauthorized Access (Severity: High): Strong authentication and MFA prevent unauthorized login.
Impact:
- Man-in-the-Middle Attacks: Eliminates the risk of traffic interception.
- Cross-Site Scripting (XSS): Significantly reduces XSS vulnerability.
- Clickjacking: Prevents clickjacking attacks.
- MIME Sniffing Attacks: Prevents MIME sniffing.
- Unauthorized Access: Makes unauthorized access much harder.
Currently Implemented: Partially. HTTPS is enforced. Some security headers are set.
Missing Implementation: A comprehensive review of all security headers is needed. Stronger cipher suites need to be enforced. MFA is not universally enforced.
Mitigation Strategy: Limit XCom Usage (Airflow Best Practices)
Mitigation Strategy: Restrict XCom Usage and Size
Description:
- Minimize XCom Data: Only use XCom for small pieces of metadata (e.g., status flags, small IDs). Avoid passing large datasets through XCom.
- Use External Storage: For large data transfers between tasks, use external storage (e.g., cloud storage like S3, GCS) and pass only the reference (e.g., file path) through XCom.
- Configure XCom Limits: Review and adjust Airflow's configuration settings related to XCom size limits (if available in your Airflow version) to prevent excessively large XCom values.
- Code Review: During code reviews, check for appropriate XCom usage.
Threats Mitigated:
- Data Leakage via XCom (Severity: Medium): If XCom data is exposed (e.g., through the UI), limiting its size reduces the potential for sensitive data leakage.
- Performance Degradation (Severity: Medium): Large XCom values can negatively impact Airflow's performance.
- Denial of Service (DoS) (Severity: Low): Extremely large XCom values could potentially contribute to a DoS attack.
Impact:
- Data Leakage via XCom: Reduces the amount of potentially sensitive data exposed through XCom.
- Performance Degradation: Improves Airflow's performance and stability.
- Denial of Service (DoS): Minimizes the risk of DoS related to XCom.
Currently Implemented: Partially. Developers are generally aware of XCom limitations, but there isn't a formal policy or strict enforcement.
Missing Implementation: A formal policy regarding XCom usage should be documented and enforced through code reviews. XCom size limits should be explicitly configured.