Skip to content

Policy

The RCTL utility provides the means to manage/automate the lifecycle of OPA Gatekeeper. The following operations can be performed on OPA Gatekeeper for projects within an organization.

Resource Create Get Apply Update Delete
OPA Installation Profile(s) YES YES YES NO YES
OPA Constraint Template(s) YES YES YES YES YES
OPA Constraint(s) YES YES YES YES YES
OPA Policies YES YES YES NO YES

Create Installation Profile

Run the below command to create a OPA Installation Profile using the spec yaml file

./rctl apply -f profile_filename.yaml

An illustrative example of the profile spec YAML file is shown below

apiVersion: opa.k8smgmt.io/v3
kind: OPAProfile
metadata:
  name: example-profile
  project: defaultproject
spec:
  opaVersion: 3.14.0
  excludedNamespaces:
  - namespaces:
    - name: alert-test
    processes:
    - '*'
  installationParams:
    auditFromCache: true
    auditInterval: 90
    auditMatchKindOnly: true
    constraintViolationsLimit: 30
  sharing:
    enabled: true
    projects:
    - name: project-1
    - name: project-2
  syncObjects:
  - group: r
    kind: Pod
    version: v1
  version: example-version

Create OPA Constraint Template

Use the below command to create a OPA Constraint Template

./rctl create opaconstrainttemplate -f <constrainttemplate_filename.yml>

Constraint Template Spec from Git Repo

An illustrative example of the OPA Constraint Template spec YAML file from Git Repo is shown below. The paths parameters identifies the Git Repository and the file path

apiVersion: opa.k8smgmt.io/v3
kind: OPAConstraintTemplate
metadata:
  labels:
    rafay.dev/opa: template
  name: demo-replica-constrainttemplate
  project: defaultproject
spec:
  artifact:
    artifact:
      paths:
      - name: library/general/replicalimits/template.yaml
      repository: demo-git-opa
      revision: master
    type: Yaml

Constraint Template Spec via upload

An illustrative example of the OPA Constraint Template spec YAML file via upload is shown below. The paths parameters identifies the file path

apiVersion: opa.k8smgmt.io/v3
kind: OPAConstraintTemplate
metadata:
  labels:
    rafay.dev/opa: template
  name: demo-k8scontainerlimits
  project: defaultproject
spec:
  artifact:
    artifact:
      paths:
      - name: file://artifacts/example-template/template.yaml
    options: {}
    type: Yaml

Important

The prefix file:// is mandatory for upload artifacts and the path should be relative to the parent file path


Create OPA Constraint

Use the below command to create a OPA Constraint

./rctl create opaconstraint -f <constraint_filename.yml>

Constraint Spec from Git Repo

An illustrative example of the OPA Constraint spec YAML file from Git Repo is shown below. The paths parameters identifies the Git Repository and the file path

apiVersion: opa.k8smgmt.io/v3
kind: OPAConstraint
metadata:
  labels:
    rafay.dev/opa: constraint
  name: demo-replica-constraint
  project: defaultproject
spec:
  artifact:
    artifact:
      paths:
      - name: library/general/replicalimits/demo/replicalimits/constraint.yaml
      repository: demo-git-opa
      revision: master
    type: Yaml
  published: true
  templateName: demo-replica-constrainttemplate
  version: v1

Constraint Spec via upload

An illustrative example of the OPA Constraint spec YAML file via upload is shown below. The paths parameters identifies the file path

apiVersion: opa.k8smgmt.io/v3
kind: OPAConstraint
metadata:
  labels:
    rafay.dev/opa: constraint
  name: demo-k8scontainerlimits-constraints
  project: defaultproject
spec:
  artifact:
    artifact:
      paths:
      - name: file://artifacts/example-constraint/constraint.yaml
    options: {}
    type: Yaml
  published: true
  templateName: demo-k8scontainerlimits
  version: v1

Important

The prefix file:// is mandatory for upload artifacts and the path should be relative to the parent file path


Create OPA Policies

Use the below command to create a OPA Policy

./rctl create opapolicy -f <policy_file.yml>

An illustrative example of the OPA Policy spec YAML file is given below

apiVersion: opa.k8smgmt.io/v3
kind: OPAPolicy
metadata:
  name: example-policy
  project: defaultproject
