This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Installing Policy Workbench

Steps to install Policy Workbench.

    Before installing Policy Workbench, ensure that the prerequisites are met. For more information about the prerequisites, refer to the section Prerequisites for Installing the Policy Workbench.

    To install Policy Workbench, first provision the AWS resources using the policy-workbench OpenTofu module and then deploy the Policy Workbench using Helm. The policy-workbench OpenTofu module is published to the Protegrity Container Registry and must be consumed from a root module. A root module is the working directory for executing the OpenTofu commands.

    For more information about OpenTofu modules and the root module, refer to the section Modules in the OpenTofu documentation.

    The Policy Workbench is installed depending on one of the following scenarios:

    • Root module is not available.
    • Root module is available.

    Installing Policy Workbench when root module is not available

    Install the Policy Workbench using the following commands:

    1. Run the following command to create the deployment directory.
    # must install from an empty directory
    mkdir policy-workbench && cd policy-workbench
    
    1. Create a root module with a single main.tf file.
    terraform {
      required_version = ">= 1.10.0"
    
      required_providers {
        aws = {
          source  = "registry.opentofu.org/hashicorp/aws"
          version = ">= 5.0"
        }
      }
    }
    
    
    module "policy_workbench" {
      source = "oci://<Container_Registry_Path>/policy-workbench/<major.minor>/opentofu/modules/policy-workbench?tag=<version>"
    
      cluster_name = var.cluster_name
    }
    
    
    variable "cluster_name" {
      type        = string
      description = "EKS cluster name."
      nullable    = false
    
      validation {
        condition     = length(trimspace(var.cluster_name)) > 0
        error_message = "cluster_name must be provided and cannot be empty."
      }
    }
    

    In the main.tf file, specify the values of the following variables.

    Variable NameDescriptionValue
    <Container_Registry_Path>Location of the Protegrity Container Registry or the local repository where the policy-workbench OpenTofu module is published.
    • registry.protegrity.com:9443 if Protegrity Container Registry is used.
    • local repository endpoint if a local repository is used.
    <major.minor>Major and minor version of the Protegrity Policy Manager, as specified in the product part number. Obtain the product part number from the Policy Manager Readme.1.11
    <version>Tag version of the Protegrity Policy Manager.1.11.0
    1. Perform the following steps to configure the credentials to install the Policy Workbench from the Protegrity Container Registry.

      a. Run the following command to create the configuration directory.

      mkdir -p ~/.config/containers
      

      b. Obtain the username and access token from the My.Protegrity portal. For more information about obtaining the credentials from the My.Protegrity portal, refer to the section Configuring Authentication for Protegrity AI Team Edition.

      c. Generate base64 encoded string with padding for username:accesstoken obtained from the My.Protegrity portal.

      Ensure that you specify the username and access token within single quotes when generating the base64 encoded value. For example, 'username:accesstoken'.

      d. Create a file named ~/.config/containers/auth.json with the following content.

        {
            "auths": {
                    "registry.protegrity.com:9443": {
                            "auth": "<base64 generated string from step-3c>"
                    }
            }
    }
    
    1. Run the following command to navigate to the deployment directory.

      cd policy-workbench
      
    2. Run the following commands to plan and install the Policy Workbench OpenTofu module.

    # init, plan, and install
    tofu init
    tofu plan -var="cluster_name=<PPC-cluster-name>"
    tofu apply -var="cluster_name=<PPC-cluster-name>"
    

    In the cluster_name field, specify the name of the PPC cluster that you have specified in step 1 while deploying the PPC.

    For more information about deploying the PPC, refer to the section Deploying PPC.

    OpenTofu prints the plan and prompts for confirmation. Enter yes to proceed. To skip the prompt, add the -auto-approve option to the commands.

    1. Run the following command to install the Policy Workbench using Helm.
    helm upgrade --install policy-workbench \
      oci://<Container_Registry_Path>/policy-workbench/<major.minor>/helm/policy-workbench \
      --set karpenterResources.nodeClass.amiId="<ami-id>" \
      --version <version> \
      --namespace policy-workbench \
      --create-namespace
    

    In the command, specify the values of the following variables.

    Variable NameDescriptionValue
    <Container_Registry_Path>Location of the Protegrity Container Registry or the local repository where the policy-workbench OpenTofu module is published.
    • registry.protegrity.com:9443 if Protegrity Container Registry is used.
    • local repository endpoint if a local repository is used.
    <major.minor>Major and minor version of the Protegrity Policy Manager, as specified in the product part number. Obtain the product part number from the Policy Manager Readme.1.11
    <version>Tag version of the Protegrity Policy Manager.1.11.0

    Important: You need to pass the in the command only if you are deploying the feature in regions other than us-east-1.

    Option A (Recommended): Run the following AWS CLI command to retrieve the AMI ID dynamically.

    ```
    aws ssm get-parameter \
      --name /aws/service/bottlerocket/aws-k8s-1.34/x86_64/latest/image_id \
      --region <region> \
      --query "Parameter.Value" \
      --output text
    ```
    

    Alternatively, refer to these example AMI IDs.

    Option B: The following table provides the list of AMI IDs.

    RegionAMI ID
    ap-south-1ami-07959c05dcdb79a72
    eu-north-1ami-0268b0bfff0f25d31
    eu-west-3ami-0ea9454aef60045a2
    eu-west-2ami-0d5eee57a6a1398a3
    eu-west-1ami-00a8d14029b60a028
    ap-northeast-3ami-0e495c3ffd416c65e
    ap-northeast-2ami-0fc18a24aec719c1c
    ap-northeast-1ami-00ec85b83bf713aac
    ca-central-1ami-03891f0d8b41eb296
    sa-east-1ami-0a30f044a5781b4e0
    ap-southeast-1ami-0ae51324bf2e89725
    ap-southeast-2ami-0ef7e8095b163dc42
    eu-central-1ami-00e36131a0343c374
    us-east-2ami-0e486911b2d0a5f7e
    us-west-1ami-01183e1261529749e
    us-west-2ami-04f850c412625dfe6
    1. Run the following command to view the pods created in the policy-workbench namespace.
    kubectl get pods -n policy-workbench
    

    The following output appears.

    NAME                        READY   STATUS    RESTARTS   AGE
    bootstrap-bffb4b5d9-v6ww4   1/1     Running   0          13m
    cert-7b88dcd84-zx7cv        1/1     Running   0          13m
    devops-75755d87d4-qw9n6     1/1     Running   0          13m
    hubcontroller-0             1/1     Running   0          13m
    kmgw-0                      1/1     Running   0          13m
    mbs-6b7dc765dd-brrfk        1/1     Running   0          13m
    repository-0                1/1     Running   0          13m
    rpproxy-79fc498d8-qp4fz     1/1     Running   0          13m
    rpproxy-79fc498d8-s9k5p     1/1     Running   0          13m
    rpproxy-79fc498d8-tbdtb     1/1     Running   0          13m
    rps-8d79b7d98-svhdw         1/1     Running   0          13m
    

    Installing Policy Workbench when root module is available

    Install the Policy Workbench using the following commands:

    1. Add the policy-workbench OpenTofu module by adding the following code block to an existing root module.
    module "policy_workbench" {
      source = "oci://<Container_Registry_Path>/policy-workbench/<major.minor>/opentofu/modules/policy-workbench?tag=<version>"
    
      cluster_name = "<PPC-cluster-name>"
    }
    
    variable "cluster_name" {
      type        = string
      description = "EKS cluster name."
      nullable    = false
    
      validation {
        condition     = length(trimspace(var.cluster_name)) > 0
        error_message = "cluster_name must be provided and cannot be empty."
      }
    }
    

    For more information about adding a module to an existing root module, refer to the section Module Blocks in the OpenTofu documentation.

    In the root module, specify the values of the following variables.

    Variable NameDescriptionValue
    <Container_Registry_Path>Location of the Protegrity Container Registry or the local repository where the policy-workbench OpenTofu module is published.
    • registry.protegrity.com:9443 if Protegrity Container Registry is used.
    • local repository endpoint if a local repository is used.
    <major.minor>Major and minor version of the Protegrity Policy Manager, as specified in the product part number. Obtain the product part number from the Policy Manager Readme.1.11
    <version>Tag version of the Protegrity Policy Manager.1.11.0

    In the cluster_name field, specify the name of the PPC cluster that you have specified in step 1 while deploying the PPC.

    For more information about deploying the PPC, refer to the section Deploying PPC.

    1. If the root module does not include the hashicorp/aws provider version >= 5.0, then add the following code block to the terraform {} block. Else navigate to the next step.
    required_providers {
      aws = {
        source  = "registry.opentofu.org/hashicorp/aws"
        version = ">= 5.0"
      }
    }
    

    For more information about including the hashicorp/aws provider in the root module, refer to the OpenTofu Registry documentation.

    1. Perform the following steps to configure the credentials to install the Policy Workbench from the Protegrity Container Registry.

      a. Run the following command to create the configuration directory.

      mkdir -p ~/.config/containers
      

      b. Obtain the username and access token from the My.Protegrity portal. For more information about obtaining the credentials from the My.Protegrity portal, refer to the section Configuring Authentication for Protegrity AI Team Edition.

      c. Generate base64 encoded string with padding for username:accesstoken obtained from the My.Protegrity portal.

      Ensure that you specify the username and access token within single quotes when generating the base64 encoded value. For example, 'username:accesstoken'.

      d. Create a file named ~/.config/containers/auth.json with the following content.

        {
            "auths": {
                    "registry.protegrity.com:9443": {
                            "auth": "<base64 generated string from step-3c>"
                    }
            }
    }
    
    1. Navigate to the directory containing the root module.

    2. Run the following commands to plan and install the Policy Workbench OpenTofu module.

    # init, plan, and install
    tofu init
    tofu plan -var="cluster_name=<PPC-cluster-name>"
    tofu apply -var="cluster_name=<PPC-cluster-name>"
    

    OpenTofu prints the plan and prompts for confirmation. Enter yes to proceed. To skip the prompt, add the -auto-approve option to the commands.

    In the cluster_name field, specify the name of the PPC cluster that you have specified in step 1 while deploying the PPC.

    For more information about deploying the PPC, refer to the section Deploying PPC.

    1. Run the following command to install the Policy Workbench using Helm.
    helm upgrade --install policy-workbench \
      oci://<Container_Registry_Path>/policy-workbench/<major.minor>/helm/policy-workbench \
      --set karpenterResources.nodeClass.amiId="<ami-id>" \
      --version <version> \
      --namespace policy-workbench \
      --create-namespace
    

    In the command, specify the values of the following variables.

    Variable NameDescriptionValue
    <Container_Registry_Path>Location of the Protegrity Container Registry or the local repository where the policy-workbench OpenTofu module is published.
    • registry.protegrity.com:9443 if Protegrity Container Registry is used.
    • local repository endpoint if a local repository is used.
    <major.minor>Major and minor version of the Protegrity Policy Manager, as specified in the product part number. Obtain the product part number from the Policy Manager Readme.1.11
    <version>Tag version of the Protegrity Policy Manager.1.11.0

    Important: You need to pass the in the command only if you are deploying the feature in regions other than us-east-1.

    Option A (Recommended): Run the following AWS CLI command to retrieve the AMI ID dynamically.

    ```
    aws ssm get-parameter \
      --name /aws/service/bottlerocket/aws-k8s-1.34/x86_64/latest/image_id \
      --region <region> \
      --query "Parameter.Value" \
      --output text
    ```
    

    Alternatively, refer to these example AMI IDs.

    Option B: The following table provides the list of AMI IDs.

    RegionAMI ID
    ap-south-1ami-07959c05dcdb79a72
    eu-north-1ami-0268b0bfff0f25d31
    eu-west-3ami-0ea9454aef60045a2
    eu-west-2ami-0d5eee57a6a1398a3
    eu-west-1ami-00a8d14029b60a028
    ap-northeast-3ami-0e495c3ffd416c65e
    ap-northeast-2ami-0fc18a24aec719c1c
    ap-northeast-1ami-00ec85b83bf713aac
    ca-central-1ami-03891f0d8b41eb296
    sa-east-1ami-0a30f044a5781b4e0
    ap-southeast-1ami-0ae51324bf2e89725
    ap-southeast-2ami-0ef7e8095b163dc42
    eu-central-1ami-00e36131a0343c374
    us-east-2ami-0e486911b2d0a5f7e
    us-west-1ami-01183e1261529749e
    us-west-2ami-04f850c412625dfe6
    1. Run the following command to view the pods created in the policy-workbench namespace.
    kubectl get pods -n policy-workbench
    

    The following output appears.

    NAME                        READY   STATUS    RESTARTS   AGE
    bootstrap-bffb4b5d9-v6ww4   1/1     Running   0          13m
    cert-7b88dcd84-zx7cv        1/1     Running   0          13m
    devops-75755d87d4-qw9n6     1/1     Running   0          13m
    hubcontroller-0             1/1     Running   0          13m
    kmgw-0                      1/1     Running   0          13m
    mbs-6b7dc765dd-brrfk        1/1     Running   0          13m
    repository-0                1/1     Running   0          13m
    rpproxy-79fc498d8-qp4fz     1/1     Running   0          13m
    rpproxy-79fc498d8-s9k5p     1/1     Running   0          13m
    rpproxy-79fc498d8-tbdtb     1/1     Running   0          13m
    rps-8d79b7d98-svhdw         1/1     Running   0          13m
    

    Validating the deployment

    Note: Before validating the deployment of the Policy Workbench, ensure that the kubectl context is set to the target PPC cluster. Run kubectl config current-context to verify the current context. Run kubectl config use-context <context-name> to switch the context.

    After installation, validate the Policy Workbench deployment using the following steps. The desired outcome of these steps is to get a [] response from the datastores API call using a dedicated workbench user.

    1. Run the following command to retrieve the gateway host details.
    export GW_HOST="$(kubectl get gateway pty-main -n api-gateway -o jsonpath='{.status.addresses[0].value}')"
    
    1. Run the following command to generate the JWT token.
    TOKEN=$(curl -k -s "https://$GW_HOST/api/v1/auth/login/token" \
      -X POST \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      -d "loginname=admin" \
      -d "password=Admin123!" \
      -D - -o /dev/null 2>&1 \
      | grep -i 'pty_access_jwt_token:' \
      | sed 's/pty_access_jwt_token: //' \
      | tr -d '\r') && echo "${TOKEN:0:10}"
    
    1. Create a workbench user using the following command. Due to separation of duties, the datastores API requires a user with workbench roles.
    curl -sk -X POST "https://$GW_HOST/pty/v1/auth/users" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "username": "workbench",
        "password": "Admin123!",
        "roles": [
          "workbench_administrator"
        ]
      }'
    

    The following output appears.

    {"user_id":"397beecc-87bb-404e-85bb-f8a6d83984d6","username":"workbench"}
    

    Use the JWT token generated in step 2.

    1. Ensure that the user with the workbench_administrator roles has the following permissions:
    • workbench_management_policy_write
    • workbench_deployment_immutablepackage_export
    • workbench_deployment_certificate_export
    • cli_access
    • can_create_token

    To ensure the required permissions, run the following command:

    curl -sk -X PUT "https://$GW_HOST/pty/v1/auth/roles" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "workbench_administrator",
        "permissions": [
          "workbench_management_policy_write",
          "workbench_deployment_immutablepackage_export",
          "workbench_deployment_certificate_export",
          "cli_access",
          "can_create_token"
        ]
      }'
    

    The following output appears.

    {"role_name":"workbench_administrator","status":"updated"}
    

    For more information about the workbench_administrator permissions, refer to the section Workbench Roles and Permissions.

    For more information about the cli_access and can_create_token permissions, refer to the section Roles and Permissions.

    1. Run the following command to get a token for the workbench user.
    export TOKEN=$(curl -k -s https://$GW_HOST/pty/v1/auth/login/token \
      -X POST \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      -d 'loginname=workbench' \
      -d 'password=Admin123!' \
    -D - -o /dev/null 2>&1 | grep -i 'pty_access_jwt_token:' | sed 's/pty_access_jwt_token: //' | tr -d '\r')
    
    1. Run the Policy Management REST API to get datastores. Use the JWT token generated in step 4.
    curl -k -v https://$GW_HOST/pty/v2/pim/datastores -H "Authorization: Bearer $TOKEN"
    

    The expected output is []. This indicates that the Policy Workbench is initialized but the datastore is not yet created.