Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: Add docs for basic auth to airflow stable rest api #876

Merged
merged 2 commits into from
Oct 17, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions airflow/plural/docs/basic-auth.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
## Using the Airflow API

To use the [Airflow Stable REST API](https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html)
follow the steps below

### edit values.yaml

You'll need edit `airflow/helm/airflow/values.yaml` in your installation repo to enable basic auth to the REST API:

```yaml
airflow:
airflow:
airflow:
config:
AIRFLOW__API__AUTH_BACKENDS: airflow.api.auth.backend.basic_auth
```

Alternatively, you should be able to do this in the configuration section for airflow in your plural console as well.

### exec into airflow scheduler pod

In order to create an Airflow user that will be used to authenticate to the API, you will need to run Airflow CLI
commands. This requires an exec into your Airflow environment. There are two ways you could do this (via local CLI or
via Plural Console). Choose whichever works best for you:

**__via local CLI__**

1. Identify the scheduler pod by running `kubectl get pods -n airflow`
2. Exec into the scheduler pod by running `kubectl exec -ti airflow-scheduler-nnn-nnn --namespace airflow -- /bin/bash`

**__via Plural Console__**

1. Click on the `Pods` icon on the left-hand nav bar
2. Filter the pods down to the `Airflow` namespace
3. Click on a pod running an Airflow Scheduler
4. On the container line-item called `airflow-scheduler` click the shell icon to launch a shell where you can run Airflow
CLI commands

### create an airflow user

Now that you have a shell to the scheduler container, you can run an Airflow command to create a user (see Airflow Docs
[here](https://airflow.apache.org/docs/apache-airflow/stable/security/webserver.html#web-authentication)):

```shell
(airflow) airflow users create -e [email protected] -f Peter -l Parker -p my_super_secret_password -r Admin -u pparker
```

```shell
airflow@airflow-scheduler-nnn-nnn:/opt/airflow$ airflow users create -e [email protected] -f Peter -l Parker -p my_super_secret_password -r Admin -u pparker
```

### customize role (optional)

If you want to customize the Role for your API user and which permissions it has, you can do so in the Airflow UI. See
more details [here](https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html)

## Making API Calls

Once you've completed the steps above to configure basic auth, you should be able to make api requests to your Airflow
instance accordingly:

```python
# trigger a DAG in Python

import json
import requests
from requests.auth import HTTPBasicAuth

# Define your base URL and dag ID as variables
base_url = "<replace with your base_url>" # Your base URL (can be found in your project's context.yaml - spec.configuration.airflow.hostname)
dag_id = "<replace with dag_id you want to trigger>"

# Define your username and password
username="pparker"
password="my_super_secret_password"

# Construct and execute http request - (this one triggers a dag)
response = requests.post(
url=f"https://{base_url}/api/v1/dags/{dag_id}/dagRuns",
headers={"accept": "application/json", "content-type": "application/json"},
data=json.dumps({}),
auth=HTTPBasicAuth(username=username, password=password)
)
print(response.json())
```

```bash
# Define your base URL and dag ID as variables
base_url="<replace with your base_url>" # Your base URL (can be found in your project's context.yaml - spec.configuration.airflow.hostname)
dag_id="<replace with dag_id you want to trigger>"

# Define your username and password
username="pparker"
password="my_super_secret_password"

# Construct and execute the curl command - (this one triggers a dag)
curl -X POST "$base_url/api/v1/dags/$dag_id/dagRuns" \
-H "accept: application/json" \
-H "content-type: application/json" \
-d "{}" \
-u "$username:$password"
```

For complete documentation on the API Stable REST API, be sure to visit the OSS docs [here](https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html).