Skip to content

Commit

Permalink
docs: Add docs for basic auth to airflow stable rest api (#876)
Browse files Browse the repository at this point in the history
* docs: Add docs for basic auth to airflow stable rest api

* Add console instructions for pod exec
  • Loading branch information
chrishronek authored Oct 17, 2023
1 parent 8150ebd commit 3fa3243
Showing 1 changed file with 104 additions and 0 deletions.
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).

0 comments on commit 3fa3243

Please sign in to comment.