# Factory
Sometimes you want to automate the creation of Canarytokens across your fleet. Perhaps you want every EC2 instance to reach out and fetch a token on creation (or startup). The Canary Console API allows for the automation, but it seems a bad idea to use your API key on every host.
The Canarytoken factory gives you a limited use key that is able to create other tokens. You can leave this key on a host knowing that even if an attacker were able to grab it, he'd be able to create new tokens but not remove (or alter) anything else.
NOTE
We recommend that you use the Canarytoken Deploy Flock API Key type, instead of Factory Auth Tokens.
The Canarytoken Deploy Flock API type is specifically designed to only be able to create and download (deploy) Canarytokens within a specific flock, and can be viewed/managed from the Console UI Flock API settings (opens new window) in the same way as your other Flock API keys.
Existing Canarytoken Factory Endpoints and factory auth strings continue to work as before to support existing deployments. They are now simpler to manage in the Console UI as they're transparently converted to Canarytoken Deploy Flock API keys.
# List Canarytokens available via Canarytoken Factory
TIP
The values returned by this Canarytokens Factory API correspond to the kind parameter used to create
Canarytokens via the Canarytokens Factory. As an example, if you wanted to create a Cloned Web Canarytoken, you would check the
response to this Canarytoken Factory API and use cloned-web to define the Canarytoken type you wish to create via the Canarytoken Factory.
GET /api/v1/canarytokens/factory/list
Lists the Canarytokens available via your Canarytokens Factory.
Required Parameters
Response
A JSON structure with result indicator and Canarytokens Factory information.
Example
curl https://EXAMPLE.canary.tools/api/v1/canarytokens/factory/list \ -d auth_token=EXAMPLE_AUTH_TOKEN \ -GCopied!
2
3
{ "factory_canarytokens": { "active-directory-login": "Active Directory Login", "aws-id": "AWS API Key", "azure-entra-login": "Azure Entra Login", "azure-id": "Azure Login Certificate and Config", "cloned-css": "CSS cloned site", "cloned-web": "Cloned Website", "credit-card": "Credit Card", "dns": "DNS", "doc-msexcel": "MS Excel Document", "doc-msword": "MS Word Document", "fast-redirect": "Fast Redirect", "http": "Web Bug", "msexcel-macro": "MS Excel Macro Document", "msword-macro": "MS Word Macro Document", "mysql-dump": "MySQL Dump File", "pdf-acrobat-reader": "Acrobat PDF", "pwa": "Fake App", "qr-code": "QR Code", "sensitive-cmd": "Sensitive Command", "signed-exe": "Custom Exe/Binary", "slack-api": "Slack API Key", "slow-redirect": "Slow Redirect", "sql": "SQL Server", "svn": "SVN Repo", "web-image": "Custom Web Image", "windows-dir": "Windows Folder", "wireguard": "WireGuard VPN", }, "result": "success" }Copied!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Create Canarytokens Using Factory
POST /api/v1/canarytoken/factory/create
Create Canarytokens using a Canarytokens Factory auth string
Required Parameters
Optional Parameters
Cloned CSS and Azure Entra Login Canarytokens.-F 'doc=@upload-me.docx; type=application/vnd.openxmlformats-officedocument.wordprocessingml.document'-F pdf=@upload-me.pdf; type=application/pdfpwa Canarytokenpwa CanarytokenResponse
A JSON structure with the generated Canarytoken.
Example
curl https://EXAMPLE.canary.tools/api/v1/canarytoken/factory/create \ -d factory_auth=EXAMPLE_FACTORY_AUTH_TOKEN \ -d memo='Example Memo' \ -d kind=EXAMPLE_KINDCopied!
2
3
4
{ "canarytoken": { "access_key_id": "<access_key_id>", "canarytoken": "<token_code>", "created": "1586246956.323499", "created_printable": "2020-04-07 08:09:16 (UTC)", "enabled": true, "factory_auth": "<factory_auth_token>", "flock_id": "flock:default", "hostname": "<token_hostname>", "key": "canarydrop:<key>", "kind": "aws-id", "memo": "Example Memo", "renders": { "aws-id": "\n [default]\n aws_access_key_id = <aws_access_key>\n aws_secret_access_key = <aws_secret_access_key>" }, "secret_access_key": "<aws_secret_access_key>", "triggered_count": 0, "updated_id": 14, "url": "<token_url>", "username": "<token_user_name>" }, "result": "success" }Copied!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Download Canarytoken using Factory Auth String
GET /api/v1/canarytoken/factory/download
Download the generated file (if one exists) for the supplied Canarytoken using the Factory auth string
Required Parameters
Response
A file if the Canarytoken supports file generation, otherwise an error.
# Create Canarytoken Factory Auth String
POST /api/v1/canarytoken/create_factory
Create an auth string for the Canarytoken Factory endpoint.
Required Parameters
Response
A JSON structure with auth string and Canarytoken factory endpoint.
Example
curl https://EXAMPLE.canary.tools/api/v1/canarytoken/create_factory \ -d auth_token=EXAMPLE_AUTH_TOKEN -d flock_id=flock:default \ -d memo='Example Memo'Copied!
2
3
{ "factory_auth": "<factory_auth_token>", "factory_url": "/api/v1/canarytoken/factory", "result": "success" }Copied!
2
3
4
5
# Delete Canarytoken Factory Auth String
DELETE /api/v1/canarytoken/delete_factory
Delete an auth string for the Canarytoken Factory endpoint.
Required Parameters
Response
A JSON structure with result indicator.
# List Canarytoken Factory Auth Strings
GET /api/v1/canarytoken/list_factories
List all Factory auth strings for the Canarytoken Factory endpoint.
Required Parameters
Response
A JSON structure with a list of factory auth strings.
Example
curl https://EXAMPLE.canary.tools/api/v1/canarytoken/list_factories \ -d auth_token=EXAMPLE_AUTH_TOKEN -GCopied!
2
{ "factories": [ { "factory_auth": "<Factory Auth String>", "flock_id": "flock:default", "memo": "Example Memo" }, { "factory_auth": "<Factory Auth String 2>", "flock_id": "flock:default", "memo": "Example Memo 2" } ], "result": "success" }Copied!
2
3
4
5
6
7
8
9
10
11
12
13
14
15