Rego Packages
Rego Packages let you define shared Rego helper functions and data sets once and import them into any number of governance policies. When a package is updated, every policy that imports it automatically uses the new logic at its next evaluation — no per-policy edits required.
This is useful whenever the same logic needs to be enforced across multiple policies: tag validation helpers, approved resource lists, account classification rules, and similar shared constructs.
How Rego Packages Work
Each package is a named module of Rego code stored under the firefly.packages namespace. A package named tag_validator is imported in a policy as:
import data.firefly.packages.tag_validatorAt policy evaluation time, Firefly resolves all imported packages automatically. The latest version of each package is always used; there is no need to re-save a policy when a package is updated.
Package Naming Rules
Package names must be valid Rego identifiers:
Start with a letter (
a–z,A–Z) or underscore (_)Followed by any combination of letters, digits, or underscores
Maximum 128 characters
Must be unique within your account
aws_helpers
aws.helpers (dot not allowed)
IamChecks
123check (starts with digit)
tag_validator
my-pkg (hyphen not allowed)
_internal
http.send (dot not allowed)
Note: Package names cannot be changed after a package is created.
Package Code Constraints
Package code is a standalone Rego module. It must follow these rules:
package declaration
Must not be included — Firefly injects it automatically
import statements
Must not be included — packages are standalone and cannot import other packages
Restricted built-ins
http.send and opa.runtime are not permitted
Maximum size
50 KB
Maximum line length
1,000 characters per line
Valid Rego
Code must compile as valid OPA Rego
The Rego editor validates your code in real time as you type, so you can catch errors before saving.
Managing Packages
Viewing Your Packages
Navigate to Governance and select Policy Packages from the menu. The list page shows all packages for your account, with columns for name and description. You can search by name or description using the search bar.
Creating a Package
On the Policy Packages page, click the Add Policy Package button (top right).
In the Package Details section:
Package Name (required) — enter a name that follows the naming rules above. This cannot be changed after the package is created.
Description (optional) — a plain-text description of what the package provides.
In the Rego Code section, write your package logic in the editor. Do not include a
packagedeclaration or anyimportstatements.The editor validates your code in real time. A ✓ Rego code is valid indicator appears when the code compiles successfully.
Click Create. A confirmation message confirms the package was saved and you are returned to the package list.
Example package code — a set of tag validation helpers:
Editing a Package
On the Policy Packages page, click the row actions menu (⋮) next to the package and select Edit.
Update the description or Rego code as needed. The package name cannot be changed.
Click Save. All policies that import this package will use the updated code at their next evaluation — no changes to those policies are required.
Deleting a Package
On the Policy Packages page, click the row actions menu (⋮) next to the package and select Delete, or use the Delete button on the package edit page.
Confirm the deletion in the dialog that appears.
Warning: Deleting a package is immediate and permanent. If any policies still contain an
import data.firefly.packages.<name>statement for the deleted package, those policies will fail to compile at their next evaluation. Remove the import from any referencing policies before deleting a package.
Using Packages in Policies
Adding an Import
To use a package in a policy, add an import statement at the top of the policy's Rego code, after any existing imports:
Replace <package_name> with the exact name of the package you want to use. You must add this import to each policy that needs the package.
Using Package Functions in Policy Rules
Once the import is in place, call the package's functions or reference its data using the package name as a prefix:
Import Validation
As you edit a policy's Rego code, Firefly automatically validates that every import data.firefly.packages.* statement refers to a package that exists in your account. If a referenced package is not found, a warning is shown in the editor. This check runs automatically as you type.
Required Permissions
View the package list or a specific package
governance:read
Create a package
governance:create
Edit a package
governance:update
Delete a package
governance:delete
For information on configuring roles and permissions, see Access Management (RBAC).
Last updated
Was this helpful?