# Checklist for submitter If some of the following don't apply, delete the relevant line. <!-- Note that API documentation changes are now addressed by the product design team. --> - [ ] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/Committing-Changes.md#changes-files) for more information. - [ ] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements) - [ ] Added support on fleet's osquery simulator `cmd/osquery-perf` for new osquery data ingestion features. - [ ] Added/updated tests - [ ] If paths of existing endpoints are modified without backwards compatibility, checked the frontend/CLI for any necessary changes - [ ] If database migrations are included, checked table schema to confirm autoupdate - For database migrations: - [ ] Checked schema for all modified table for columns that will auto-update timestamps during migration. - [ ] Confirmed that updating the timestamps is acceptable, and will not cause unwanted side effects. - [ ] Ensured the correct collation is explicitly set for character columns (`COLLATE utf8mb4_unicode_ci`). - [ ] Manual QA for all new/changed functionality - For Orbit and Fleet Desktop changes: - [ ] Orbit runs on macOS, Linux and Windows. Check if the orbit feature/bugfix should only apply to one platform (`runtime.GOOS`). - [ ] Manual QA must be performed in the three main OSs, macOS, Windows and Linux. - [ ] Auto-update manual QA, from released version of component to new version (see [tools/tuf/test](../tools/tuf/test/README.md)).
29 KiB
YAML files
Use Fleet's best practice GitOps workflow to manage your computers as code.
To learn how to set up a GitOps workflow see the Fleet GitOps repo.
File structure
default.yml- File where you define the queries, policies and agent options for all hosts. If you're using Fleet Premium, this file updates queries and policies that run on all hosts ("All teams").teams/no-team.yml- File where you define the policies, controls, and software for hosts on "No team". Available in Fleet Premium.teams/- Folder where you define your teams in Fleet. Theseteams/team-name.ymlfiles define the controls, queries, policies, software, and agent options for hosts assigned to the specified team. Available in Fleet Premium.lib/- Folder where you define policies, queries, configuration profiles, scripts, and agent options. These files can be referenced in top level keys in thedefault.ymlfile and the files in theteams/folder..github/workflows/workflow.yml- The GitHub workflow file where you can add environment variables.
The following files are responsible for running the GitHub action or GitLab CI/CD. Most users don't need to edit these files.
gitops.sh- The bash script that applies the latest configuration to Fleet. This script is used in the GitHub action file..github/gitops-action/action.yml- The GitHub action that runsgitops.sh. This action is used in the GitHub workflow file. It can also be used in other workflows..gitlab-ci.yml- The GitLab CI/CD file that applies the latest configuration to Fleet.
Configuration options
The following are the required keys in the default.yml and any teams/team-name.yml files:
name: # Only teams/team-name.yml. To edit a team's name, change `name` but don't change the filename.
policies:
queries:
agent_options:
controls: # Can be defined in teams/no-team.yml too.
org_settings: # Only default.yml
team_settings: # Only teams/team-name.yml
policies
Polcies can be specified inline in your default.yml file or teams/team-name.yml files. They can also be specified in separate files in your lib/ folder.
Policies defined in default.yml run on all hosts.
Policies defined in teams/no-team.yml run on hosts that belong to "No team".
Options
For possible options, see the parameters for the Add policy API endpoint.
Example
Inline
default.yml or teams/team-name.yml
policies:
- name: macOS - Enable FileVault
description: This policy checks if FileVault (disk encryption) is enabled.
resolution: As an IT admin, turn on disk encryption in Fleet.
query: SELECT 1 FROM filevault_status WHERE status = 'FileVault is On.';
platform: darwin
critical: false
calendar_event_enabled: false
Separate file
lib/policies-name.policies.yml
- name: macOS - Enable FileVault
description: This policy checks if FileVault (disk encryption) is enabled.
resolution: As an IT admin, turn on disk encryption in Fleet.
query: SELECT 1 FROM filevault_status WHERE status = 'FileVault is On.';
platform: darwin
critical: false
calendar_event_enabled: false
- name: macOS - Disable guest account
description: This policy checks if the guest account is disabled.
resolution: An an IT admin, deploy a macOS, login window profile with the DisableGuestAccount option set to true.
query: SELECT 1 FROM managed_policies WHERE domain='com.apple.loginwindow' AND username = '' AND name='DisableGuestAccount' AND CAST(value AS INT) = 1;
platform: darwin
critical: false
calendar_event_enabled: false
- name: Firefox on Linux installed and up to date
platform: linux
description: "This policy checks that Firefox is installed and up to date."
resolution: "Install Firefox version 129.0.2 or higher."
query: "SELECT 1 FROM deb_packages WHERE name = 'firefox' AND version_compare(version, '129.0.2') >= 0;"
install_software:
package_path: "../lib/linux-firefox.deb.package.yml"
default.yml, teams/team-name.yml, or teams/no-team.yml
policies:
- path: ../lib/policies-name.policies.yml
# path is relative to default.yml or teams/team-name.yml
queries
Queries can be specified inline in your default.yml file or teams/team-name.yml files. They can also be specified in separate files in your lib/ folder.
Note that the team_id option isn't supported in GitOps.
Options
For possible options, see the parameters for the Create query API endpoint.
Example
Inline
default.yml or teams/team-name.yml
queries:
- name: Collect failed login attempts
description: Lists the users at least one failed login attempt and timestamp of failed login. Number of failed login attempts reset to zero after a user successfully logs in.
query: SELECT users.username, account_policy_data.failed_login_count, account_policy_data.failed_login_timestamp FROM users INNER JOIN account_policy_data using (uid) WHERE account_policy_data.failed_login_count > 0;
platform: darwin,linux,windows
interval: 300
observer_can_run: false
automations_enabled: false
Separate file
lib/queries-name.queries.yml
- name: Collect failed login attempts
description: Lists the users at least one failed login attempt and timestamp of failed login. Number of failed login attempts reset to zero after a user successfully logs in.
query: SELECT users.username, account_policy_data.failed_login_count, account_policy_data.failed_login_timestamp FROM users INNER JOIN account_policy_data using (uid) WHERE account_policy_data.failed_login_count > 0;
platform: darwin,linux,windows
interval: 300
observer_can_run: false
automations_enabled: false
- name: Collect USB devices
description: Collects the USB devices that are currently connected to macOS and Linux hosts.
query: SELECT model, vendor FROM usb_devices;
platform: darwin,linux
interval: 300
observer_can_run: true
automations_enabled: false
default.yml or teams/team-name.yml
queries:
- path: ../lib/queries-name.queries.yml
# path is relative to default.yml or teams/team-name.yml
agent_options
Agent options can be specified inline in your default.yml file or teams/team-name.yml files. They can also be specified in separate files in your lib/ folder.
See "Agent configuration" to find all possible options.
Example
Inline
default.yml or teams/team-name.yml
agent_options:
config:
decorators:
load:
- SELECT uuid AS host_uuid FROM system_info;
- SELECT hostname AS hostname FROM system_info;
options:
disable_distributed: false
distributed_interval: 10
distributed_plugin: tls
distributed_tls_max_attempts: 3
logger_tls_endpoint: /api/osquery/log
logger_tls_period: 10
pack_delimiter: /
Separate file
lib/agent-options.yml
config:
decorators:
load:
- SELECT uuid AS host_uuid FROM system_info;
- SELECT hostname AS hostname FROM system_info;
options:
disable_distributed: false
distributed_interval: 10
distributed_plugin: tls
distributed_tls_max_attempts: 3
logger_tls_endpoint: /api/osquery/log
logger_tls_period: 10
pack_delimiter: /
default.yml or teams/team-name.yml
We want
-for policies and queries because it’s an array. Agent Options we do not use-forpath.
queries:
path: ../lib/agent-options.yml
# path is relative to default.yml or teams/team-name.yml
controls
The controls section allows you to configure scripts and device management (MDM) features in Fleet.
Controls for hosts that are in "No team" can be defined in default.yml or in teams/no-team.yml (but not in both files).
scriptsis a list of paths to macOS, Windows, or Linux scripts.windows_enabled_and_configuredspecifies whether or not to turn on Windows MDM features (default:false). Can only be configured for all teams (default.yml).enable_disk_encryptionspecifies whether or not to enforce disk encryption on macOS and Windows hosts (default:false).
Example
controls:
scripts:
- path: ../lib/macos-script.sh
- path: ../lib/windows-script.ps1
- path: ../lib/linux-script.sh
windows_enabled_and_configured: true
enable_disk_encryption: true # Available in Fleet Premium
macos_updates: # Available in Fleet Premium
deadline: "2023-06-13"
minimum_version: 13.4.1
windows_updates: # Available in Fleet Premium
deadline_days: 5
grace_period_days: 2
macos_settings:
custom_settings:
- path: ../lib/macos-profile1.mobileconfig
labels_exclude_any:
- Label 1
- path: ../lib/macos-profile2.json
labels_include_all:
- Label 2
windows_settings:
custom_settings:
- path: ../lib/windows-profile.xml
macos_setup: # Available in Fleet Premium
bootstrap_package: https://example.org/bootstrap_package.pkg
enable_end_user_authentication: true
macos_setup_assistant: ../lib/dep-profile.json
macos_migration: # Available in Fleet Premium
enable: true
mode: voluntary
webhook_url: https://example.org/webhook_handler
# paths are relative to default.yml or teams/team-name.yml
macos_updates
deadlinespecifies the deadline in the form ofYYYY-MM-DD. The exact deadline time is at 04:00:00 (UTC-8) (default:"").minimum_versionspecifies the minimum required macOS version (default:"").
windows_updates
deadline_days(default: null)grace_period_days(default: null)
ios_updates
deadlinespecifies the deadline in the form ofYYYY-MM-DD. The exact deadline time is at 04:00:00 (UTC-8) (default:"").minimum_versionspecifies the minimum required iOS version (default:"").
ipados_updates
deadlinespecifies the deadline in the form ofYYYY-MM-DD. The exact deadline time is at 04:00:00 (UTC-8) (default:"").minimum_versionspecifies the minimum required iPadOS version (default:"").
macos_settings and windows_settings
macos_settings.custom_settingsis a list of paths to macOS configuration profiles (.mobileconfig) or declaration profiles (.json).windows_settings.custom_settingsis a list of paths to Windows configuration profiles (.xml).
Fleet supports adding GitHub environment variables in your configuration profiles. Use $ENV_VARIABLE format.
Use labels_include_all to only apply (scope) profiles to hosts that have all those labels or labels_exclude_any to apply profiles to hosts that don't have any of those labels.
macos_setup
The macos_setup section lets you control the out-of-the-box macOS setup experience for hosts that use Automated Device Enrollment (ADE).
bootstrap_packageis the URL to a bootstap package. Fleet will download the bootstrap package (default:"").enable_end_user_authenticationspecifies whether or not to require end user authentication when the user first sets up their macOS host.macos_setup_assistantis a path to a custom automatic enrollment (ADE) profile (.json).
macos_migration
The macos_migration section lets you control the end user migration workflow for macOS hosts that enrolled to your old MDM solution.
enablespecifies whether or not to enable end user migration workflow (default:false)modespecifies whether the end user initiates migration (voluntary) or they're nudged every 15-20 minutes to migrate (forced) (default:"").webhook_urlis the URL that Fleet sends a webhook to when the end user selects Start. Receive this webhook using your automation tool (ex. Tines) to unenroll your end users from your old MDM solution.
Can only be configure for all teams (default.yml).
software
Experimental feature. This feature is undergoing rapid improvement, which may result in breaking changes to the API or configuration surface. It is not recommended for use in automated workflows.
The software section allows you to configure packages and Apple App Store apps that you want to install on your hosts.
Software for hosts that belong to "No team" have to be defined in teams/no-team.yml.
Software can also be specified in separate files in your lib/ folder.
packagesis a list of software packages (.pkg, .msi, .exe, or .deb) and software specific options.app_store_appsis a list of Apple App Store apps.
Example
Inline
software:
packages:
- url: https://github.com/organinzation/repository/package-1.pkg
install_script:
path: /lib/crowdstrike-install.sh
pre_install_query:
path: /lib/check-crowdstrike-configuration-profile.queries.yml
post_install_script:
path: /lib/crowdstrike-post-install.sh
self_service: true
- url: https://github.com/organinzation/repository/package-2.msi
app_store_apps:
- app_store_id: '1091189122'
packages
urlspecifies the URL at which the software is located. Fleet will download the software and upload it to S3 (default:"").install_script.pathspecifies the command Fleet will run on hosts to install software. The default script is dependent on the software type (i.e. .pkg).pre_install_query.pathis the osquery query Fleet runs before installing the software. Software will be installed only if the query returns results (default:"").post_install_script.pathis the script Fleet will run on hosts after intalling software (default:"").self_servicespecifies whether or not end users can install from Fleet Desktop > Self-service.
app_store_apps
app_store_idis the ID of the Apple App Store app. You can find this at the end of the app's App Store URL. For example, "Bear - Markdown Notes" URL is "https://apps.apple.com/us/app/bear-markdown-notes/id1016366447" and theapp_store_idis1016366447.
Make sure to include only the ID itself, and not the
idprefix shown in the URL. The ID must be wrapped in quotes as shown in the example so that it is processed as a string.
self_service only applies to macOS, and is ignored for other platforms. For example, if the app is supported on macOS, iOS, and iPadOS, and self_service is set to true, it will be self-service on macOS workstations but not iPhones or iPads.
Separate file
lib/software-name.package.yml:
url: https://dl.tailscale.com/stable/tailscale-setup-1.72.0.exe
install_script:
path: ../lib/software/tailscale-install-script.ps1
self_service: true
lib/software/tailscale-install-script.ps1
$exeFilePath = "${env:INSTALLER_PATH}"
$installProcess = Start-Process $exeFilePath `
-ArgumentList "/quiet /norestart" `
-PassThru -Verb RunAs -Wait
default.yml, teams/team-name.yml, or teams/no-team.yml
software:
packages:
- path: ../lib/software-name.package.yml
# path is relative to default.yml or teams/team-name.yml
org_settings and team_settings
features
The features section of the configuration YAML lets you define what predefined queries are sent to the hosts and later on processed by Fleet for different functionalities.
additional_queriesadds extra host details. This information will be updated at the same time as other host details and is returned by the API when host objects are returned (default: empty).enable_host_usersspecifies whether or not Fleet collects user data from hosts (default:true).enable_software_inventoryspecifies whether or not Fleet collects softwre inventory from hosts (default:true).
Example
org_settings:
features:
additional_queries:
time: SELECT * FROM time
macs: SELECT mac FROM interface_details
enable_host_users: true
enable_software_inventory: true
fleet_desktop
Direct end users to a custom URL when they select Transparency in the Fleet Desktop dropdown (default: https://fleetdm.com/transparency).
Can only be configured for all teams (org_settings).
Example
org_settings:
fleet_desktop:
transparency_url: "https://example.org/transparency"
host_expiry_settings
The host_expiry_settings section lets you define if and when hosts should be automatically deleted from Fleet if they have not checked in.
host_expiry_enabled(default:false)host_expiry_windowif a host has not communicated with Fleet in the specified number of days, it will be removed. Must be >0when host expiry is enabled (default:0).
Example
org_settings:
host_expiry_settings:
host_expiry_enabled: true
host_expiry_window: 10
org_info
nameis the name of your organization (default:"")logo_urlis a public URL of the logo for your organization (default: Fleet logo).org_logo_url_light_backgroundis a public URL of the logo for your organization that can be used with light backgrounds (default: Fleet logo).contact_urlis a URL that appears in error messages presented to end users (default:"https://fleetdm.com/company/contact")
Can only be configured for all teams (org_settings).
Example
org_settings:
org_info:
org_name: Fleet
org_logo_url: https://example.com/logo.png
org_logo_url_light_background: https://example.com/logo-light.png
contact_url: https://fleetdm.com/company/contact
secrets
The secrets section defines the valid secrets that hosts can use to enroll to Fleet. Supply one of these secrets when generating the fleetd agent you'll use to enroll hosts. Learn more here.
Example
org_settings:
secrets:
- $ENROLL_SECRET
server_settings
enable_analyticsspecifies whether or not to enable Fleet's usage statistics (default:true).live_query_disableddisables the ability to run live queries (ad hoc queries executed via the UI or fleetctl) (default:false).query_reports_disableddisables query reports and deletes existing repors (default:false).query_report_capsets the maximum number of results to store per query report before the report is clipped. If increasing this cap, we recommend enabling reports for one query at time and monitoring your infrastructure. (Default:1000)scripts_disabledblocks access to run scripts. Scripts may still be added in the UI and CLI (defaul:false).server_urlis the base URL of the Fleet instance (default: provided during Fleet setup)
Can only be configured for all teams (org_settings).
Example
org_settings:
server_settings:
enable_analytics: true
live_query_disabled: false
query_reports_disabled: false
scripts_disabled: false
server_url: https://instance.fleet.com
sso_settings
The sso_settings section lets you define single sign-on (SSO) settings. Learn more about SSO in Fleet here.
enable_sso(default:false)idp_nameis the human-friendly name for the identity provider that will provide single sign-on authentication (default:"").entity_idis the entity ID: a Uniform Resource Identifier (URI) that you use to identify Fleet when configuring the identity provider. It must exactly match the Entity ID field used in identity provider configuration (default:"").metadatais the metadata (in XML format) provided by the identity provider. (default:"")metadata_urlis the URL that references the identity provider metadata. Only one ofmetadataormetadata_urlis required (default:"").enable_jit_provisioningspecified whether or not to allow single sign-on login initiated by identity provider (default:false).enable_sso_idp_loginspecifies whether or not to enables just-in-time user provisioning (default:false).
Can only be configured for all teams (org_settings).
Example
org_settings:
sso_settings:
enable_sso: true
idp_name: SimpleSAML
entity_id: https://example.com
metadata: $SSO_METADATA
enable_jit_provisioning: true # Available in Fleet Premium
enable_sso_idp_login: true
integrations
The integrations section lets you define calendar events and ticket settings for failing policy and vulnerablity automations. Learn more about automations in Fleet here.
Example
org_settings:
integrations:
google_calendar:
- api_key_json: $GOOGLE_CALENDAR_API_KEY_JSON
domain: fleetdm.com
jira:
- url: https://example.atlassian.net
username: user1
api_token: $JIRA_API_TOKEN
project_key: PJ1
zendesk:
- url: https://example.zendesk.com
email: user1@example.com
api_token: $ZENDESK_API_TOKEN
group_id: 1234
For secrets, you can add GitHub environment variables
google_calendar
api_key_jsonis the contents of the JSON file downloaded when you create your Google Workspace service account API key (default:"").domainis the primary domain used to identify your end user's work calendar (default:"").
jira
urlis the URL of your Jira (default:"")usernameis the username of your Jira account (default:"").api_tokenis the Jira API token (default:"").project_keyis the project key location in your Jira project's URL. For example, in "jira.example.com/projects/EXMPL," "EXMPL" is the project key (default:"").
zendesk
urlis the URL of your Zendesk (default:"")usernameis the username of your Zendesk account (default:"").api_tokenis the Zendesk API token (default:"").group_idis found by selecting Admin > People > Groups in Zendesk. Find your group and select it. The group ID will appear in the search field.
webhook_settings
The webhook_settings section lets you define webhook settings for failing policy, vulnerability, and host status automations. Learn more about automations in Fleet here.
failing_policies_webhook
enable_failing_policies_webhook(default:false)destination_urlis the URL toPOSTto when the condition for the webhook triggers (default:"").policy_idsis the list of policies that will trigger a webhook.host_batch_sizeis the maximum number of hosts to batch in each webhook. A value of0means no batching (default:0).
Example
org_settings:
webhook_settings:
failing_policies_webhook:
enable_failing_policies_webhook: true
destination_url: https://example.org/webhook_handler
host_batch_size: 0
policy_ids:
- 1
- 2
- 3
host_status_webhook
enable_host_status_webhook(default:false)destination_urlis the URL toPOSTto when the condition for the webhook triggers (default:"").days_countis the number of days that hosts need to be offline to count as part of the percentage (default:0).host_percentageis the percentage of hosts that need to be offline to trigger the webhook. (default:0).
Example
org_settings:
webhook_settings:
host_status_webhook:
enable_host_status_webhook: true
destination_url: https://example.org/webhook_handler
days_count: 7
host_percentage: 25
vulnerabilities_webhook
enable_vulnerabilities_webhook(default:false)destination_urlis the URL toPOSTto when the condition for the webhook triggers (default:"").days_countis the number of days that hosts need to be offline to count as part of the percentage (default:0).host_batch_sizeis the maximum number of hosts to batch in each webhook. A value of0means no batching (default:0).
Example
org_settings:
webhook_settings:
vulnerabilities_webhook:
enable_vulnerabilities_webhook: true
destination_url: https://example.org/webhook_handler
host_batch_size: 0
Can only be configured for all teams (org_settings).
mdm
apple_business_manager
organization_nameis the organization name associated with the Apple Business Manager account.macos_teamis the team where macOS hosts are automatically added when they appear in Apple Business Manager.ios_teamis the the team where iOS hosts are automatically added when they appear in Apple Business Manager.ipados_teamis the team where iPadOS hosts are automatically added when they appear in Apple Business Manager.
Example
org_settings:
mdm:
apple_business_manager: # Available in Fleet Premium
- organization_name: Fleet Device Management Inc.
macos_team: "💻 Workstations"
ios_team: "📱🏢 Company-owned iPhones"
ipados_team: "🔳🏢 Company-owned iPads"
Apple Business Manager settings can only be configured for all teams (
org_settings).
volume_purchasing_program
locationis the name of the location in the Apple Business Manager account.teamsis a list of team names. If you choose specific teams, App Store apps in this VPP account will only be available to install on hosts in these teams. If not specified, App Store apps are available to install on hosts in all teams.
Example
org_settings:
mdm:
volume_purchasing_program: # Available in Fleet Premium
- location: Fleet Device Management Inc.
teams:
- "💻 Workstations"
- "💻🐣 Workstations (canary)"
- "📱🏢 Company-owned iPhones"
- "🔳🏢 Company-owned iPads"
Can only be configured for all teams (org_settings).
end_user_authentication
The end_user_authentication section lets you define the identity provider (IdP) settings used for end user authentication during Automated Device Enrollment (ADE). Learn more about end user authentication in Fleet here.
Once the IdP settings are configured, you can use the controls.macos_setup.enable_end_user_authentication key to control the end user experience during ADE.
idp_nameis the human-friendly name for the identity provider that will provide single sign-on authentication (default:"").entity_idis the entity ID: a Uniform Resource Identifier (URI) that you use to identify Fleet when configuring the identity provider. It must exactly match the Entity ID field used in identity provider configuration (default:"").metadatais the metadata (in XML format) provided by the identity provider. (default:"")metadata_urlis the URL that references the identity provider metadata. Only one ofmetadataormetadata_urlis required (default:"").
Can only be configured for all teams (org_settings).
end_user_authentication
The end_user_authentication section lets you define the identity provider (IdP) settings used for end user authentication during Automated Device Enrollment (ADE). Learn more about end user authentication in Fleet here.
Once the IdP settings are configured, you can use the controls.macos_setup.enable_end_user_authentication key to control the end user experience during ADE.
idp_nameis the human-friendly name for the identity provider that will provide single sign-on authentication (default:"").entity_idis the entity ID: a Uniform Resource Identifier (URI) that you use to identify Fleet when configuring the identity provider. It must exactly match the Entity ID field used in identity provider configuration (default:"").metadatais the metadata (in XML format) provided by the identity provider. (default:"")metadata_urlis the URL that references the identity provider metadata. Only one ofmetadataormetadata_urlis required (default:"").
Can only be configured for all teams (org_settings).