spec:
  constraintList:
  - name: constraint-1
    version: v1
  - name: constraint-2
    version: v2
  sharing:
    enabled: true
    projects:
    - name: project-1
    - name: project-2
  version: v2

OPA Gatekeeper Policy in Blueprint

Once OPA Gatekeeper installation profiles and policies are creates, users can deploy them via blueprint spec yaml. An illustrative example of the blueprint spec YAML is shown below.

apiVersion: infra.k8smgmt.io/v3
kind: Blueprint
metadata:
  name: example-blueprint
  project: defaultproject
spec:
  base:
    name: default
    version: 1.17.0
  defaultAddons:
    csiSecretStoreConfig:
      providers: {}
    enableIngress: true
    enableLogging: false
    enableMonitoring: true
    enableVM: false
  drift:
    enabled: false
  networkPolicy: {}
  opaPolicy:
    opaPolicy:
    - name: test-policy1
      version: v1
    - name: test-policy2
      version: v3
    profile:
      name: test-profile
      version: v1
  placement: {}
  sharing:
    enabled: false
  version: v3-test

List OPA Installation Profiles

Use this command to retrieve the list of OPA Installation Profiles in the configured Project. An illustrative example is shown below where RCTL retrieves the list of profiles.

./rctl get opaprofile

+-----------------------+---------+
| PROFILE NAME          | VERSION |
+-----------------------+---------+
| initial-am-policy1-v1 | v4      |
+-----------------------+---------+
| test-opa              | v1      |
+-----------------------+---------+

Get Specific OPA Installation Profile

Below is an example to retrieve a specific OPA Constraint Template

./rctl get opaprofile test-opa
+--------------+---------+
| PROFILE NAME | VERSION |
+--------------+---------+
| test-opa     | v1      |
+--------------+---------+

List OPA Constraint Templates

Use this command to retrieve the list of OPA Constraint Templates in the configured Project. An illustrative example is shown below where RCTL retrieves the list of constraint templates (both from Git Repo and upload)

./rctl get opaconstrainttemplate
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+
| CONSTRAINT TEMPLATE NAME       | ARTIFACT TYPE | ARTIFACT FILES                                                                                      | REPOSITORY  |
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+
| k8srequiredlabels              | Yaml          | paths:{name:"file://artifacts/k8srequiredlabels/k8srequiredlabels_contrainttemplate.yaml"}          |             |
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+
| demo-1                         | Yaml          | demo-files/constrainttemplates/artifacts/two/gatekeeper-allowedrepos-constraint-template-regex.yaml | ankit-opa   |
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+
| demo-replica-constrainttemplate| Yaml          | library/general/replicalimits/template.yaml                                                         | demo-git-opa |
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+
| demo-k8scontainerlimits        | Yaml          | paths:{name:"file://artifacts/demo-k8scontainerlimits/k8scontainerlimits_contrainttemplate.yaml"}    |             |
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+

Get Specific OPA Constraint Template

Below is an example to retrieve a specific OPA Constraint Template

./rctl get opaconstrainttemplate k8srequiredlabels
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+
| CONSTRAINT TEMPLATE NAME       | ARTIFACT TYPE | ARTIFACT FILES                                                                                      | REPOSITORY  |
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+
| k8srequiredlabels              | Yaml          | paths:{name:"file://artifacts/k8srequiredlabels/k8srequiredlabels_contrainttemplate.yaml"}          |             |
+--------------------------------+---------------+-----------------------------------------------------------------------------------------------------+-------------+

List OPA Constraints

Use this command to retrieve the list of OPA Constraints in the configured Project. An illustrative example is shown below where RCTL retrieves the list of constraints (both from Git Repo and upload)

