mirror of
https://github.com/wukko/cobalt.git
synced 2024-11-15 12:50:01 +00:00
docs/protect-an-instance: add api keys configuration
This commit is contained in:
parent
a81a19de68
commit
9790179e29
1 changed files with 51 additions and 1 deletions
|
@ -13,7 +13,7 @@ all you need is a free cloudflare account to get started.
|
||||||
|
|
||||||
cloudflare dashboard interface might change over time, but basics should stay the same.
|
cloudflare dashboard interface might change over time, but basics should stay the same.
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!WARNING]
|
||||||
> never share the turnstile secret key, always keep it private. if accidentally exposed, rotate it in widget settings.
|
> never share the turnstile secret key, always keep it private. if accidentally exposed, rotate it in widget settings.
|
||||||
|
|
||||||
1. open [the cloudflare dashboard](https://dash.cloudflare.com/) and log into your account
|
1. open [the cloudflare dashboard](https://dash.cloudflare.com/) and log into your account
|
||||||
|
@ -97,3 +97,53 @@ environment:
|
||||||
TURNSTILE_SECRET: "2x0000000000000000000000000000000AA" # use your key
|
TURNSTILE_SECRET: "2x0000000000000000000000000000000AA" # use your key
|
||||||
JWT_SECRET: "bgBmF4efNCKPirDqTc4FMmbX8P22I31oCj5R1zDiDi5sy8CWPnfLUct7rk5RlZUS" # create a new secret, NEVER use this one
|
JWT_SECRET: "bgBmF4efNCKPirDqTc4FMmbX8P22I31oCj5R1zDiDi5sy8CWPnfLUct7rk5RlZUS" # create a new secret, NEVER use this one
|
||||||
```
|
```
|
||||||
|
4. restart the docker container.
|
||||||
|
|
||||||
|
## configure api keys
|
||||||
|
if you want to use your instance outside of web interface, you'll need an api key!
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> this tutorial assumes that you'll keep your keys file locally, on the instance server.
|
||||||
|
> if you wish to upload your file to a remote location,
|
||||||
|
> replace the value for `API_KEYS_URL` with a direct url to the file.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> when storing keys file remotely, make sure that it's not publicly accessible
|
||||||
|
> and that link to it is either authenticated (via query) or impossible to guess.
|
||||||
|
>
|
||||||
|
> if api keys leak, you'll have to update/remove all UUIDs to revoke them.
|
||||||
|
|
||||||
|
1. create a `keys.json` file following [the schema and example here](/docs//run-an-instance.md#api-key-file-format).
|
||||||
|
|
||||||
|
2. expose the `keys.json` to the docker container:
|
||||||
|
```yml
|
||||||
|
volumes:
|
||||||
|
- ./keys.json:/keys.json:ro # ro - read-only
|
||||||
|
```
|
||||||
|
|
||||||
|
3. add a path to the keys file to container environment:
|
||||||
|
```yml
|
||||||
|
environment:
|
||||||
|
# ... other variables here ...
|
||||||
|
API_KEY_URL: "file:///keys.json"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. restart the docker container.
|
||||||
|
|
||||||
|
## limit access to an instance with api keys but no turnstile
|
||||||
|
by default, api keys are additional, meaning that they're not *required*,
|
||||||
|
but work alongside with turnstile or no auth (regular ip hash rate limiting).
|
||||||
|
|
||||||
|
to always require auth (via keys or turnstile, if configured), set `API_AUTH_REQUIRED` to 1:
|
||||||
|
```yml
|
||||||
|
environment:
|
||||||
|
# ... other variables here ...
|
||||||
|
API_AUTH_REQUIRED: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
- if both keys and turnstile are enabled, then nothing will change.
|
||||||
|
- if only keys are configured, then all requests without a valid api key will be refused.
|
||||||
|
|
||||||
|
### why not make keys exclusive by default?
|
||||||
|
keys may be useful for going around rate limiting,
|
||||||
|
while keeping the rest of api rate limited, with no turnstile in place.
|
||||||
|
|
Loading…
Reference in a new issue