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>