./rctl get opaconstraint                                          
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| CONSTRAINT NAME                    | ARTIFACT TYPE | ARTIFACT FILES                                                                                        | REPOSITORY  |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| k8srequiredlabels-constraints      | Yaml          | paths:{name:"file://artifacts/k8srequiredlabels-constraints/k8srequiredlabels_contraints.yaml"}       |             |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| demo-1                              | Yaml          | demo-files/constraints/artifacts/two/gatekeeper-allowedrepos-policy-constraint.yaml                   | ankit-opa   |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| demo-label-crd                    | Yaml          | paths:{name:"file://artifacts/ankit-label-crd/crd-constraint.yaml"}                                   |             |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| k8srequiredlabels-pod              | Yaml          | paths:{name:"file://artifacts/k8srequiredlabels-pod/k8srequiredlabels_contraints_pod.yaml"}           |             |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| demo-k8scontainerlimits-constraints | Yaml          | paths:{name:"file://artifacts/demo-k8scontainerlimits-constraints/k8scontainerlimits_contraints.yaml"} |             |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| demo-replica-constraint             | Yaml          | library/general/replicalimits/samples/replicalimits/constraint.yaml                                   | demo-git-opa |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+

Get Specific OPA Constraint

Below is an example to retrieve a specific OPA Constraint

./rctl get opaconstraint k8srequiredlabels-constraints
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| CONSTRAINT NAME                    | ARTIFACT TYPE | ARTIFACT FILES                                                                                        | REPOSITORY  |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+
| k8srequiredlabels-constraints      | Yaml          | paths:{name:"file://artifacts/k8srequiredlabels-constraints/k8srequiredlabels_contraints.yaml"}       |             |
+------------------------------------+---------------+-------------------------------------------------------------------------------------------------------+-------------+

List OPA Policies

Use this command to retrieve the list of OPA Policies in the configured Project. An illustrative example is shown below where RCTL retrieves the list of policies

./rctl get opapolicy
+--------------+-----------------------------+--------------------------------------+
| POLICY NAME  | VERSION NAME                | CONSTRAINTS                          |
+--------------+-----------------------------+--------------------------------------+
| demo-policy  | v3-pod                      | k8srequiredlabels-pod                |
+--------------+-----------------------------+--------------------------------------+
| demo1        | v1                          | k8srequiredlabels-constraints        |
+--------------+-----------------------------+--------------------------------------+
| demo-policy-2| v1-container-replica-labels | k8srequiredlabels-constraints        |
|              |                             | demo-k8scontainerlimits-constraints  |
|              |                             | demo-replica-constraint              |
+--------------+-----------------------------+--------------------------------------+

Get Specific OPA Policy

Below is an example to retrieve a specific OPA Policy

./rctl get opapolicy demo-policy
+--------------+-----------------------------+------------------------------------+
| POLICY NAME  | VERSION NAME                | CONSTRAINTS                        |
+--------------+-----------------------------+------------------------------------+
| demo-policy  | v3-pod                      | k8srequiredlabels-pod              |
+--------------+-----------------------------+------------------------------------+

Apply Command

Based on the configuration details specified in the yaml file, the Apply command helps to create the required resource(s) in the UI using a YAML file.

./rctl apply -f <opa-file.yaml>

Update Commands

OPA Constraint Template

Use the below command to update the OPA Constraint Template changes made to the spec YAML file

./rctl update opaconstrainttemplate -f <updated-constrainttemplate.yaml>

OPA Constraint

Use the below command to update the OPA Constraints changes made to the spec YAML file

./rctl update opaconstraint -f <updated-constraint.yaml>

Delete Commands

You can use both imperative and declarative methods to delete OPA Constraints, Constraint Templates and Policies

Imperative

OPA Installation Profile

Use the below command to delete a OPA Constraint Template

./rctl delete opaprofile <profile_name>

OPA Constraint Template

Use the below command to delete a OPA Constraint Template

./rctl delete opaconstrainttemplate <constrainttemplate_name>

OPA Constraint

Use the below command to delete a OPA Constraint

./rctl delete opaconstraint <constraint_name>

OPA Policy

Use the below command to delete a OPA Policy

./rctl delete opapolicy <policy_name>

Declarative

OPA Installation Profile

Use the below command to delete a OPA Constraint Template

./rctl delete opaprofile <opaprofilefile.yaml>

OPA Constraint Template

Use the below command to delete a OPA Constraint Template

./rctl delete opaconstrainttemplate <constrainttemplatefile.yaml>

OPA Constraint

Use the below command to delete a OPA Constraint

./rctl delete opaconstraint <constraintfile.yaml>

OPA Policy

Use the below command to delete a OPA Policy

./rctl delete opapolicy <policyfile.yaml>