The Infrastructure section covers the deployment and operational layer that underpins AI Team Edition. At its core is the Protegrity Provisioned Cluster (PPC), a unified runtime environment where all AI Team Edition services are packaged, delivered, and managed as a cohesive system.
PPC abstracts away the complexity of standing up interconnected security services, giving administrators a single deployment target regardless of the underlying cloud provider. Rather than configuring each service individually, teams work with a pre-integrated cluster that enforces consistent networking, access control, and observability from the start.
This section guides you through cluster provisioning, credential management, certificate lifecycle, troubleshooting, and related operational tasks.
The documentation in this section is for PPC v1.1.0. To refer to the earlier version of the documentation, refer to the PPC documentation.
1 - Preparing for Protegrity AI Team Edition
Prerequisites for setting up the Protegrity AI Team Edition.
Ensure that the following prerequisites are met. If a feature is not required, skip the requirements in that section.
Infrastructure
Prerequisites for Protegrity Provisioned Cluster (PPC)
2 - Configuring Authentication for Protegrity AI Team Edition
Instructions for configuring authentication, certificates, and registry access required to pull AI Team Edition artifacts.
Log into My.Protegrity and obtain the necessary credentials and certificates. This portal hosts all products and features included in your Protegrity contract.
Deploy Using PCR
Use the steps provided here for deploying PPC and the features directly from the PCR.
Navigate to Product Management > Explore Products > AI Team Edition > Setup & Credentials.
Create an access token to obtain the Username and Secret. Store these credentials carefully, they are required for connecting to https://registry.protegrity.com:9443 and performing registry operations.
Click Access Tokens.
Click Create Access Token.
Click Export To File to save the credentials.
Click I Understand That I Cannot See This Again.
Deploy to Own Registry
Use the steps provided here for pulling the artifacts from PCR and deploying PPC and the features to the organization-hosted registry using standard authentication.
Prerequisites:
For ECR: Ensure that the required AWS credentials are available and set.
Ensure that the jumpbox has connectivity to the Protegrity Container Registry (PCR) and your container registry.
Ensure that the user logged in to the jumpbox is the root user or has sudoer access.
Ensure that the following tools are installed:
docker or podman: Must be installed and running. If podman is used, identify the podman directory and create a symbolic link to docker using the following commands:
which podman
ln -s /bin/podman /bin/docker
helm: Kubernetes package manager used to pull and manage Helm charts required for deploying Protegrity AI Team Edition components from an OCI‑compliant registry. Helm v3+ must be installed.
curl: Command‑line HTTP client used by the pull scripts to interact with OCI Distribution APIs, including making authenticated requests to the Protegrity Container Registry.
jq: Lightweight JSON processor used to parse and extract information from the artifacts.json file that defines the set of artifacts to be pulled and pushed.
oras: OCI Registry As Storage (ORAS) client used to pull non‑container, generic OCI artifacts from the registry that are not handled by standard container tooling.
Run the following command to confirm readiness before proceeding:
docker --version && helm version && oras version && jq --version && curl --version
Navigate to Product Management > Explore Products > AI Team Edition > Setup & Credentials.
Create an access token to obtain the Username and Secret.
Note: Store these credentials carefully, they are required for performing registry operations.
Click Access Tokens.
Click Create Access Token.
Click Export To File to save the credentials.
Click I Understand That I Cannot See This Again.
Obtain the artifacts for setting up the AI Team Edition.
From the Product Management > Explore Products > AI Team Edition > Setup & Credentials page of the My.Protegrity portal, click Download Pull Script. A compressed file is downloaded.
Copy the compressed file to an empty directory on the jumpbox.
Extract the compressed file.
The following files are available:
artifacts.json: The list of artifacts that are obtained.
pull_all_artifacts.sh: The script to pull the artifacts from the PCR.
tag_push_artifacts.sh: The script to tag and push the artifacts to your container registry.
Navigate to the extracted directory. Do not update the contents of the artifacts.json file.
Run the pull script to pull the artifacts to your jumpbox using the following command:
Ensure that single quotes are used to specify the username and password in the command.
Validate that all the artifacts are successfully pushed to your registry.
Deploy to Own Registry Using mTLS
This section explains how to set up mTLS authentication when using your own container registry. Perform these steps to establish secure, certificate‑based trust and prevent unauthorized access during image pulls and service communication.
Prerequisites:
For ECR: Ensure that the required AWS credentials are available and set.
Ensure that the jumpbox has connectivity to the Protegrity Container Registry (PCR) and your container registry.
Ensure that the user logged in to the jumpbox is the root user or has sudoer access.
Ensure that the following tools are installed:
docker or podman: Must be installed and running. If podman is used, identify the podman directory and create a symbolic link to docker using the following commands:
which podman
ln -s /bin/podman /bin/docker
helm: Kubernetes package manager used to pull and manage Helm charts required for deploying Protegrity AI Team Edition components from an OCI‑compliant registry. Helm v3+ must be installed.
curl: Command‑line HTTP client used by the pull scripts to interact with OCI Distribution APIs, including making authenticated requests to the Protegrity Container Registry.
jq: Lightweight JSON processor used to parse and extract information from the artifacts.json file that defines the set of artifacts to be pulled and pushed.
oras: OCI Registry As Storage (ORAS) client used to pull non‑container, generic OCI artifacts from the registry that are not handled by standard container tooling.
Run the following command to confirm readiness before proceeding:
docker --version && helm version && oras version && jq --version && curl --version
Create the client certificate to connect to the registry. This step is required only when your security policies mandates mutual TLS (mTLS) for a two-way certificate verification between your environment and the Protegrity Container Registry.
Click Client Certificates.
Click Create Client Certificate.
Click Browse to upload your CSR. Refer to the previous step if you do not have a CSR.
Click Create Client Certificate to generate the client certificate.
From the Client Certificate tab, click Download Client Certificate from the Actions column to download a compressed file with the certificates.
Copy or upload the certificates to the jumpbox.
Warning: Ensure that the same filenames and extensions are used that are provided in the following steps.
Ensure to login to the jumpbox as the root user.
Navigate to the /etc/docker/ directory. For podman, navigate to /etc/containers/.
Create the certs.d directory.
Open the certs.d directory.
Create the registry.protegrity.com directory.
Copy the compressed file with the certificate to the /etc/docker/certs.d/registry.protegrity.com directory. For podman, navigate to /etc/containers/certs.d/registry.protegrity.com.
Extract the compressed file.
The extracted file contains the following certificates:
Copy the client and CA certificates to /etc/docker/certs.d/registry.protegrity.com. For podman, copy the certificates to /etc/containers/certs.d/registry.protegrity.com.
Copy the client.key that was generated to the /etc/docker/certs.d/registry.protegrity.com directory. If the /certs.d/registry.protegrity.com directory does not exist, then create the directories. For podman, use the /etc/containers/certs.d/registry.protegrity.com directory.
Copy the Docker registry’s CA certificate to the system’s trusted CA store to establish SSL/TLS trust for that registry. A sample command for RHEL 10.1 is provided here:
Rebuild the system’s trusted CA bundle. A sample command for RHEL 10.1 is provided here.
update-ca-trust
Restart the container service.
For docker:
service docker restart
For podman:
service podman restart
Obtain the artifacts for setting up the AI Team Edition.
From the Product Management > Explore Products > AI Team Edition > Setup & Credentials page of the My.Protegrity portal, click Download Pull Script. A compressed file is downloaded.
Copy the compressed file to an empty directory on the jumpbox.
Extract the compressed file.
The following files are available:
artifacts.json: The list of artifacts that are obtained.
pull_all_artifacts.sh: The script to pull the artifacts from the PCR.
tag_push_artifacts.sh: The script to tag and push the artifacts to your container registry.
Navigate to the extracted directory. Do not update the contents of the artifacts.json file.
Run the pull script to pull the artifacts to your jumpbox using the following command:
Note: mTLS uses a client certificate and the port 443 to connect to the Protegrity Container Registry. Also, ensure that the certificate files are named as ca.crt, client.cert, and client.key.
Ensure that single quotes are used to specify the username and password in the command.
Run the following command to tag and push the artifacts to your container registry.
Note: Ensure that single quotes are used to specify the username and password in the command.
Validate that all the artifacts are successfully pushed to your registry.
3 - Installing Protegrity Provisioned Cluster
Steps to install PPC on AWS and Azure
The Protegrity Provisioned Cluster (PPC) is the core framework that forms Protegrity AI Team Edition, designed to deliver a modern, cloud-native experience for data security and governance. Built on Kubernetes, PPC uses a containerized architecture that simplifies deployment and scaling. Using OpenTofu scripts and Helm charts, administrators can stand up clusters with minimal manual intervention, ensuring consistency and reducing operational overhead.
PPC introduces a suite of Protegrity Common Services (PCS) that act as the backbone for AI Team Edition features. These include ingress control for secure traffic routing, certificate management for request validation, and robust authentication and authorization services. PPC also integrates Insight for audit logging and analytics, leveraging OpenSearch and OpenDashboards for visualization and compliance reporting. Beyond this foundation, AI Team Edition delivers advanced capabilities such as policy management, anonymization, data discovery, semantic guardrails, and synthetic data generation — all orchestrated within the PPC cluster. This modular approach ensures scalability, security, and flexibility, making PPC a strategic enabler for organizations adopting cloud-first and containerized environments.
Note: It is recommended to install and use AI Team Edition on AWS to test and use all the features. Install and use on Azure to use the fixed set of protectors supported on Azure.
The documentation in this section is for PPC v1.1.0. To refer to the earlier version of the documentation, refer to the PPC documentation.
3.1 - Installing PPC on Amazon Web Services (AWS)
Steps to install PPC on AWS
The Protegrity Provisioned Cluster PPC is the core framework that forms the AI Team Edition. It is designed to deliver a modern, cloud-native experience for data security and governance. Built on Kubernetes, PPC uses a containerized architecture that simplifies deployment and scaling. Using OpenTofu scripts and Helm charts, administrators can create clusters with minimal manual intervention, ensuring consistency and reducing operational overhead.
3.1.1 - Prerequisites
Ensure that the following prerequisites are met before deploying the PPC.
Updating the Roles and Permissions using JSON
The roles and permissions are updated using the JSONs.
From the AWS Console, navigate to IAM > Policies > Create policy > JSON, and create the following JSONs.
Note: Before using the provided JSON, replace the AWS_ACCOUNT_ID and REGION values with those of the account and region where the resources are being deployed.
A newly provisioned EC2 instance must be used as the jump box for PPC deployment.
The jump box must be provisioned in the same AWS region where the PPC cluster will be deployed to ensure proper connectivity and access to regional resources.
Supported operating systems: RHEL 10, Debian 13, or Debian 12.
Note: Ensure to retain the original jump box used for installation. The Terraform state files required for cleaning and upgrading the cluster are available on this jump box. A snapshot of the jump box must be maintained to prevent data loss.
AWS Account Details
A valid AWS account where Amazon EKS is deployed.
The AWS account ID and AWS region must be identified in advance, as all resources are provisioned in the selected region.
Service Quotas
Verify that the AWS account has sufficient service quotas to support the deployment. At a minimum, ensure adequate limits for the following:
EC2 instances based on node group size and instance types.
VPC and networking limits, including subnets, route tables, and security groups.
Elastic IP addresses and Load balancers.
If required, request quota increases through the AWS Service Quotas console before proceeding.
Service Control Policies (SCPs)
The AWS account must not have SCPs that restrict required permissions. In particular, SCPs must not block the following actions:
eks:*
ec2:*
iam:PassRole
Restrictive SCPs may prevent successful cluster creation and resource provisioning.
Virtual Private Cloud (VPC)
An existing VPC must be available in the target AWS region.
The VPC should be configured to support Amazon EKS workloads.
Subnet Requirements
At least two private subnets must be available.
Subnets must be distributed across two or more Availability Zones (AZs).
Creating AWS KMS Key and AWS S3 Bucket
Amazon S3 Bucket: An Amazon S3 bucket is required to store critical data such as backups, configuration artifacts, and restore metadata used during installation and recovery workflows. Using a dedicated AWS S3 bucket helps ensure data durability, isolation, and controlled access during cluster operations.
AWS KMS Key: An AWS KMS customer‑managed key is required to encrypt data stored in the AWS S3 bucket. This ensures that sensitive data is protected at rest and allows customers to manage encryption policies, key rotation, and access control in accordance with their security requirements.
Note: The KMS key must allow access to the IAM roles used by the EKS cluster and related services.
The following section explains how to create AWS KMS Key and AWS S3 Bucket. This can be done from the AWS Web UI or using the script.
Create a KMS key for backup bucket. The KMS key created is referenced during installation and restore using its KMS ARN, and is validated by the installer.
Before you begin, ensure to have:
Access to the AWS account where the KMS key is created.
The KMS key can be in the same AWS account as the AWS S3 bucket, or in a different, cross‑account AWS account.
The user running the installer must have the permission kms:DescribeKey to describe the KMS key. If this permission is unavailable, then installation and restore fails.
The steps to create a KMS key are available at https://docs.aws.amazon.com/. Follow the KMS key creation steps, but ensure to select the following configurations.
On the Key configuration page: Select Key type as Symmetric. Select Key usage as Encrypt and decrypt.
These settings are required for encrypting and decrypting AWS S3 objects used by backup and restore operations.
On the Key Administrative Permissions page, select the users or roles that can manage the key. The key administrators do not automatically get permission to encrypt or decrypt data, unless these permissions are explicitly granted.
On the Define key usage permissions page, grant permissions to the principals that will use the key.
The user or role running the installation and restore must have the permission kms:DescribeKey to describe the key. This permission is mandatory because the installer validates the KMS key before proceeding. Without this, the installation or restore procedure fails, especially in cross‑account KMS scenarios.
On the Edit key policy - optional page, click Edit.
The KMS key policy controls the access to the encryption key and must be applied before creating the AWS S3 bucket.
If you are using AWS SSO IAM Identity Center, ensure that the IAM role ARN specified in the KMS key policy includes the full SSO path prefix: aws-reserved/sso.amazonaws.com/. For example: arn:aws:iam::<ACCOUNT_ID>:role/aws-reserved/sso.amazonaws.com/<SSO_ROLE_NAME> Omitting this path results in KMS key policy creation failures with an InvalidArnException.
The following example shows a key policy that:
Allows the PPC bootstrap user to use the KMS key for cluster creation and backup operations.
Allows the IAM role to encrypt and decrypt EKS backups.
Update the values of the following based on the environment:
DEPLOYMENT_AWS_ACCOUNT - AWS account ID.
CLUSTER_NAME - EKS cluster name.
SSO_OR_IAM_USER_ACCOUNT_ARN - ARN of the IAM role used to run the bootstrap script. The ARN format depends on your authentication method:
IAM role – Use the ARN returned by aws sts get-caller-identity.
AWS SSO (IAM Identity Center) – Convert the session ARN returned by aws sts get-caller-identity to a full IAM role ARN before using it in the KMS key policy.
If you are using AWS SSO (IAM Identity Center), the ARN returned by aws sts get-caller-identity is a session ARN and cannot be used directly in an AWS KMS key policy. AWS KMS requires the full IAM role ARN, including the aws-reserved/sso.amazonaws.com/ path. Without this, KMS key policy creation fails with InvalidArnException.
Retrieving the IAM role ARN for KMS key policy
To identify the role used to run the bootstrap script, run the following command:
aws sts get-caller-identity --query Arn --output text
Replace assumed-role/ with role/aws-reserved/sso.amazonaws.com/.
Remove the session suffix (everything after the last /).
Important: Before initiating restore operation, review and update the KMS key policy to reflect the restore CLUSTER_NAME. Even if the policy was already configured for the source cluster, it must be updated for the new restore cluster. If the policy continues to reference the source cluster name, the IAM role created during restore cannot decrypt the backup data, causing the restore to fail.
After the KMS key is created, note the KMS key ARN. This KMS key ARN is required while creating the AWS S3 backup bucket.
Create an AWS S3 Bucket encrypted with SSE‑KMS The AWS S3 bucket encrypted with SSE‑KMS is used as a backup bucket during installation and restore.
Before you begin, ensure to have:
Access to the AWS account where the AWS S3 bucket will be created.
Permission to create AWS S3 bucket.
The user running the installer must have permission to describe the KMS key. Without this permission, installation and restore fails.
The steps to create an AWS S3 bucket are available at https://docs.aws.amazon.com/. Follow the AWS S3 bucket creation steps, but ensure to set the following configurations as mentioned below.
In the Default Encryption section:
Select Encryption type as Server-side encryption with AWS Key Management Service keys (SSE-KMS).
Select the AWS KMS key ARN. If the KMS key is in a different AWS account than the AWS S3 bucket, then the key will not appear in the AWS console dropdown. In this case, enter the KMS key ARN manually.
Enable Bucket Key.
Automatic AWS KMS Key and S3 Bucket Provisioning
When deploying PPC using the bootstrap script, the AWS S3 bucket and KMS key can be provisioned automatically during the installation process, without any separate pre-installation steps.
During the bootstrap script execution, at step 5, you are prompted to choose how to provide the AWS S3 bucket for cluster backups:
Do you want to use an existing AWS S3 bucket, or provision a new one (with KMS key)?
1) Use existing
2) Provision new via Tofu (backup-infra)
Select Option 2 - Provision new via Tofu to have the bootstrap script automatically:
Create a new AWS KMS key.
Create a new AWS S3 bucket encrypted with SSE-KMS.
Associate the AWS S3 bucket with the KMS key.
At step 6, when prompted, provide a globally unique bucket name using the following naming rules:
Lowercase letters, digits, and hyphens only.
Between 3 and 63 characters.
Must not already exist.
Note: The AWS S3 bucket and KMS key are created in the same AWS account using this option. For cross-account KMS configurations, follow the steps in the Using AWS Web UI tab.
Use a dedicated AWS S3 bucket per cluster for backup and restore operations to ensure data and encryption isolation. Sharing a bucket across clusters increases the risk of cross-cluster data access or decryption due to IAM misconfiguration.
Blocking Public Access to the AWS S3 Bucket
The PPC bootstrap script does not configure AWS S3 Block Public Access at the per-bucket level. This is by design because many AWS Organizations enforce AWS S3 Block Public Access through Service Control Policies (SCPs) at the account or organization level. This causes per-bucket s3:PutBucketPublicAccessBlock calls to fail with AccessDenied. AWS enabled S3 Block Public Access by default for all new accounts created after April 2023. However, verify the settings manually before proceeding.
Warning: The AWS S3 backup bucket stores highly sensitive data. Ensure that AWS S3 Block Public Access is enforced at the AWS account or organization level to prevent accidental public exposure.
Verify that AWS S3 Block Public Access is enabled at the account level before deploying PPC:
Navigate to the Amazon AWS S3 console.
Click Account and organization settings from the left navigation.
Ensure all four settings are enabled and set to On:
Block public access to buckets and objects granted through new access control lists (ACLs)
Block public access to buckets and objects granted through any access control lists (ACLs)
Block public access to buckets and objects granted through new public bucket or access point policies
Block public and cross-account access to buckets and objects through any public bucket or access point policies
If it is set to Off, then click Edit, select the check boxes, and click Save changes.
Verify that the Block Public Access settings for this account are enabled using the following command:
All four fields BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets should be set to true.
Note: To block the permissions at the bucket level, navigate to Buckets > General purpose buckets > select the bucket > Permissions > Block public access (bucket settings).
Zone Requirements
The cluster requires a minimum of two availability zones for high availability. It is required to have two zones available while deploying a PPC.
Zones
Supported
Notes
1
No
Installation fails.
2
Yes
Minimum requirement for High Availability.
Zones are derived from the private subnets which are provided. Each subnet maps to exactly one availability zone. During the installation, the bootstrap script validates that the selected subnets are in different Availability Zones.
Note: Zones cannot be changed after cluster creation.
3.1.2 - Preparing for PPC deployment
Downloading and Extracting the Protegrity Cluster Template (PCT) for Deploying PPC
If the jump box is already set previously, run the ./bootstrap.sh --cloud aws destroy command in the directory where the cluster is installed. This ensures that the local repository on the jump box and the clusters are cleaned up before proceeding with a new installation.
Warning: Do not install or manage multiple clusters from the same working directory. Each cluster deployment maintains its own Terraform/OpenTofu state, and reusing a directory can overwrite state files, causing loss of cluster tracking and unintended cleanup behavior. Use a dedicated directory, and jump box, where possible, per cluster, and always verify the active kubectl context before running cleanup commands such as ./bootstrap.sh --cloud aws destroy.
Navigate to Product Management > Explore Products > AI Team Edition > Platform & Features.
Navigate to Platform Installation.
From the Actions column for Protegrity Provisioned Cluster, click the Download Product icon to download the PPC 1.1 archive.
Create a deployment directory on the jumpbox.
mkdir deployment && cd deployment
Copy the PCT to the deployment directory on the jump box.
Extract the PCT.
tar -xvf PPC-K8S-ALL_1.1.0.97.tar
3.1.3 - Deploying PPC
Steps to deploy the PPC cluster
By default, the PCT is configured to deploy a FIPS-enabled cluster using FIPS-compliant Bottlerocket AMIs.
Non-FIPS deployment: Before proceeding with the installation, complete the steps in Configuring PPC for Non-FIPS Deployment on AWS to modify the required Terraform configuration files. Then proceed with either the automated or component-based installation below.
FIPS deployment: No additional configuration is required. Proceed directly with either the automated or component-based installation below.
The PPC cluster can be deployed using one of the following methods:
Automated script-based installation: This method requires the bootstrap.sh script to deploy the PPC cluster. The script installs the required software and dependencies, prompts to provide the required information, and deploys the cluster automatically.
Manual component-based installation: This method requires to perform the deployment of each component to install the PPC cluster. The configuration files are edited to provide the required information and then deploy the cluster.
3.1.3.1 - Configuring PPC for Non-FIPS Deployment on AWS
Complete the steps provided in this section to configure the Protegrity Cluster Template (PCT) for a non-FIPS PPC deployment on AWS EKS.
Before you begin
By default, the PCT is configured to deploy a FIPS-enabled cluster using FIPS-compliant Bottlerocket AMIs. To deploy a standard, non-FIPS cluster, the following Terraform configuration files must be modified to use the standard (non-FIPS) Bottlerocket AMI types and SSM parameter paths before running the bootstrap script or the component-based installation.
For a non-FIPS PPC deployment on AWS EKS, perform the following steps:
Update the node group AMI type map in the /03_node_group/variables.tf file.
The node_group_ami_type_map variable defines the fallback EKS AMI type used per node architecture when node_group_ami_type is not explicitly set. The FIPS-enabled defaults must be replaced with the corresponding standard Bottlerocket AMI types.
a. Navigate to /03_node_group directory.
cd iac/aws/cluster/modules/03_node_group/
b. Edit the variables.tf file to make the following changes.
Change from (FIPS defaults):
variable"node_group_ami_type_map" {
description="Fallback EKS AMI type per architecture, used when node_group_ami_type is empty." type=map(string) default= {
amd64="BOTTLEROCKET_x86_64_FIPS" arm64="BOTTLEROCKET_ARM_64_FIPS" }
}
Change to (non-FIPS values):
variable"node_group_ami_type_map" {
description="Fallback EKS AMI type per architecture, used when node_group_ami_type is empty." type=map(string) default= {
amd64="BOTTLEROCKET_x86_64" arm64="BOTTLEROCKET_ARM_64" }
}
Update the Karpenter AMI SSM parameter path in the /05_helm_releases/main.tf file.
The karpenter_fips_ami_ssm_parameter value specifies the AWS Systems Manager (SSM) parameter path that Karpenter uses to resolve the correct Bottlerocket AMI for worker nodes. The default path targets the FIPS AMI. For a non-FIPS cluster, remove the -fips segment from the EKS version portion of the path.
a. Navigate to /05_helm_releases directory.
cd iac/aws/cluster/modules/05_helm_releases/
b. Edit the main.tf file to make the following changes.
Complete the steps provided in this section to deploy PPC in AWS EKS.
Note for non-FIPS deployments: If you completed the steps in Configuring PPC for Non-FIPS Deployment on AWS, then the required Terraform configuration files have already been updated with non-FIPS values. The bootstrap script reads these files directly. Do not modify 03_node_group/variables.tf or 05_helm_releases/main.tf files back to FIPS defaults. Reverting those changes will result in a FIPS cluster being deployed instead of a non-FIPS cluster.
Before you begin
Before running the bootstrap or resiliency scripts as the root user on RHEL, ensure that /usr/local/bin, and the AWS CLI binary path, if applicable, is included in the $PATH. Alternatively, run the script using a non-root user, such as ec2-user, where /usr/local/bin is already part of the default PATH.
The repository provides a bootstrap script that automatically installs or updates the following software on the jump box:
AWS CLI - Required to communicate with the AWS account.
OpenTofu - Required to manage infrastructure as code.
kubectl - Required to communicate with the Kubernetes cluster.
The bootstrap script also checks if you have the required permissions on AWS. It then sets up the EKS cluster and installs the microservices required for deploying the PPC.
Architecture Selection
The step [1b] Select Node Architecture in the bootstrap script prompts to select the node architecture interactively during deployment.
amd64 (x86-64-based environments such as standard Intel or AMD servers)
arm64 (ARM-based environments such as AWS Graviton)
Deploying the PPC
The bootstrap script prompts for variables to be set to complete your deployment. Follow the instructions on the screen:
./bootstrap.sh --cloud aws --arch amd64
The script prompts for the following variables.
Enter Cluster Name
The following characters are allowed:
Lowercase letters: a-z
Numbers: 0-9
Hyphens: -
The following characters are not allowed:
Uppercase letters: A-Z
Underscores: _
Spaces
Any special characters such as: / ? * + % ! @ # $ ^ & ( ) = [ ] { } : ; , .
Leading or trailing hyphens
Names longer than 31 characters (the cluster name must be 31 characters or fewer)
Note: Ensure that the cluster name does not exceed 31 characters. Cluster names longer than this limit can cause the bootstrap script to fail in subsequent installation steps. If the installation fails, specify a cluster name that is 31 characters or fewer and re-run the script. The script automatically applies the updated value and continues the bootstrap process.
After the cluster name is accepted, the script prompts you to select the node architecture.
Note: Select amd64 for standard Intel/AMD 64-bit environments. Select arm64 for ARM-based environments such as AWS Graviton instances.
Enter a VPC ID from the table
The script automatically retrieves the available VPCs. Enter the VPC ID where the cluster must be created.
Querying for subnets in VPC…
The script queries for the available VPC subnets and prompts to enter two private subnet IDs. Specify two private subnet IDs from different availability zones. The script automatically updates the VPC CIDR block based on the VPC details.
Enter FQDN
This is the Fully Qualified Domain Name (FQDN) for the ingress.
Warning: Ensure that the FQDN does not exceed 50 characters and only the following characters are used:
Do you want to use an existing S3 bucket, or provision a new one (with KMS key)?
1) Use existing
2) Provision new via Tofu (backup-infra)
Enter S3 bucket name
Option 1 – Use existing: Enter the name of an existing S3 bucket in your AWS account. The bucket must already be encrypted with SSE‑KMS.
Option 2 – Provision new via Tofu: The script uses OpenTofu (backup-infra) to create the S3 bucket and the corresponding KMS key on your behalf. Provide a globally unique bucket name when prompted:
Lowercase letters, digits, and hyphens only
Between 3 and 63 characters
Must not already exist
Use a dedicated S3 bucket per cluster for backup and restore operations to ensure data and encryption isolation. Sharing a bucket across clusters increases the risk of cross-cluster data access or decryption due to IAM misconfiguration. Dedicated buckets with unique IAM policies eliminate this risk.
During disaster management, OpenSearch restores only those snapshots that are created using the daily-insight-snapshots policy. For more information, refer to Backing up and restoring indexes.
Enter Image Registry Endpoint
The image repository from where the container images are retrieved. Use registry.protegrity.com:9443 for using the Protegrity Container Registry (PCR), else use the local repository endpoint for the local repository.
Expected format: <hostname>[:port].Do not include ‘https://’
Note: The container registry endpoint must be a Fully Qualified Domain Name (FQDN). Sub-paths like, my-registry.com/v2/path, are not supported by the Open Container Initiative (OCI) distribution specification.
Enter Registry Username
Enter the username for the registry mentioned in the previous step. Leave this entry blank if the registry does not require authentication.
Enter Registry Password or Access Token
Enter Password or Access Token for the registry.
Input is masked with * characters. Press Enter to keep the current value.
Leave this entry blank if the registry does not require authentication.
Enter Owner Email (for cluster tagging)
Enter email address in the format name@domain.tld. This email is used for the cluster ‘Owner’ tag and the platform owner contact.
Note: The cluster creation process can take 10-15 minutes.
If the session is terminated during installation due to network issues, power outage, and so on, then the installation stops. To restart the installation, run the script again:
# Navigate to setup directory ./bootstrap.sh --cloud aws
Important Information
Do not install or manage multiple clusters from the same working directory. Each cluster deployment maintains its own Terraform/OpenTofu state, and reusing a directory can overwrite state files, causing loss of cluster tracking and unintended cleanup behavior.
Use a dedicated directory, and jump box, where possible, per cluster, and always verify the active kubectl context before running cleanup commands such as ./bootstrap.sh --cloud aws destroy. To check the active kubectl context, run the following command: kubectl config current-context
Do not delete the original cluster deployment directory, as it contains the Terraform state files required for managing the deployment.
3.1.3.3 - Manual component-based installation
Complete the steps provided in this section to update the configuration files and deploy PPC in AWS EKS.
Before you begin
Ensure to have the following prerequisites before proceeding with the installation.
Jump box requirement
Ensure that the entire process is performed using the same jump box.
Installs all required CLI tools (OpenTofu, AWS CLI, kubectl, Helm, and others) on the jump box, either automatically via bootstrap.sh install-tools or manually.
Confirms all cluster nodes are in Ready state and all pods are in Running state.
1. Exporting AWS credentials
The installation process uses Terraform to provision and manage AWS resources, such as VPCs, EKS clusters, IAM roles, and S3 buckets. The AWS credentials must be exported as environment variables to authenticate these operations.
Note: While using temporary credentials, such as, using AWS STS, ensure the session token is included and that the credentials have not expired before proceeding.
If the components are installed by different users, ensure that each user must export their AWS credentials. This ensures that all the required access and permissions are available.
To export the AWS credentials, run the following commands.
The following tools and minimum versions are required for the component-based installation. Ensure they are installed on your jump box before proceeding, or use the bootstrap.sh install-tools command to install them automatically.
After downloading and extracting the PPC-K8S-ALL_1.1.0.97.tar, run the following command to install the required tools.
./bootstrap.sh install-tools --cloud aws
Alternatively, the following tools must be installed and available on the jump box before starting.
Tools Name
Description
Updated Version
OpenTofu
Required to manage infrastructure as code (IaC) and provision cloud resources.
1.11.5
AWS CLI
Required to communicate with AWS and manage AWS resources.
2.36.7
kubectl
Required to communicate with and manage Kubernetes clusters.
1.36.1
Helm
Required to deploy and manage Kubernetes packages and applications.
3.21.0
skopeo
Required to inspect, copy, and transfer container images between registries.
1.18.0
jq
Required to parse, filter, and process JSON data.
1.7
bc
Required for version comparisons and resource calculations.
1.07.1
ssh-keygen
Required to generate and manage SSH keys for secure access to deployment environments.
OpenSSH_10.0p2 Debian-7+deb13u4
oras
Required to pull OCI artifacts, including non-container deployment packages, from registries.
1.3.3
cmctl
Required to validate, manage, and troubleshoot cert-manager TLS certificates.
2.5.0
3. Provisioning the S3 bucket
This step is required if a new S3 bucket is to be provisioned for storing the backup data. If an existing S3 bucket is to be used, note the bucket name and KMS key ARN required for the installation process and skip to the next step.
a. To navigate to 00_backup_bucket directory, run the following command.
cd iac/aws/cluster/modules/00_backup_bucket
b. Edit the terraform.tfvars file to provide the following information.
c. To apply the terraform configuration, run the following command.
tofu init
tofu plan # review the role assignments that will be created
tofu apply # type "yes" when prompted
After the S3 bucket is provisioned successfully, note the bucket name and KMS key ARN. These values are required during the installation process.
d. To sync the Terraform state file to the S3 bucket, run the following command.
# Navigate to the bootstrap-scripts directory
cd <package-root>/bootstrap-scripts
# Run the script to sync the backup data to the S3 bucket
./sync-backup-bucket-state-to-s3.sh
4. Modifying and applying terraform.tfvars files
The iac/aws/cluster/modules/ directory contains the Terraform modules for the PPC installation. To enter details in the terraform.tfvars file, navigate to the appropriate module directory and edit the file accordingly.
After modifying the terraform.tfvars file, apply the changes
01_iam_roles module
a. To navigate to 01_iam_roles directory, run the following command.
cd iac/aws/cluster/modules/01_iam_roles
b. Edit the terraform.tfvars file to provide the following information.
c. To apply the terraform configuration, run the following command.
tofu init
tofu plan # review the role assignments that will be created
tofu apply # type "yes" when prompted
d. After the configurations are successfully applied, verify the required resources are created.To verify if the resources are created successfully, run the following command.
aws iam list-roles --query "Roles[?contains(RoleName, 'doc-test')].[RoleName, Arn]" --output table
The EKS cluster IAM role, Node group IAM role, and Service account IAM roles must be created.
Additionally, note the role ARNs from the Terraform output. These values are required in subsequent modules.
02_eks_cluster module
a. To navigate to 02_eks_cluster directory, run the following command.
cd iac/aws/cluster/modules/02_eks_cluster
b. Edit the terraform.tfvars file to provide the following information.
Ensure that the security group name must not start with sg.
c. To apply the terraform configuration, run the following command.
tofu init
tofu plan # review the role assignments that will be created
tofu apply # type "yes" when prompted
d. After the configurations are successfully applied, verify the required resources are created.To verify if the resources are created successfully, run the following command.
# Confirm the cluster is ACTIVEaws eks describe-cluster --name <cluster-name> --region <region> \
--query "cluster.{Name:name, Status:status, Version:version, Endpoint:endpoint}"\
--output table
# Verify kubectl can reach the API serverkubectl get nodes # expected: no nodes yet (node group is Stage 03)# Verify the worker security group existsaws ec2 describe-security-groups \
--filters "Name=group-name,Values=<security-group-name>*"\
--region <region> \
--query "SecurityGroups[].{Name:GroupName, ID:GroupId}"\
--output table
# Verify VPC CNI and kube-proxy add-ons are ACTIVEaws eks list-addons --cluster-name <cluster-name> --region <region> --output table
03_node_group module
a. To navigate to 03_node_group directory, run the following command.
cd iac/aws/cluster/modules/03_node_group
b. Edit the terraform.tfvars file to provide the following information.
Note: Use the private subnet IDs from the VPC where the EKS cluster is provisioned while installing the 02_eks_cluster module.
Note for non-FIPS deployments: If you completed the steps in Configuring PPC for Non-FIPS Deployment on AWS, the node_group_ami_type_map default values in variables.tf file have already been changed to BOTTLEROCKET_x86_64 (amd64) or BOTTLEROCKET_ARM_64 (arm64). Do not add or override node_group_ami_type with a FIPS value in terraform.tfvars, as this will reintroduce FIPS AMIs.
c. To apply the terraform configuration, run the following command.
tofu init
tofu plan # review the role assignments that will be created
tofu apply # type "yes" when prompted
d. After the configurations are successfully applied, verify the required resources are created.To verify if the resources are created successfully, run the following command.
Ensure that the Node group status is ACTIVE and the desired number of nodes are in Ready state.
04_eks_addons module
a. To navigate to 04_eks_addons directory, run the following command.
cd iac/aws/cluster/modules/04_eks_addons
b. Edit the terraform.tfvars file to provide the following information.
aws_region = "<region>"
eks_cluster_name = "<cluster-name>"
backup_bucket = "<s3-bucket-name>" #
# --- Upgrade mode only ---
# Set to "~/.kube/config" when upgrading an existing cluster;
# leave empty ("") for a fresh install.
kubeconfig_path = ""
c. To apply the terraform configuration, run the following command.
tofu init
tofu plan # review the role assignments that will be created
tofu apply # type "yes" when prompted
Note: This stage waits for all nodes from Stage 03 to reach Ready status before installing add-ons.
d. After the configurations are successfully applied, verify the required resources are created.To verify if the resources are created successfully, run the following command.
# List all EKS add-ons and confirm they are ACTIVEaws eks list-addons --cluster-name <cluster-name> --region <region> --output table
# Check add-on health detailsfor addon in coredns metrics-server aws-ebs-csi-driver snapshot-controller eks-pod-identity-agent;doecho"--- $addon ---" aws eks describe-addon --cluster-name <cluster-name> --addon-name $addon --region <region> \
--query "addon.{Name:addonName, Status:status, Version:addonVersion}" --output table
done# Verify the default storage class existskubectl get storageclass
# Confirm CoreDNS and Metrics Server pods are runningkubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl get pods -n kube-system -l k8s-app=metrics-server
05_helm_releases module
a. To navigate to 05_helm_releases directory, run the following command.
cd iac/aws/cluster/modules/05_helm_releases
b. Edit the terraform.tfvars file to provide the following information.
The default node OS is BOTTLEROCKET_x86_64_FIPS. While providing the node_os value, ensure that the value must be the same as nnode_group_ami_type value obtained from the 03_node_group module.
For obtaining the value of node_os, run the following command.
kubectl get nodes -o jsonpath='{.items[0].status.nodeInfo.osImage}'; echo
Provide the node_os value in the terraform.tfvars file.
d. To apply the terraform configuration, run the following command.
tofu init
tofu plan # review the role assignments that will be created
tofu apply # type "yes" when prompted
Note: This process may take 15–20 minutes to get completed. Karpenter nodes are provisioned on demand after the NodePool is created.
e. After the configurations are successfully applied, verify the required resources are created.To verify if the resources are created successfully, run the following command.
# Confirm all Helm releases are deployedhelm list -A
# Verify Karpenter controller is runningkubectl get pods -n karpenter
# Verify Karpenter NodePool and EC2NodeClass existkubectl get nodepools
kubectl get ec2nodeclasses
# Verify Velero is runningkubectl get pods -n pty-backup-recovery
# Verify PPC platform podskubectl get pods -A
# Verify Insight podskubectl get pods -n pty-insight
# Verify Envoy Gatewaykubectl get pods -n api-gateway
# Check all pods across the cluster are healthykubectl get pods -A --field-selector=status.phase!=Running,status.phase!=Succeeded
5. Verifying the installation
To verify the installation, run the following command.
kubectl get nodes
kubectl get pods -A
All the nodes should be in the Ready state and all the pods should be in the Running state.
3.1.4 - Installing Features and Protectors
Installing the features and protectors
Before you begin
Ensure that PPC is successfully installed before installing the features or protectors.
The Protegrity Provisioned Cluster (PPC) CLI provides a command-line interface for managing policies, users, and log forwarding. Access is established over SSH using the private key generated during the PPC installation.
3.1.5.1 - Prerequisites
The deployment includes a CLI container that provides command-line access to the Protegrity Management CLI using SSH, on both Linux and Windows.
To access the PPC CLI, ensure that the following prerequisites are met.
SSH Keys:
The SSH private key that corresponds to the public key configured in the pty-cli pod is required.
Network Access:
Ensure to have network connectivity to the cluster.
Resolve FQDN:
Use Route 53 configuration on AWS to resolve the PPC FQDN specified during the installation to the internal load balancer.
For more information, refer to Prerequisites.
The private key to access the CLI pod will be in the .ssh directory.
Under Connection > SSH > Auth, browse and select your private key file (.ppk format)
Username: ptyitusr
3.1.5.2 - Accessing the PPC CLI
Once connected, the Protegrity CLI welcome banner is displayed. Enter the following parameters when prompted:
Username: Application username
Password: Application password
For more information about the default credentials, refer to the Release Notes.
The CLI supports three main command categories:
pim: Policy Information Management commands for data protection policies.
admin: User, Role, Permission, and Group management commands.
insight: Log forwarding to external SIEM and syslog servers.
Note: Ensure that at least one additional backup administrator user is configured with the same administrative privileges as the primary admin user. If the primary admin account is locked or its credentials are lost, restoring the system from a backup is the only recovery option.
3.1.6 - Login to PPC
The PPC provides a web-based user interface for managing data protection policies, users, and roles. Access the UI through a browser using the cluster’s FQDN. This section covers the prerequisites for resolving the FQDN and the steps to log in.
3.1.6.1 - Prerequisites
Before accessing the Web UI, configure AWS Route 53 to resolve the PPC Fully Qualified Domain Name (FQDN) to the internal load balancer. This section lists the network and DNS requirements you need to verify, and the steps to map the FQDN to the load balancer.
Use Route 53 configuration on AWS to resolve the PPC FQDN specified during the installation to the internal load balancer.
Ensure that the instance is using the AWS-provided DNS server, such as, VPC CIDR + 2.
Verify that enableDnsHostnames and enableDnsSupport are set to true in the VPC settings.
Verify the Security Group of the load balancer. Ensure that Inbound traffic is allowed on the required ports, such as, 80 and 443, from the client instance’s IP or Security Group.
Keep the following information ready:
VPC ID: The ID of the VPC for the client instances and the Load Balancer. For example, vpc-0123456789.
Internal ELB DNS Name: The DNS name of the load balancer. For example, internal-abcdefghi123456-123456789.us-east-1.amazonaws.com.
Target FQDN: The FQDN for PPC. For example, mysite.aws.com.
Find the AWS Load Balancer address.
kubectl get gateway -A
The output appears similar to the following:
NAMESPACE NAME CLASS ADDRESS PROGRAMMED AGE
api-gateway pty-main envoy a814fae40464d462da9ca685921699c0-1ccfcf98919adf90.elb.us-east-1.amazonaws.com True 34m
Verify that the gateway address resolves to an internal IP, using the following command.
ping <gateway_address>
Where <gateway_address> is the ADDRESS value from the previous step.
The output confirms that the hostname resolves to a private VPC IP address (10.x.x.x range), indicating the load balancer is internal and accessible only within the AWS VPC.
The output appears similar to the following:
PING a814fae40464d462da9ca685921699c0-1ccfcf98919adf90.elb.us-east-1.amazonaws.com (10.31.4.172) 56(84) bytes of data.
Map the PPC FQDN to the load balancer using Route 53.
For more information about configuring Route 53, refer to the AWS documentation.
3.1.6.2 - Log in to PPC
After completing the prerequisites, log in to the web-based user interface for managing data protection policies, users, and roles. This page describes the steps to access the Web UI using the Fully Qualified Domain Name (FQDN) provided during the installation process.
Access the PPC using the FQDN provided during the installation process.
Enter the following parameters to log in and view the Insight Dashboard.
Username: Application username
Password: Application password
For more information about the default credentials, refer to the Release Notes.
Complete the steps provided in this section to upgrade a PPC to v1.1.0.
Before you begin
Before starting an upgrade, ensure the following conditions are met:
Access to the jump box associated with the PPC v1.0.0 cluster is required. This must be the same jump box used during the PPC v1.0.0 installation.
Maintain both, previous and current installation directories. Do not delete the original cluster deployment directory, as it contains the Terraform state files required for managing the deployment.
Create a Velero backup and an OpenSearch snapshot to ensure data recovery is possible, in case of an upgrade failure.
Maintain a backup of the state file in the AWS S3 backup bucket.
If logs are forwarded to an external SIEM, then from the PPC CLI, run the insight delete syslog or the insight delete fluentd as per your configuration. After the upgrade is complete, re-configure the SIEM. For more information about SIEM configuration, refer to Sending logs to a SIEM.
The context is set to the cluster where the upgrade operation is to be performed. Run the following command.
kubectl config current-context
The cluster name in the output must match the cluster installed with PPC v1.0.0.
Note: Before running the bootstrap or resiliency scripts as the root user on RHEL, ensure that /usr/local/bin, and the AWS CLI binary path, if applicable, is included in the $PATH. Alternatively, run the script using a non-root user, such as ec2-user where /usr/local/bin is already part of the default $PATH.
Upgrading PPC
To upgrade the PPC from v1.0.0 to v1.1.0, perform the following steps:
Create a deployment_110 directory on the jump box and navigate to it.
Navigate to Product Management > Explore Products > AI Team Edition > Platform & Features.
Navigate to Platform Installation.
From the Actions column for Protegrity Provisioned Cluster, click the Download Product icon and download the PPC 1.1 archive to the deployment_110 directory.
Extract the archive contents.
tar -xvf PPC-K8S-ALL_1.1.0.97.tar
Copy the Terraform state file from the v1.0.0 cluster installation to the deployment_110 directory created for upgrade.
where <v1.0-cluster-dir> is the path to the original PPC v1.0.0 cluster installation directory on the jump box, and <v1.1.0-cluster-dir> is the path to the new directory created for upgrade.
Verify the active context points to the correct cluster using the following command.
kubectl config current-context
Initiate the upgrade from the deployment_110 directory using the following command.
If logs were forwarded to an external SIEM before the upgrade, then SIEM log forwarding was disabled as part of the pre-upgrade prerequisites. After completing the upgrade, update the settings to resume sending logs to the external SIEM.
During upgrade, both the previous and the new PPC installation directories must be retained.
The original directory contains Terraform state and deployment metadata.
The new directory contains the updated configuration and binaries.
Both directories are required for proper management of the deployment.
Recovering from a Failed Upgrade
If the session is terminated during upgrade due to network issues, power outage, or any such issues, then the upgrade process stops. The ./upgrade.sh script resumes the upgrade.
To restart the process, run the following command:
Warning: Do not install or manage multiple clusters from the same working directory. Each cluster deployment maintains its own Terraform or OpenTofu state, and reusing a directory can overwrite state files, causing loss of cluster tracking and unintended cleanup behavior. Use a dedicated directory, and jump box, where possible, per cluster, and always verify the active kubectl context before running cleanup commands such as ./bootstrap.sh --cloud aws destroy. To check the active kubectl context, run the following command: kubectl config current-context
Reverting to a previous version of PPC
To revert to a previous version of PPC, restore the cluster using the steps in Restoring the PPC.
3.1.8 - Backing up the PPC
Complete the steps provided in this section to backup a PPC deployment.
Protegrity Provisioned Cluster (PPC) supports backup of Insight indexes and cluster configurations. Use the procedures below to update the scheduled backups of your PPC deployment.
Backing up Velero backup schedule
To take a backup at an interval of 10 minutes, the cron job must be executed before the schedule. This ensures that the latest configurations are included and are available in the Storage Account.By default, the cron job is executed after every 3 hours and schedule is executed after every 3.5 hours.
For taking the backups, the frequency of schedule and cron job can be changed, as required.
Perform the following steps to update the frequency.
To update the frequency of the cron job, run the following command.
Insight indexes are backed up automatically using a scheduled job. To manually back up the indexes, perform the following steps:
Log in to the Insight Dashboard.
Select the main menu.
Navigate to Management > Snapshot Management > Snapshot policies.
Click the daily-insight-snapshots policy.
Click Edit.
Update the following parameters:
Snapshot schedule
Frequency: Custom (Cron expression)
Cron expression: */15 * * * *
Click Update.
Wait for the next scheduled snapshot to complete. Verify that the snapshot is created from the snapshot status.
Note: The snapshot schedule is set to run every 15 minutes for creating the manual backup. Restore the default settings after the manual backup is complete. Before upgrading, disable the scheduler job after the backup is created. Ensure that the default parameters are restored and the job is re-enabled after the upgrade.
3.1.9 - Restoring the PPC
Complete the steps provided in this section to restore a PPC deployment using an existing backup.
Before you begin
Before starting a restore, ensure the following conditions are met:
An existing backup is available. Backups are taken automatically as part of the default installation using scheduled backup mechanisms. These backups are stored in an AWS S3 bucket configured during the original installation.
Access to the original backup AWS S3 bucket. During restore, the same S3 bucket that was used during the original installation must be specified.
Before initiating the restore, review and update the KMS key policy to reflect the restore cluster name.
Even if the policy was already configured for the source cluster, it must be updated for the new restore cluster. If the policy continues to reference the source cluster name, the IAM role created during restore cannot decrypt the backup data, causing the restore to fail.
Permissions to read from the S3 bucket. The user performing the restore must have sufficient permissions to access the backup data stored in the bucket.
A Kubernetes cluster is created. Restore is performed as part of creating a cluster, not on an existing one. Restore is only supported during a fresh installation flow.
While the backup is taken from the source cluster, do not perform Create, Read, Update, or Delete (CRUD) operations on the source cluster. This ensures backup consistency and prevents data corruption during restore.
Before restoring to a new cluster, if the source cluster is accessible, disable the backup operations on the source cluster by setting the backup storage location to read‑only. This ensures that no additional backup data is written during the restore process.
To disable the backup operation on the source cluster, run the following command:
If the source cluster is not accessible, this step can be skipped.
During Disaster management, the backup data is used to restore the cluster and the OpenSearch indexes using snapshots. However, Insight restores OpenSearch data only from the most recent snapshot created by the daily-insight-snapshots policy. For more information, refer to Backing up and restoring indexes.
Warning: Do not install or manage multiple clusters from the same working directory. Each cluster deployment maintains its own Terraform or OpenTofu state, and reusing a directory can overwrite state files, causing loss of cluster tracking and unintended cleanup behavior. Use a dedicated directory, and jump box, where possible, per cluster, and always verify the active kubectl context before running cleanup commands such as ./bootstrap.sh --cloud aws destroy.
The repository provides a bootstrap script that automatically installs or updates the following software on the jump box:
AWS CLI - Required to communicate with your AWS account.
bc - Required for version comparisons and resource calculations.
cmctl - Required to validate and manage TLS certificates.
kubectl - Required to communicate with the Kubernetes cluster.
OpenTofu - Required to manage infrastructure as code.
ORAS - Required to pull OCI artifacts such as deployment packages.
skopeo - Required to copy container images between registries.
ssh-keygen - Required to secure SSH access to deployment environments.
The bootstrap script also checks if you have the required permissions on AWS. It then sets up the EKS cluster and installs the microservices required for deploying the PCS on a PPC.
Note: Before running the bootstrap or resiliency scripts as the root user on RHEL, ensure that /usr/local/bin (and the AWS CLI binary path, if applicable) is included in the $PATH. Alternatively, run the script using a non-root user (such as ec2-user) where /usr/local/bin is already part of the default PATH.
Architecture Selection
amd64 (x86-64-based environments such as standard Intel or AMD servers)
arm64 (ARM-based environments such as AWS Graviton)
The bootstrap script prompts you to select the node architecture interactively during deployment (step 1b).
Restoring the PPC
Ensure that the PCT is downloaded and extracted on the jump box.
For more information, refer to Preparing for PPC deployment.
Run the following command to initiate restore using an existing backup:
./bootstrap.sh --cloud aws --restore
To deploy PPC on ARM-based infrastructure, specify the architecture explicitly:
The bootstrap script asks for variables to be set to complete the deployment. Follow the instructions on the screen.
The --restore command enables the restore mode for the installation. It initiates restoration of data from the configured AWS S3 backup bucket. This process must be followed on a fresh jump box.
The script prompts for the following variables.
Enter Cluster Name
Ensure that the cluster name does not match the name of the source cluster. Reusing an existing cluster name during restore can lead to discrepancies during cluster installation.
This same cluster name must already be updated in the KMS key policy. If this update is not performed, the restore process fails because the new cluster cannot decrypt the backup data.
Ensure that the cluster name does not exceed 31 characters. Cluster names longer than this limit can cause the bootstrap script to fail in subsequent installation steps. If the installation fails because the cluster name exceeds the 31-character limit, correct the name and re-run the script.
Correction: Choose a cluster name with 31 characters or fewer.
Retry: Execute the installation command again with the updated name. The script will automatically handle the update and proceed with the bootstrap process.
The following characters are allowed:
Lowercase letters: a-z
Numbers: 0-9
Hyphens: -
The following characters are not allowed:
Uppercase letters: A-Z
Underscores: _
Spaces
Any special characters such as: / ? * + % ! @ # $ ^ & ( ) = [ ] { } : ; , .
Leading or trailing hyphens
More than 31 characters
After the cluster name is accepted, the script prompts you to select the node architecture.
Note: Select amd64 for standard Intel/AMD 64-bit environments. Select arm64 for ARM-based environments such as AWS Graviton instances.
Enter a VPC ID from the table
The script automatically retrieves the available VPCs. Enter the VPC ID where the cluster must be created.
Querying for subnets in VPC…
The script queries for the available VPC subnets and prompts to enter two private subnet IDs. Specify two private subnet IDs from different availability zones. The script then automatically updates the VPC CIDR block based on the VPC details.
Enter FQDN
This is the Fully Qualified Domain Name (FQDN) for the ingress.
While entering the FQDN, ensure that:
contains at least two labels separated by a dot, such as, app.example.com
does not start or end with a dot or hyphen
does not contain consecutive dot character
label length must be between 1–63 characters
each label must start and end with a letter or digit
the last label must start only with a letter
Warning: Ensure that the FQDN does not exceed 50 characters and only the following characters are used:
Lowercase letters: a-z
Numbers: 0-9
Special characters: - .
Restore mode requires an existing S3 bucket.
Proceeding to existing bucket validation in Step 6.
Use a dedicated S3 bucket per cluster for backup and restore operations to ensure data and encryption isolation. Sharing a bucket across clusters increases the risk of cross-cluster data access or decryption due to IAM misconfiguration. Dedicated buckets with unique IAM policies eliminate this risk.
Select backup
During restore, the script prompts to manually select a backup from the available backups stored in the S3 bucket. User input is required to either restore from the latest backup or choose a specific backup from the list.
If n is selected, then the script displays a list of available backups (latest first) and prompts to select one by number:
Available backups (latest first):
[1] <timestamp> authnz-postgresql-schedule-backup-xxxxxxx
[2] <timestamp> authnz-postgresql-schedule-backup-xxxxxxx
Select a backup number (1-2):
After entering the backup number, the chosen backup is used for the restore, and the installation continues.
Enter Insight backup
During restore, the script prompts to manually select the required insight backup from the available backups stored in the S3 bucket. User input is required to either restore from the latest backup or choose a specific backup from the list.
If n is selected, then the script displays a list of available backups (latest first) and prompts to select one by number:
Available backups (latest first):
[1] <timestamp> insight-configmaps-secrets-xxxxxxxxx
[2] <timestamp> insight-configmaps-secrets-xxxxxxxxx
Select a backup number (1-2):
After entering the backup number, the chosen backup is used for the restore, and the installation continues.
Enter Image Registry Endpoint
The image repository from where the container images are retrieved.
Expected format: <hostname>[:port].Do not include ‘https://’
Note: The container registry endpoint must be a FQDN (Fully Qualified Domain Name). Sub-paths like, my-registry.com/v2/path, are not supported by the OCI distribution specification.
Enter Registry Username
Enter the username for the registry mentioned in the previous step. Leave this entry blank if the registry does not require authentication.
Enter Registry Password or Access Token
Enter Password or Access Token for the registry.
Input is masked with * characters. Press Enter to keep the current value.
Leave this entry blank if the registry does not require authentication.
Enter Owner Email (for cluster tagging)
Enter email address in the format name@domain.tld. This email is used for the cluster ‘Owner’ tag and the platform owner contact.
Note: The cluster creation process can take approximately 15-20 minutes.
If the session is terminated during restore due to network issues, power outage, and so on, then the restore stops. To restart the process, run the following commands:
# Navigate to deployment directory and run the following command./bootstrap.sh --cloud aws destroy
# Restore the cluster./bootstrap.sh --cloud aws --restore
Warning: Do not install or manage multiple clusters from the same working directory. Each cluster deployment maintains its own Terraform or OpenTofu state, and reusing a directory can overwrite state files, causing loss of cluster tracking and unintended cleanup behavior. Use a dedicated directory, and jump box, where possible, per cluster, and always verify the active kubectl context before running cleanup commands such as ./bootstrap.sh --cloud aws destroy. To check the active kubectl context, run the following command: kubectl config current-context
After the restore to the new cluster is completed successfully and all required validation and migration activities are finished, the source cluster can be deleted.
3.1.10 - Deleting PPC
Steps to delete the cluster
Prerequisites
Authentication
The deletion process uses OpenTofu to destroy AWS resources, such as EKS clusters, IAM roles, S3 buckets, and KMS keys. The AWS credentials must be exported as environment variables to authenticate these operations.
Note: While using temporary credentials, such as, using AWS STS, ensure the session token is included and that the credentials have not expired before proceeding.
To export the AWS credentials, run the following commands.
To verify that the credentials are valid and the correct AWS identity is being used, run the following command.
aws sts get-caller-identity
Required Permissions
The same IAM principal (or one with equivalent permissions) that installed the cluster, can delete the cluster. The principal must have cluster-creator admin access to the EKS Kubernetes API.
The required IAM Permissions are listed in the following table:
The following tools must be installed and available on the machine before proceeding with deletion:
tofu (OpenTofu)
kubectl (configured with cluster context)
aws CLI
helm
Cleaning up the EKS Resources
There are two ways to destroy all created resources, including the EKS cluster and related components.
Method 1: Bootstrap script
Method 2: OpenTofu modules
Approach
Automated, single command
Manual, module-by-module
Control
Fully automated; no per-stage visibility
Full control and visibility over each stage
Best for
Standard teardowns where speed is preferred
Troubleshooting, partial cleanup, or auditing each deletion step
Effort
Minimal
Higher; requires navigating each module directory
Method 1: Using the bootstrap script
From the folder where bootstrap script is present, run the following command:
./bootstrap.sh --cloud aws destroy
Method 2: Using OpenTofu to delete all modules
This method displays how to delete a PPC cluster on AWS by destroying the OpenTofu modules in reverse order. Destroying modules one at a time gives full control and visibility over each stage.
Warning: This process is irreversible. All cluster resources, data, and backups stored in the S3 bucket will be permanently deleted.
These modules must be destroyed in reverse order: 05 → 04 → 03 → 02 → 01 → 00.
To delete the modules, perform the following steps:
To delete the helm releases resource, perform the following steps:
# Navigate to 05_helm_releases directorycd /iac/aws/cluster/modules/05_helm_releases
# Initialize providerstofu init
# Delete the helm releasetofu destroy # type "yes" when prompted
To delete the EKS Addons resource, run the following command.
# Navigate to 04_eks_addons directorycd /iac/aws/cluster/modules/04_eks_addons
# Initialize providerstofu init
# Delete the eks addonstofu destroy # type "yes" when prompted
To delete the Node Group resource, run the following command.
# Navigate to 03_node_group directorycd /iac/aws/cluster/modules/03_node_group
# Initialize providerstofu init
# Delete the node grouptofu destroy # type "yes" when prompted
To delete the EKS Cluster resource, run the following command.
# Navigate to 02_eks_cluster directorycd /iac/aws/cluster/modules/02_eks_cluster
# Initialize providerstofu init
# Delete the eks clustertofu destroy # type "yes" when prompted
To delete the IAM Roles resource, run the following command.
# Navigate to 01_iam_roles directorycd /iac/aws/cluster/modules/01_iam_roles
# Initialize providerstofu init
# Delete the iam rolestofu destroy # type "yes" when prompted
To delete the Backup Bucket (S3 + KMS) resource, perform the following steps.
# 1.Navigate to 00_backup_bucket directorycd /iac/aws/cluster/modules/00_backup_bucket
# 2. Download the state file from S3 (synced there during install)aws s3 cp \
s3://<bucket-name>/infrastructure-manifest/<cluster-name>/states/00_backup_bucket.tfstate \
./terraform.tfstate
# 3. Initialize providerstofu init
# 4. Enable force_destroy on the bucket (updates only the flag)tofu apply -var="force_destroy_bucket=true"
# 5. Destroy all resourcestofu destroy -var="force_destroy_bucket=true"# type "yes" when prompted
Note: After destroying all the modules, delete the CloudWatch Logs group created by EKS control plane logging using the following command.
Verify the access to the cluster, using the following command.
kubectl get nodes
3.1.12 - Restoring the SSH keys and PCT from backed up Terraform state file
Complete the steps provided in this section to restore the SSH keys and PCT from a backed up Terraform state file of a deleted v1.1.0 jump box.
This section describes the procedure to rebuild a usable PPC v1.1.0 deployment workspace on a jump box from an existing cluster and a backed up Terraform state file.
Before you Begin
Ensure the following requirements are met.
The state file from all the following modules must be available on the AWS S3 backup bucket.
00_backup_bucket
01_iam_roles
02_eks_cluster
03_node_group
04_eks_addons
05_helm_releases
Access to the same AWS account and target EKS cluster.
AWS CLI credentials with required permissions.
Perform the following steps to recover PPC
Create a workspace.
To create a working directory for PCT, run the following command.
mkdir -p deployment
cd deployment
Download and extract the PCT
Download the PCT package into the deployment directory and extract it.For more information about downloading and extracting the PCT, refer to Preparing for PPC deployment.
After successfully extracting the template, this directory behaves as recovered installation workspace.
Install required dev tools
Run the following script.
cdbootstrap-scripts/./setup-devtools-aws.sh
Set kubectl to the target EKS cluster
To set kubectl to the target EKS cluster, run the following command.
A jump box serves as a secure, controlled access point for executing installation commands and managing cluster resources. It ensures that all operations originate from a trusted environment with direct network access to the PPC cluster, avoiding connectivity issues that may arise from local machines with restricted network paths or inconsistent tooling.
Use a dedicated Debian or Red Hat jump box created in Microsoft Azure. Do not use a jump box hosted on any other cloud.
The jump box must be provisioned in the same Azure region where the PPC cluster will be deployed to ensure proper connectivity and access to regional resources.
For example, if the PPC cluster is deployed in eastus, the jump box must also be created in eastus. Placing the jump box in a different region, such as westeurope, may result in network access failures or latency issues when connecting to cluster endpoints.
Microsoft Azure Region
For automated installation
Identify the Azure region where the cluster is to be deployed.
The deployment region is automatically detected from the resource group’s location during the bootstrap process. Ensure that the resource group is created in the intended deployment region before running the installer.
Microsoft Azure Resource IDs from Infrastructure Team
Deployment Resource Group
Before proceeding with the installation, identify the Azure Resource Group where the cluster is to be deployed.
For automated deployment, the value of this resource group name must be specified during the input prompt while running the ./bootstrap.sh script.
For component-based deployment, the value of this resource group name must be specified in the resource_group_name field in the terraform.tfvars files, wherever required.
The following resources are provisioned within the resource group specified during deployment.
RBAC Role Assignments (references existing UAMIs; no new resources created)
02_AKS Cluster
AKS Cluster, Federated Credentials
03_Node Pool
AKS User Node Pool
04_AKS Addons
Storage Classes, Cluster Add-ons
05_Helm Releases
Kubernetes Namespaces, Secrets, Helm Charts
Pre-existing Resources
The following resources must be provisioned by the IT team before installation.
They can reside in any resource group in the same region. The installer references each resource by its entire Azure resource ID.
Ensure the deploying identity, such as, service principal or managed identity, has the appropriate permissions on these resources.
Resource
Description
Variable in terraform.tfvars
Example Resource ID
AKS User-Assigned Managed Identity
Identity used by the AKS cluster to interact with Azure resources such as Private DNS Zones and Virtual Networks.
uami_id
/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-applianceframework Must have Private DNS Zone and VNet custom role permissions. For more information, refer to AKS User-Assigned Managed Identity Permissions.
Velero User-Assigned Managed Identity
Identity used by Velero to access Azure Blob Storage for cluster backup and restore operations.
The AKS User-Assigned Managed Identity (id-aks-applianceframework) must be granted a custom role with the following permissions on the resource group containing the Private DNS Zone and Virtual Network. These permissions enable AKS to manage private DNS records and join virtual networks during cluster operations.
To configure User-Assigned Managed Identity with a custom Azure role containing the permissions required for AKS deployment and management operations within the specified resource group, perform the following steps:
1. Creating a Custom Role
In the Azure portal, navigate to Resource Groups.
Select the resource group that contains the AKS resources.
Open Access Control (IAM).
Select Add > Add custom role.
Provide a name and description for the custom role.
Review the permissions and create the custom role.
Note: These permissions are required when using a private AKS cluster with a pre-existing Private DNS Zone (private_dns_zone_id). Without them, cluster provisioning and DNS resolution will fail.
2. Assigning the custom role to the Managed Identity
On the Azure portal, navigate to Managed Identities.
Select Create.
Specify the following:
Subscription
Resource group
Managed identity name
Region
Select Review + Create and then Create.
Wait for the User-Assigned Managed Identity (UAMI) to be provisioned.
Open the newly created User-Assigned Managed Identity.
Select Azure role assignments.
Select Add role assignment.
Set the scope to the target resource group.
Select the custom role created in the previous section.
Assign the role to the User-Assigned Managed Identity.
Verify that the role assignment appears under the managed identity’s role assignments.
Zone Requirements
The cluster requires a minimum of two availability zones for high availability.
Three-zone cluster deployments are supported and recommended for production.
No. of Zones
Supported
Notes
1
No
Installation fails.
2
Yes
Minimum requirement for High Availability.
3
Yes
Recommended for production environments.
Ensure the following requirements are met before deploying:
Requirement
Detail
Region support
The target Azure region must support availability zones.
VM SKU availability
The chosen VM size must be available in all the specified zones.
Modules:02_aks_cluster, 03_node_pool
Note: The bootstrap script does not prompt for zone selection, it uses the default three zone configuration.
The default zone configuration is ["1", "2", "3"]. Not all Azure regions support three availability zones, and not all VM SKUs are available in every zone. Using a zone that does not support your VM SKU causes cluster creation to fail.
Important:system_node_pool_zones (module 02) and node_pool_zones (module 03) must use the same set of zones. If the zones differ, disks provisioned in one zone cannot be attached to nodes rescheduled into another zone.
Before deploying, verify zone and VM SKU availability:
# List availability zones for your regionaz account list-locations \
--query "[?name=='<region>'].{Region:name, Zones:availabilityZoneMappings}"\
-o table
# Check which zones support your VM SKUaz vm list-skus \
--location <region> \
--size Standard_D4ds_v4 \
--query "[].{Name:name, Zones:locationInfo[0].zones}"\
-o table
Replace <region> with your Azure region, for example eastus.
If zone adjustment is required, navigate to iac/azure/cluster/modules and set matching values in both terraform.tfvars files:
# 02_aks_cluster/terraform.tfvars
system_node_pool_zones=["1", "2"] # adjust to the zones your region supports
# 03_node_pool/terraform.tfvars
node_pool_zones=["1", "2"] # must match system_node_pool_zones exactly
The step [1b] Select Node Architecture in the bootstrap script prompts to select the node architecture interactively during deployment.
The default system node pool VM size (Standard_D2ds_v4, 2 vCPU / 8 GiB RAM) can become resource-constrained under production load when Karpenter, CoreDNS, and CSI drivers run concurrently on the same node. Use the following or larger for production system node pools.
amd64 (x86-64)
Node Pool
VM Size
vCPUs
Memory
System
Standard_D2as_v5
2
8 GB
User
Standard_D8as_v5
8
32 GB
arm64
Node Pool
VM Size
vCPUs
Memory
System
Standard_D2ps_v5
2
8 GB
User
Standard_D8ps_v5
8
32 GB
In 02_aks_cluster/terraform.tfvars, edit the following value:
system_node_pool_vm_size="Standard_D4ds_v5" # or Standard_D8ds_v4 for heavier loads
Downloading and extracting the Protegrity Cluster Template (PCT) for deploying PPC
The Protegrity Cluster Template (PCT) is a pre-packaged deployment archive that contains the infrastructure-as-code scripts, Helm charts, and bootstrap tooling required to provision a PPC on your target cloud platform. It automates the creation of the Kubernetes cluster, networking, identity configuration, and installation of Protegrity microservices. Download and extract the PCT on your jump box before starting the deployment process.
Note: If there is an existing cluster from a previous install, clean up your local repository on the jump box and any existing clusters by running ./bootstrap.sh --cloud azure destroy from /deployment before proceeding.
During installation, the system may prompt for the system password and require sign-in to Microsoft Azure. If the Azure CLI is not already logged in, the bootstrap script automatically runs az login --use-device-code. A device-code prompt similar to the following appears.
[YYYY-MM-DD HH:MM:SS] Azure CLI not logged in. Triggering az login...
To sign in, use a web browser to open the page https://login.microsoft.com/device and enter the code XXXXXXXX to authenticate.
To sign-in to Microsoft Azure, perform the following steps:
Open the displayed URL in a browser, and enter the code shown in the terminal.
Complete the SSO sign-in and follow the on-screen instructions.
After successful authentication, the script continues automatically.
To download and extract PCT, perform the following steps:
Navigate to Product Management > Explore Products > AI Team Edition > Platform & Features.
Navigate to Platform Installation.
From the Actions column for Protegrity Provisioned Cluster, click the Download Product icon to download the PPC 1.1 archive.
Create a deployment_110 directory on the jumpbox.
mkdir deployment_110 && cd deployment_110
Copy the PCT to the deployment_110 directory on the jump box.
Extract the PCT.
tar -xvf PPC-K8S-ALL_1.1.0.97.tar
3.2.3 - Deploying PPC
Steps to deploy the PPC cluster
By default, the PCT is configured to deploy a FIPS-enabled cluster using FIPS-compliant node OS images.
Non-FIPS deployment: Before proceeding with the installation, complete the steps in Configuring PPC for Non-FIPS Deployment on Microsoft Azure to modify the required Terraform configuration files. Then proceed with either the automated or component-based installation below.
FIPS deployment: No additional configuration is required. Proceed directly with either the automated or component-based installation below.
The PPC cluster can be deployed using one of the following methods:
Automated script-based installation: This method requires the bootstrap.sh script to deploy the PPC cluster. The script installs the required software and dependencies, prompts to provide the required information, and deploys the cluster automatically.
Manual component-based installation: This method requires to perform the deployment of each component to install the PPC cluster. The configuration files are edited to provide the required information and then deploy the cluster.
Note: A PPC can be deployed in regions where minimum two zones are present.
3.2.3.1 - Production configuration
Review and override these settings before deploying to production for high availability, data safety, and security compliance.
The default terraform.tfvars values are optimized for development and staging environments. Before deploying to production, override the settings below to ensure high availability, data safety, and security compliance.
Applying the changes
Script-based installation: After the bootstrap script generates the terraform.tfvars files, edit them before the script runs tofu apply, or modify and re-apply individually using OpenTofu after installation.
By default, the backup storage account uses Locally Redundant Storage (LRS), which stores data only within a single datacenter. When AKS nodes span multiple availability zones, an LRS-backed disk cannot be reattached to a node in a
different zone during failover, causing pod scheduling to fail.
Recommendations:
Use ZRS (Zone-Redundant Storage) when nodes are spread across availability zones in the same region.
Use GRS (Geo-Redundant Storage) if cross-region disaster recovery is required.
Use Premium_ZRS as the storage class for Kubernetes persistent volumes.
In 00_backup_storage/terraform.tfvars:
storage_account_replication_type="ZRS" # use "GRS"forcross-regionredundancy
System node pool sizing
Module:02_aks_cluster
The default system node pool VM size (Standard_D2ds_v4, 2 vCPU / 8 GiB RAM) can become resource-constrained under production load when Karpenter, CoreDNS, and CSI drivers run concurrently on the same node.
Recommendation: Use Standard_D4ds_v4 (4 vCPU / 16 GiB) or larger for production system node pools.
In 02_aks_cluster/terraform.tfvars, edit the following value:
system_node_pool_vm_size="Standard_D4ds_v4" # or Standard_D8ds_v4 for heavier loads
Key Vault SKU
Module:00_backup_storage
The default Key Vault SKU is standard, which uses software-protected keys. For organizations with compliance requirements (such as FIPS 140-2 Level 2 or Level 3), the premium SKU provides HSM-backed encryption keys.
Recommendation: Use premium when your security or compliance policy requires HSM-backed key protection.
In 00_backup_storage/terraform.tfvars:
key_vault_sku="premium"
Note: Confirm with your compliance team whether HSM-backed keys are required before changing this setting. The premium SKU incurs additional Azure costs.
Availability zones
Modules:02_aks_cluster, 03_node_pool
The default zone configuration is ["1", "2", "3"]. Not all Azure regions support three availability zones, and not all VM SKUs are available in every zone. Using a zone that does not support your VM SKU causes cluster creation to
fail.
Important:system_node_pool_zones (module 02) and node_pool_zones (module 03) must use the same set of zones. If the zones differ, disks provisioned in one zone cannot be attached to nodes rescheduled into another
zone.
Before deploying, verify zone and VM SKU availability:
# List availability zones for your regionaz account list-locations \
--query "[?name=='<region>'].{Region:name, Zones:availabilityZoneMappings}"\
-o table
# Check which zones support your VM SKUaz vm list-skus \
--location <region> \
--size Standard_D4ds_v4 \
--query "[].{Name:name, Zones:locationInfo[0].zones}"\
-o table
Replace <region> with your Azure region, for example eastus.
In both 02_aks_cluster/terraform.tfvars and 03_node_pool/terraform.tfvars, set matching values:
# 02_aks_cluster/terraform.tfvars
system_node_pool_zones=["1", "2"] # adjust to the zones your region supports
# 03_node_pool/terraform.tfvars
node_pool_zones=["1", "2"] # must match system_node_pool_zones exactly
AKS cluster tier (sku_tier)
Module:02_aks_cluster
The sku_tier setting controls the AKS API server uptime SLA, available node capacity, and supported features.
Tier
Uptime SLA
Notes
Free
No SLA
Suitable for development and testing only
Standard
99.9% (99.95% with Availability Zones)
Recommended for production
Premium
99.9% (99.95% with Availability Zones) + LTS
Required if long-term support is needed
Recommendation: Set sku_tier = "Standard" for all production deployments. Use "Premium" if your organization requires long-term support (LTS) guarantees.
In 02_aks_cluster/terraform.tfvars:
sku_tier="Standard"
Note:Standard and Premium tiers incur an additional hourly cost per cluster. See the AKS pricing page for current rates.
Storage account network access
Module:00_backup_storage
The backup storage account is created with public network access enabled by default. In production, restrict access using your organization’s existing network controls.
Azure provides three options:
Method
Isolation level
Typical use
Private Endpoints
Assigns the storage account a private IP inside your VNet. Removes it from public internet.
Recommended for most enterprise deployments.
VNet service endpoints
Routes traffic through the VNet without a private IP.
Lower cost alternative to Private Endpoints.
Azure Firewall / NSG
Network-layer traffic filtering.
Supplement to either option above.
Apply the appropriate controls after deployment. The example below uses the service endpoint approach:
# Allow access from a specific VNet subnetaz storage account network-rule add \
--account-name <storage-account-name> \
--resource-group <resource-group> \
--vnet-name <vnet-name> \
--subnet <subnet-name>
# Deny all other public accessaz storage account update \
--name <storage-account-name> \
--resource-group <resource-group> \
--default-action Deny
Note: Consult your organization’s security team to select the appropriate access control method before deploying to production.
Setting
Default
Production recommendation
Module
storage_account_replication_type
LRS
ZRS or GRS
00_backup_storage
system_node_pool_vm_size
Standard_D2ds_v4
Standard_D4ds_v4 or larger
02_aks_cluster
key_vault_sku
standard
premium (if HSM required)
00_backup_storage
system_node_pool_zones
["1","2","3"]
Verify per region/SKU; match node_pool_zones
02_aks_cluster
node_pool_zones
["1","2","3"]
Must match system_node_pool_zones
03_node_pool
sku_tier
Free
Standard or Premium
02_aks_cluster
Storage account network access
Public (default)
Private Endpoints, VNet service endpoints, or Firewall
Post-deploy
3.2.3.2 - Configuring PPC for Non-FIPS Deployment on Microsoft Azure
Complete the steps provided in this section to configure the Protegrity Cluster Template (PCT) for a non-FIPS PPC deployment on Azure AKS.
Before you begin
By default, the Azure PPC installation enables FIPS (Federal Information Processing Standards). Follow these steps only if you need to install a non-FIPS cluster. For the standard FIPS-enabled installation, refer to Installing PPC on Microsoft Azure.
Note: The Script-based and Component-based installation instructions reference default FIPS-enabled settings. When following either installation method, do not revert or overwrite the values configured on this page. Keep fips_enabled set to false in 02_aks_cluster and 03_node_pool.
3.2.3.3 - Automated script-based installation
Complete the steps provided in this section to deploy PPC in Microsoft Azure AKS.
Before you begin
Ensure that all the required resources are in the same resource-group. If the resources are in different resource groups, then ensure to move the resources to the same group before proceeding for PPC deployment.
The repository provides a bootstrap script that automatically installs or updates the following tools on the jump box:
Azure CLI - Required to communicate with your Microsoft Azure account.
kubectl - Required to communicate with the Kubernetes cluster.
OpenTofu - Required to manage infrastructure as code.
oras: Required to pull non‑container, generic OCI artifacts from the registry that are not handled by standard container tooling.
Note: If you are performing a non-FIPS deployment, ensure that you have already completed the steps in the section Configuring PPC for Non-FIPS Deployment on Microsoft Azure before proceeding. Do not revert fips_enabled to true or change node_os back to a FIPS-compliant image during the steps below.
Architecture Selection
The step [1b] Select Node Architecture in the bootstrap script prompts to select the node architecture interactively during deployment.
amd64 (x86-64)
Node Pool
VM Size
vCPUs
Memory
System
Standard_D2as_v5
2
8 GB
User
Standard_D8as_v5
8
32 GB
arm64
Node Pool
VM Size
vCPUs
Memory
System
Standard_D2ps_v5
2
8 GB
User
Standard_D8ps_v5
8
32 GB
The bootstrap script prompts you to select the node architecture interactively during deployment (step 1b).
Deploying the PPC
The bootstrap script prompts for variables to be set to complete the deployment. Run the following command and follow the instructions on the screen.
./bootstrap.sh --cloud azure
The script prompts for the following variables.
Enter AKS Cluster Name
The following characters are allowed:
Lowercase letters: a-z
Numbers: 0-9
Hyphens: -
The following characters are not allowed:
Uppercase letters: A-Z
Underscores: _
Spaces
Any special characters such as: / ? * + % ! @ # $ ^ & ( ) = [ ] { } : ; , .
Leading or trailing hyphens
Names longer than 10 characters (the cluster name must be 10 characters or fewer)
Note: Ensure that the cluster name does not exceed 10 characters. Cluster names longer than this limit can cause the bootstrap script to fail in subsequent installation steps. If the installation fails because the cluster name exceeds the 10-character limit, correct the name and re-run the script.
Correction: Choose a cluster name with 31 characters or fewer.
Retry: Execute the installation command again with the updated name. The script will automatically handle the update and proceed with the bootstrap process.
After the cluster name is accepted, the script prompts you to select the node architecture.
[1b] Select Node Architecture
[1b] Select Node Architecture
1) amd64 (x86_64) — e.g. Standard_D8as_v5
2) arm64 (ARM/Ampere) — e.g. Standard_D8ps_v5
Enter 1 to select amd64 or 2 to select arm64.
Note: Select amd64 for standard Intel/AMD 64-bit environments. Select arm64 for ARM-based environments such as AWS Graviton instances.
Querying for available Resource Groups
The script queries for the available Resource Groups.
Enter the Resource Group name from the table []
The script then automatically detects the location and subscription ID of the resource group.
Enter UAMI Resource ID
Provide the complete Azure resource ID for the UAMI used by AKS in the following format:
The script attempts to automatically detect network settings:
Virtual network address space
Service CIDR
DNS service IP
If the detection fails, then default values configured in the terraform.tfvars file are used.
Enter FQDN [name.domain.com]
This is the Fully Qualified Domain Name for the ingress.
Warning: Ensure that the FQDN does not exceed 50 characters and only the following characters are used:
Lowercase letters: a-z
Numbers: 0-9
Special characters: - .
Storage Account and Key Vault provisioning
Choose whether to use existing resources or create new resources:
1) Use existing
2) Provision new via Tofu
Enter 1 if an encrypted Storage Account and Key Vault are already provisioned for this cluster. The installer prompts for the Storage Account name, Key Vault name, backup container, Key Vault key name, and the Velero UAMI Resource ID.
Enter 2 to allow the installer to create a new Storage Account and Key Vault with the velero container, the pty-backup-key encryption key, and a Velero UAMI automatically. Only the new resource names are required.
Enter Velero UAMI Resource ID (required)
Enter the resource ID of the dedicated Velero User-Assigned Managed Identity (UAMI) in the format:
The script automatically validates the UAMI and detects the UAMI Client ID.
Enter Image Registry Endpoint
The image repository from where the container images are retrieved.
Expected format: <hostname>[:port].
Do not include ‘https://’
Enter Registry Username
Enter the username for the registry mentioned in the previous step. Leave this entry blank if the registry does not require authentication.
Enter Registry Password or Access Token
Enter Password or Access Token for the registry.
Input is masked with * characters. Press Enter to keep the current value.
Leave this entry blank if the registry does not require authentication.
Enter Owner Email (for cluster tagging)
Enter email address in the format name@domain.tld. This email is used for the cluster ‘Owner’ tag and the platform owner contact.
Note: The cluster creation process can take 10-15 minutes.
If the session is terminated during installation due to network issues, power outage, and so on, then the installation stops. To restart the installation, run the script again:
# Navigate to setup directory ./bootstrap.sh --cloud azure
After the bootstrap script is completed, verify the cluster and workloads using the following commands:
# Confirm nodes are Readykubectl get nodes
# Confirm NFA workloads are Runningkubectl get pods -A
3.2.3.4 - Manual component-based installation
Complete the steps provided in this section to update the configuration files and deploy PPC in Microsoft Azure AKS.
This section is intended for enterprise customers who need full control over each stage of the AKS cluster deployment. Use this path when individual infrastructure stages must be reviewed or approved separately, when integration with an existing CI/CD pipeline is required, or when corporate change-management controls prevent running an all-in-one automated script. Each stage is self-contained and can be executed by different teams on the same jump box.
Before deploying to production: The default values are optimized for development and staging. Review the Production configuration section to override settings for high availability, data safety, and security compliance before running tofu apply.
Note: If you are performing a non-FIPS deployment, ensure you have already completed Configuring PPC for Non-FIPS Deployment on Microsoft Azure before proceeding. Do not revert fips_enabled to true when performing the following steps.
Deploying PPC using component-based installation
To install PPC, complete the following steps in order. Each step is described in detail in the sections below.
Installs all required CLI tools (OpenTofu, Azure CLI, kubectl, Helm, and others) on the jump box, either automatically via bootstrap.sh install-tools --cloud azure or manually.
Authenticates with Azure using az login and verifies access to the target subscription, resource group, managed identities, subnet, and private DNS zone.
(Skip if using existing resources) Provisions a new Azure Storage Account, Blob container, Key Vault, and encryption key for storing PPC backup data using the 00_backup_storage Terraform module.
Provisions the private AKS cluster with a system node pool, configures networking (Azure CNI Overlay and Cilium), enables Workload Identity, and creates federated identity credentials for Velero and OpenSearch.
Creates default and backup Kubernetes storage classes using Azure Managed Disks (Premium LRS) and removes the built-in default storage class annotation.
Confirms all cluster nodes are in Ready state and all pods are in Running state.
Before you begin
Ensure to have the following prerequisites before proceeding with the installation.
Access and permissions
Requirement
Details
Azure RBAC
Contributor and User Access Administrator on the target subscription or resource group.
Jump box
Debian or Red Hat VM in Azure with internet access to pull the release archive.
Required Roles
The Azure principal must have AKS cluster admin access.
The required Azure RBAC Roles are listed in the following table:
Role
Scope
Used by
Contributor
Resource group
Create AKS cluster, node pool, storage account, Key Vault
User Access Administrator
Resource group
Create role assignments (module 01)
Storage Blob Data Contributor
Backup storage account
Access state files in backend, upload module 00 state
Key Vault Administrator
Key Vault
Create Key Vault and keys (module 00)
AKS Cluster Admin
AKS cluster
Kubernetes API access for Helm, kubectl operations (modules 04, 05)
Deployment Resource Group
All resources created by the installer are provisioned in a single Azure resource group specified using resource_group_name in each terraform.tfvars file. This resource group must exist before running the installer.
The following resources are created inside this resource group.
Note: Skip this step if an Azure Storage Account, backup container, Key Vault, and key already exist for this cluster. Note these values. They will be needed in next steps.
Navigate to the 00_backup_storage directory.
cd iac/azure/cluster/modules/00_backup_storage
Open terraform.tfvars and fill in the required values.
To apply the terraform configuration, run the following command.
tofu init
tofu plan # review the role assignments that will be created tofu apply # type "yes" when prompted
Note the Storage Account, container, Key Vault, and key values for future steps.
4. Filling in each module’s terraform.tfvars
Each module under iac/azure/cluster/modules/ contains its own terraform.tfvars file. There is no single shared configuration file, so the terraform.tfvars file in every module must be updated before running the deployment.
Verify that the following values are the same across all modules:
resource_group_name
aks_cluster_name
azure_subscription_id
storage_account_name
storage_container_name
01_identity module
This stage creates RBAC role assignments for the pre-existing User-Assigned Managed Identities (UAMIs) required by AKS, Velero, and OpenSearch.
Resource
Purpose
Managed Identity Operator role
Allows AKS to assign the UAMI to nodes
Virtual Machine Contributor role
Allows AKS to manage VMs in the node resource group
Disk Snapshot Contributor role
Allows Velero to create and manage disk snapshots
Storage Blob Data Contributor (Velero)
Allows Velero to read/write backup blobs
Key Vault Crypto User role
Allows Velero to encrypt/decrypt backups with the Key Vault key
Storage Blob Data Contributor (OpenSearch)
Allows OpenSearch to store snapshot data in blob storage
To update the 01_identity module, perform the following steps.
a. Navigate to the iac/azure/cluster/modules/01_identity/ directory.
cd iac/azure/cluster/modules/01_identity/
b. Edit the terraform.tfvars file to provide the required values.
resource_group_name = "<resource-group>" # e.g. "aks-rg-prod"
aks_cluster_name = "<cluster-name>" # e.g. "prod-aks-cluster"
azure_subscription_id = "<subscription-id>" # e.g. "1e9ef7b6-cdc4-4a6b-98f7-a408ac1e19e0"
storage_account_name = "<storage-account-name>" # e.g. "myclusterstateaccount"
storage_container_name = "velero"
# -------------------------------------------------
# Pre-existing managed identities (provided by IT)
# -------------------------------------------------
uami_id = "</subscriptions/<subscription-id>/resourceGroups/<it-resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-applianceframework>"
velero_uami_id = "</subscriptions/<subscription-id>/resourceGroups/<velero-resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-velero>" # required
opensearch_uami_id = "</subscriptions/<subscription-id>/resourceGroups/<opensearch-resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aks-opensearch-identity>" # required
# -------------------------------------------------
# Key Vault (leave empty to skip KV role assignment)
# -------------------------------------------------
key_vault_name = "<key-vault-name>" # e.g. "my-key-vault"
c. Save the file and exit the editor.
d. To initialise, plan, and apply the changes, run the following commands.
tofu init
tofu plan # review the role assignments that will be created tofu apply # type "yes" when prompted
e. To verify the resources created in this stage, run the following commands
For AKS UAMI:
# Retrieve the Principal ID of the AKS User-Assigned Managed Identity (UAMI)az identity show \
--ids "<uami-resource-id>"\
--query principalId \
--output tsv
#Use the returned Principal ID to verify the role assignments:
az role assignment list \
--assignee "<aks-uami-principal-id>" \
--output table
For Velero UAMI
# Retrieve the Principal ID of the Velero UAMIaz identity show \
--ids "<velero-uami-principal-id>"\
--query principalId \
--output tsv
#Use the returned Principal ID to verify the role assignments:
az role assignment list \
--assignee "<velero-uami-principal-id>" \
--output table
For OpenSearch UAMI
# Retrieve the Principal ID of the OpenSearch UAMIaz identity show \
--ids "<opensearch-uami-principal-id>"\
--query principalId \
--output tsv
#Use the returned Principal ID to verify the role assignments:
az role assignment list \
--assignee "<opensearch-uami-principal-id>" \
--output table
02_aks_cluster module
This stage provisions the private AKS cluster with a system node pool, configures networking (Azure CNI Overlay and Cilium), enables Workload Identity, and creates federated identity credentials for Velero and OpenSearch.
Resource
Purpose
AKS cluster
Private Kubernetes control plane with OIDC issuer and Workload Identity enabled
System node pool
2-node pool for core Kubernetes components (CoreDNS, metrics-server, etc.)
Federated credential (Velero)
Allows the Velero service account to authenticate as the Velero UAMI
Federated credential (OpenSearch)
Allows the OpenSearch service account to authenticate as the OpenSearch UAMI
Kubeconfig context
Auto-configures kubectl access to the new cluster
To update the 02_aks_cluster module, perform the following steps.
a. Navigate to the iac/azure/cluster/modules/02_aks_cluster/ directory.
b. Edit the terraform.tfvars file to provide the required values.
resource_group_name="<resource-group>"# e.g. "aks-rg-prod"aks_cluster_name="<cluster-name>"# e.g. "prod-aks-cluster"azure_subscription_id="<subscription-id>"# e.g. "1e9ef7b6-cdc4-4a6b-98f7-a408ac1e19e0"storage_account_name="<storage-account-name>"# e.g. "myclusterstateaccount"storage_container_name="velero"# -------------------------------------------------# Identity (UAMI for kubelet and federated credentials)# -------------------------------------------------uami_id="</subscriptions/<subscription-id>/resourceGroups/<it-resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-applianceframework>"# full UAMI resource ID (same as Stage 01)velero_uami_id="</subscriptions/<subscription-id>/resourceGroups/<velero-resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-velero>"# full Velero UAMI resource ID (for federated credential)opensearch_uami_id="</subscriptions/<subscription-id>/resourceGroups/<opensearch-resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aks-opensearch-identity>"# full OpenSearch UAMI resource ID (for federated credential)# -------------------------------------------------# Cluster# -------------------------------------------------azure_location="<region>"# e.g. "eastus" (auto-detected from resource group)subnet_id="</subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Network/virtualNetworks/<vnet>/subnets/<subnet>>"# e.g. "/subscriptions/.../subnets/snet-aks-applianceframework"private_dns_zone_id="</subscriptions/<subscription-id>/resourceGroups/<dns-resource-group>/providers/Microsoft.Network/privateDnsZones/privatelink.eastus.azmk8s.io>"# e.g. "/subscriptions/.../privateDnsZones/privatelink.eastus.azmk8s.io"# -------------------------------------------------# Networking (service CIDR + DNS IP)# -------------------------------------------------service_cidr="<10.0.0.0/16>"# auto-derived by updatevartf.sh (non-overlapping with the VNet)dns_service_ip="<10.220.0.10>"# auto-derived: the .10 host of the chosen service_cidrpod_cidr="<10.0.0.0/16>"# auto-derived: non-overlapping with the VNet and service_cidr# -------------------------------------------------# System node pool# -------------------------------------------------architecture="amd64"# amd64 or arm64system_node_pool_vm_size=""# leave empty to auto-select based on architecturesystem_node_pool_node_count=2system_node_pool_disk_size_gb=50system_node_pool_os_sku="AzureLinux"system_node_pool_zones=["1","2","3"]fips_enabled=true# set false for a non-FIPS node OS image (immutable)# -------------------------------------------------# Ownership / tagging# -------------------------------------------------owner_email="<name@domain.tld>"# optional; blank = auto-detect from the Azure CLI identity
c. Save the file and exit the editor.
d. To initialise, plan, and apply the changes, run the following commands.
tofu init
tofu plan # review the role assignments that will be created tofu apply # type "yes" when prompted
e. To verify the resources created in this stage, run the following commands.
# Confirm the AKS cluster is in Succeeded stateaz aks show --name <cluster-name> --resource-group <resource-group> \
--query "{Name:name, State:provisioningState, Version:kubernetesVersion, Fqdn:privateFqdn}"\
--output table
A sample output is displayed below:
Name State Version Fqdn
---------------- --------- --------- -----------------------------------------------
<cluster-name> Succeeded 1.35 <cluster-name>.privatelink.<region>.azmk8s.io
# Verify kubectl can reach the clusterkubectl get nodes # expect 2 system nodes in Ready state
az identity federated-credential list \
--identity-name <opensearch-uami-name> \
--resource-group <opensearch-uami-resource-group> --output table
03_node_pool module
This stage creates a user-managed node pool for application workloads. Node Auto Provisioning (NAP) handles autoscaling; no cluster autoscaler is configured on this pool.
Resource
Purpose
User node pool (userpool)
Worker nodes for NFA platform, Insight, and other application pods
To update the 03_node_pool module, perform the following steps.
a. Navigate to the iac/azure/cluster/modules/03_node_pool/ directory.
b. Edit the terraform.tfvars file to provide the required values.
resource_group_name = "<resource-group>" # e.g. "aks-rg-prod"
aks_cluster_name = "<cluster-name>" # e.g. "prod-aks-cluster"
azure_subscription_id = "<subscription-id>" # e.g. "1e9ef7b6-cdc4-4a6b-98f7-a408ac1e19e0"
storage_account_name = "<storage-account-name>" # e.g. "myclusterstateaccount"
storage_container_name = "velero"
# -------------------------------------------------
# Node pool
# -------------------------------------------------
subnet_id = "</subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Network/virtualNetworks/<vnet>/subnets/<subnet>>" # same subnet as AKS nodes (Stage 02)
architecture = "amd64" # amd64 or arm64
vm_size = "" # leave empty for architecture default
node_pool_disk_size_gb = 120
node_pool_desired_size = 3
node_pool_zones = ["1", "2", "3"]
fips_enabled = true # set false for a non-FIPS node OS image (immutable)
c. Save the file and exit the editor.
d. To initialise, plan, and apply the changes, run the following commands.
tofu init
tofu plan # review the role assignments that will be created tofu apply # type "yes" when prompted
Expected time for this stage is approximately 5 to 10 minutes for node pool provisioning.
e. To verify the resources created in this stage, run the following commands.
# Confirm the user node pool exists and is Succeededaz aks nodepool show --cluster-name <cluster-name> \
--resource-group <resource-group> --name userpool \
--query "{Name:name, State:provisioningState, Count:count, VmSize:vmSize, OsSku:osSku}"\
--output table
A sample output is displayed below:
Name State Count VmSize OsSku
-------- --------- ------- ---------- ----------
userpool Succeeded <count> <vm-size> AzureLinux
# Verify all nodes are Ready (system + user nodes)kubectl get nodes -o wide
# Confirm user pool nodes have the expected labelkubectl get nodes -l agentpool=userpool
04_aks_addons module
This stage creates the default and backup Kubernetes storage classes using Azure Managed Disks (Premium LRS) and removes the built-in default storage class annotation.
Resource
Purpose
ebs-sc storage class
Default storage class (Premium LRS, WaitForFirstConsumer, expandable)
ebs-bkp storage class
Backup storage class used by Velero for PVC snapshots
Remove built-in default SC
Ensures only ebs-sc is marked as the cluster default
To update the 04_aks_addons module, perform the following steps.
a. Navigate to the iac/azure/cluster/modules/04_aks_addons/ directory.
cd iac/azure/cluster/modules/04_aks_addons/
b. Edit the terraform.tfvars file to provide the required values.
resource_group_name = "<resource-group>" # e.g. "aks-rg-prod"
aks_cluster_name = "<cluster-name>" # e.g. "prod-aks-cluster"
azure_subscription_id = "<subscription-id>" # e.g. "1e9ef7b6-cdc4-4a6b-98f7-a408ac1e19e0"
storage_account_name = "<storage-account-name>" # e.g. "myclusterstateaccount"
storage_container_name = "velero"
c. Save the file and exit the editor.
d. To initialise, plan, and apply the changes, run the following commands.
tofu init
tofu plan # review the role assignments that will be created tofu apply # type "yes" when prompted
e. To verify the resources created in this stage, run the following commands.
# List storage classes and confirm ebs-sc is the defaultkubectl get storageclass
# Confirm the built-in 'default' storage class is no longer the defaultkubectl get storageclass default -o jsonpath='{.metadata.annotations.storageclass\.kubernetes\.io/is-default-class}'# expected output: empty or "false"
This stage deploys all application Helm charts, configures Velero backup with the Azure plugin, and bootstraps the NFA platform and Insight analytics stack.
Resource
Purpose
Velero Helm release
Backup and disaster recovery with Azure Blob Storage and disk snapshots
NFA / Eclipse Helm release
Main platform stack (cert-manager, Keycloak, API Gateway, services)
Insight Helm release
Log aggregation and analytics (OpenSearch, Dashboards, Fluentd)
Reloader Helm release
Auto-restarts workloads on ConfigMap or Secret changes
Envoy Gateway Helm release
API gateway and ingress proxy
VolumeSnapshotClass
CSI snapshot class (csi-azure-vsc) for Azure Disk snapshots
Namespaces & registry secrets
Creates namespaces with image-pull secrets for the private registry
To update the 05_helm_releases module, perform the following steps.
a. Navigate to the iac/azure/cluster/modules/05_helm_releases/ directory.
cd iac/azure/cluster/modules/05_helm_releases/
b. Run the following commands and note the values.
# Get the Velero Client IDaz identity show \
--name id-aks-velero \
--resource-group aks-ppc \
--query clientId \
-o tsv
# Get the OpenSearch Client IDaz identity show \
--name aks-ppc01-opensearch-identity \
--resource-group aks-ppc \
--query clientId \
-o tsv
c. Edit the terraform.tfvars file to provide the required values.
resource_group_name="<resource-group>"# e.g. "aks-rg-prod"aks_cluster_name="<cluster-name>"# e.g. "prod-aks-cluster"azure_subscription_id="<subscription-id>"# e.g. "1e9ef7b6-cdc4-4a6b-98f7-a408ac1e19e0"storage_account_name="<storage-account-name>"# e.g. "myclusterstateaccount"storage_container_name="velero"# -------------------------------------------------# Networking# -------------------------------------------------subnet_id="</subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Network/virtualNetworks/<vnet>/subnets/<subnet>>"# same subnet as Stages 02/03 (for VNet address space lookup)pod_cidr=""# optional override; empty = auto-detected from the live AKS network profilearchitecture="amd64"# amd64 or arm64node_os="AzureLinux_FIPS"# should mirror stage-03 user node pool os_sku + fips_enabled# -------------------------------------------------# Registry# -------------------------------------------------global_image_reg="<registry endpoint>"# e.g. "harbor.example.com"harbor_secret="<harbour secret>"# e.g. "harbor-pull-secret"ingress_fqdn="<FQDN>"# e.g. "apps.example.com"# -------------------------------------------------# Ownership / tagging# -------------------------------------------------owner_email="<name@domain.tld>"# optional; blank = auto-detect from the Azure CLI identity# -------------------------------------------------# Restore / backup# -------------------------------------------------restore=false# set to true to restore from a previous backupbackup_name="authnz-postgresql-schedule-backup"# Velero backup name used when restore = trueinsight_backup_name=""# Insight Velero backup name (K8s resources only); leave empty to auto-resolve latest# -------------------------------------------------# Workload Identity# -------------------------------------------------velero_uami_client_id="<velero_uami_client_id>"# client ID of the Velero UAMI opensearch_uami_client_id="<opensearch_uami_client_id>"# client ID of the OpenSearch UAMI
c. Save the file and exit the editor.
d. Export registry credentials using environment variables. Do not put them in the tfvars file.
The PPC provides a web-based user interface for managing data protection policies, users, and roles. Access the UI through a browser using the cluster’s FQDN. This section covers the prerequisites for resolving the FQDN and the steps to log in.
To access the Web UI, map the gateway hostname to the Microsoft Azure Load Balancer IP address in the local hosts file.
Get gateway details: Find the hostname and the Microsoft Azure Load Balancer address.
kubectl get gateway -A
The output will look similar to:
NAMESPACE NAME CLASS ADDRESS PROGRAMMED AGE
api-gateway pty-main envoy 10.221.8.33 True 5h7m
Update the hosts file: Add an entry mapping the ingress FQDN to the IP.
Linux:/etc/hosts
Windows:C:\Windows\System32\drivers\etc\hosts
Example entry:
10.221.8.33 <FQDN given during cluster installation>
Use the same FQDN provided during the installation process..
Access the UI in the browser.
URL:https://<user-provided-fqdn>
Enter the following parameters to log in and view the Insight Dashboard.
Username: Application username
Password: Application password
For more information about the default credentials, refer to the Release Notes.
3.2.6 - Accessing the PPC CLI
The Protegrity Provisioned Cluster (PPC) CLI provides a command-line interface for managing policies, users, and log forwarding. Access is established over SSH using the private key generated during the PPC installation.
The deployment includes a CLI container that provides command-line access to the Protegrity Management CLI using SSH, on both Linux and Windows.
Prerequisites
SSH key: The private key generated during bootstrap at ~/.ssh/<cluster_name>_user_svc, matches the public key configured in the pty-cli pod.
Network access: Ensure you have connectivity to the AKS cluster’s ingress Load Balancer.
Hosts file: Same as Web UI access. Map the ingress FQDN to the Load Balancer IP.
The private key is placed under ~/.ssh/<cluster_name>_user_svc after bootstrap completes, where <cluster_name> is the AKS cluster name provided during installation.
From the project root directory, run the following command:
Connection > SSH > Auth: Browse to your private key (.ppk format)
Username: ptyitusr
CLI usage
Once connected, the Protegrity CLI welcome banner is displayed. Enter the following parameters when prompted:
Username: Application username
Password: Application password
For more information about the default credentials, refer to the Release Notes.
The CLI supports three command categories:
pim: Policy Information Management commands for data protection policies.
admin: User, role, permission, group, and email management commands.
insight: Log forwarding to external SIEM and syslog servers.
Note: Ensure that at least one additional backup administrator user is configured with the same administrative privileges as the primary admin user. If the primary admin account is locked or its credentials are lost, restoring the system from a backup is the only recovery option.
3.2.7 - Deleting PPC
Steps to delete the cluster
Prerequisites
Authentication
The deletion process uses OpenTofu to destroy Azure resources, such as AKS clusters, managed identities, storage accounts, and Key Vaults. The Azure CLI must be authenticated to perform these operations.
Note: While using temporary credentials, such as service principal tokens or managed identity tokens, ensure that the credentials have not expired before proceeding.
To authenticate and set the correct subscription, run the following commands.
az login
az account set --subscription <subscription-id>
To verify that the credentials are valid and the correct Azure subscription is being used, run the following command.
az account show
Required Resource Providers
The following Azure resource providers must be registered in the subscription before deletion can proceed. If any provider is missing, the destroy operation may fail when attempting to manage the associated resources.
Microsoft.ContainerService
Microsoft.Storage
Microsoft.KeyVault
Microsoft.ManagedIdentity
Microsoft.Network
Microsoft.Compute
Required permissions
The following permissions are required to delete the PPC cluster. Create a custom role with these permissions and assign it to the managed identity used for deletion.
The following tools must be installed and available on the machine before proceeding with deletion:
tofu (OpenTofu)
kubectl (configured with cluster context)
az CLI (authenticated)
helm
Cleaning up the AKS Resources
There are two ways to destroy all created resources, including the AKS cluster and related components.
Method 1: Using the bootstrap script
From the folder where bootstrap script is present, run the following command:
./bootstrap.sh --cloud azure destroy
Method 2: Using OpenTofu to delete all modules
This method displays how to delete a PPC cluster on Azure by destroying the OpenTofu modules in reverse order. Destroying modules one at a time gives full control and visibility over each stage.
Warning: This process is irreversible. All cluster resources, data, and backups stored in the backup storage will be permanently deleted.
These modules must be destroyed in reverse order: 05 → 04 → 03 → 02 → 01 → 00.
To delete the modules, perform the following steps:
To delete the helm releases resource, run the following command.
# Navigate to 05_helm_releases directorycd /iac/azure/cluster/modules/05_helm_releases
# Initialize providerstofu init
# Delete the helm releasetofu destroy # type "yes" when prompted
To delete the AKS Addons resource, run the following command.
# Navigate to 04_aks_addons directorycd /iac/azure/cluster/modules/04_aks_addons
# Initialize providerstofu init
# Delete the aks addonstofu destroy # type "yes" when prompted
To delete the Node Pool resource, run the following command.
# Navigate to 03_node_pool directorycd /iac/azure/cluster/modules/03_node_pool
# Initialize providerstofu init
# Delete the node pooltofu destroy # type "yes" when prompted
To delete the AKS Cluster resource, run the following command.
# Navigate to 02_aks_cluster directorycd /iac/azure/cluster/modules/02_aks_cluster
# Initialize providerstofu init
# Delete the aks clustertofu destroy # type "yes" when prompted
To delete the Identity resource, run the following command.
# Navigate to 01_identity directorycd /iac/azure/cluster/modules/01_identity
# Initialize providerstofu init
# Delete the identitytofu destroy # type "yes" when prompted
To delete the Backup Storage (Backup storage account + container) resource, run the following command.
# Navigate to 00_backup_storage directorycd /iac/azure/cluster/modules/00_backup_storage
# Initialize providerstofu init
# Destroy all resources (Storage Account, Key Vault, container, encryption key)tofu destroy # type "yes" when prompted
3.2.8 - Backing up the PPC
Complete the steps provided in this section to backup a PPC deployment.
Protegrity Provisioned Cluster (PPC) supports backup of Insight indexes and cluster configurations. Use the procedures below to update the scheduled backups of your PPC deployment.
Backing up Velero backup schedule
To take a backup at an interval of 10 minutes, the cron job must be executed before the schedule. This ensures that the latest configurations are included and are available in the Storage Account.By default, the cron job is executed after every 3 hours and schedule is executed after every 3.5 hours.
For taking the backups, the frequency of schedule and cron job can be changed, as required.
Perform the following steps to update the frequency.
To update the frequency of the cron job, run the following command.
Insight indexes are backed up automatically using a scheduled job. To manually back up the indexes, complete the following steps:
Log in to the Insight Dashboard.
Select the main menu.
Navigate to Management > Snapshot Management > Snapshot policies.
Click the daily-insight-snapshots policy.
Click Edit.
Update the following parameters:
Snapshot schedule
Frequency: Custom (Cron expression)
Cron expression: */15 * * * *
Click Update.
Wait for the next scheduled snapshot to complete. Verify that the snapshot is created from the snapshot status.
Note: The snapshot schedule is set to run every 15 minutes for creating the manual backup. Restore the default settings after the manual backup is complete. Before upgrading, disable the scheduler job after the backup is created. Ensure that the default parameters are restored and the job is re-enabled after the upgrade.
3.2.9 - Restoring the PPC
Complete the steps provided in this section to restore a PPC deployment using an existing backup.
Before you begin
Before starting a restore, ensure the following conditions are met:
An existing backup is available. Backups are taken automatically as part of the default installation using scheduled backup mechanisms. These backups are stored in a Storage Account configured during the original installation.
Access to the original backup Storage Account. During restore, the same Storage Account that was used during the original installation must be specified.
Permissions to read from the Storage Account. The user performing the restore must have sufficient permissions to access the backup data stored in the account.
A new Kubernetes cluster is created. Restore is performed as part of creating a new cluster, not on an existing one. Restore is only supported during a fresh installation flow.
While the backup is taken from the source cluster, do not perform Create, Read, Update, or Delete (CRUD) operations on the source cluster. This ensures backup consistency and prevents data corruption during restore.
Before restoring to a new cluster, if the source cluster is accessible, disable the backup operations on the source cluster by setting the backup storage location to read‑only. This ensures that no additional backup data is written during the restore process.
To disable the backup operation on the source cluster, run the following command:
If the source cluster is not accessible, this step can be skipped.
During Disaster management, the backup data is used to restore the cluster and the OpenSearch indexes using snapshots. However, Insight restores OpenSearch data only from the most recent snapshot created by the daily-insight-snapshots policy. For more information, refer to Backing up and restoring indexes.
Warning: Do not install or manage multiple clusters from the same working directory. Each cluster deployment maintains its own Terraform/OpenTofu state, and reusing a directory can overwrite state files, causing loss of cluster tracking and unintended cleanup behavior. Use a dedicated directory, and jump box, where possible, per cluster, and always verify the active kubectl context before running cleanup commands such as ./bootstrap.sh --cloud azure destroy.
The repository provides a bootstrap script that automatically installs or updates the following software on the jump box:
Azure CLI - Required to communicate with your Microsoft Azure account.
OpenTofu - Required to manage infrastructure as code.
kubectl - Required to communicate with the Kubernetes cluster.
skopeo - Required to copy container images between registries.
bc - Required for version comparisons and resource calculations.
ORAS - Required to pull OCI artifacts such as deployment packages.
ssh-keygen - Required to secure SSH access to deployment environments.
cmctl - Required to validate and manage TLS certificates.
The bootstrap script also checks if you have the required permissions on Azure. It then sets up the AKS cluster and installs the microservices required for deploying the PCS on a PPC.
Note: Before running the bootstrap or resiliency scripts as the root user on RHEL, ensure that /usr/local/bin (and the Azure CLI binary path, if applicable) is included in the $PATH. Alternatively, run the script using a non-root user where /usr/local/bin is already part of the default PATH.
Architecture Selection
amd64 (x86-64-based environments such as Standard_D8as_v5)
arm64 (ARM-based environments such as Standard_D8ps_v5)
The bootstrap script prompts you to select the node architecture interactively during deployment (step 1b).
Restoring the PPC
Ensure that the PCT is downloaded and extracted on the jump box.
For more information, refer to Preparing for PPC deployment.
Run the following command to initiate restore using an existing backup:
./bootstrap.sh --cloud azure --restore
The script prompts for the following variables.
Enter AKS Cluster Name [opencluster-v1]
The following characters are allowed:
Lowercase letters: a-z
Numbers: 0-9
Hyphens: -
The following characters are not allowed:
Uppercase letters: A-Z
Underscores: _
Spaces
Any special characters such as: / ? * + % ! @ # $ ^ & ( ) = [ ] { } : ; , .
Leading or trailing hyphens
Names must only contain up to 10 characters
While creating a cluster, the cluster name must:
Start with a lowercase letter.
End with a letter or number.
Not contain consecutive hyphens.
Note: Ensure that the cluster name does not exceed 10 characters. Cluster names longer than this limit can cause the bootstrap script to fail in subsequent installation steps.
After the cluster name is accepted, the script prompts you to select the node architecture.
[1b] Select Node Architecture
Select the required architecture.
[1b] Select Node Architecture
1) amd64 (x86_64) — e.g. Standard_D8as_v5
2) arm64 (ARM/Ampere) — e.g. Standard_D8ps_v5
Enter 1 to select amd64 or 2 to select arm64.
Note: Select amd64 for Standard_D8as_v5 environments. Select arm64 for ARM-based environments such as Standard_D8ps_v5.
Querying for available Resource Groups
The script queries for the available Resource Groups.
Enter the Resource Group name from the table []
The script then automatically detects the location and subscription ID of the resource group.
Enter UAMI Resource ID
Provide the complete Azure resource ID for the UAMI used by AKS in the following format:
The script attempts to automatically detect network settings:
Virtual network address space
Service CIDR
Pod CIDR
DNS service IP
Enter FQDN [name.domain.com]
This is the Fully Qualified Domain Name for the ingress.
While entering the FQDN, ensure that:
contains at least two labels separated by a dot, such as, app.example.com
does not start or end with a dot or hyphen
does not contain consecutive dot character
label length must be between 1–63 characters
each label must start and end with a letter or digit
the last label must start only with a letter
Warning: Ensure that the FQDN does not exceed 253 characters and only the following characters are used:
Lowercase letters: a-z
Numbers: 0-9
Special characters: - .
Storage Account and Key Vault provisioning
During restore, the script prompts for existing Storage Account and Key Vault configuration. Provide the existing values in this step.
Storage Account & Key Vault provisioning
Restore mode requires existing Storage Account and Key Vault configuration.
Skipping provisioning choice; provide existing values in this step.
Enter existing Storage Account Name:
<bucket-name>
Storage account '<bucket-name>' found in resource group '<resource-group>'.
Using container: velero
Enter existing Key Vault Name:
<key-vault-name>
During restore, the script prompts to manually select a backup from the available backups stored in the Storage Account. User input is required to either restore from the latest backup or choose a specific backup from the list.
If n is selected, then the script displays a list of available backups (latest first) and prompts to select one by number:
Available backups (latest first):
[1] <timestamp> authnz-postgresql-schedule-backup-xxxxxxx
[2] <timestamp> authnz-postgresql-schedule-backup-xxxxxxx
Select a backup number (1-2):
After entering the backup number, the chosen backup is used for the restore, and the installation continues.
Enter Insight backup
During restore, the script prompts to manually select the required insight backup from the available backups stored in the Storage Account. User input is required to either restore from the latest backup or choose a specific backup from the list.
If n is selected, then the script displays a list of available backups (latest first) and prompts to select one by number:
Available backups (latest first):
[1] <timestamp> insight-configmaps-secrets-xxxxxxxxx
[2] <timestamp> insight-configmaps-secrets-xxxxxxxxx
Select a backup number (1-2):
After entering the backup number, the chosen backup is used for the restore, and the installation continues.
Enter Velero UAMI Resource ID
Enter the resource ID of the dedicated Velero User-Assigned Managed Identity (UAMI) in the format:
The script automatically validates the UAMI and detects the UAMI Client ID.
Enter Image Registry Endpoint
The image repository from where the container images are retrieved.
Expected format: <hostname>[:port].
Do not include ‘https://’
Enter Registry Username
Enter the username for the registry mentioned in the previous step. Leave this entry blank if the registry does not require authentication.
Enter Registry Password or Access Token
Enter Password or Access Token for the registry.
Input is masked with * characters.
Leave this entry blank if the registry does not require authentication.
Enter Owner Email (for cluster tagging)
Enter email address in the format name@domain.tld. This email is used for the cluster ‘Owner’ tag and the platform owner contact.
Note: The cluster creation process can take approximately 15-20 minutes.
If the session is terminated during installation due to network issues, power outage, and so on, then the installation stops. To restart the installation, run the script again:
# Navigate to deployment directory and run the following command./bootstrap.sh --cloud azure destroy
# Restore the cluster./bootstrap.sh --cloud azure --restore
After the bootstrap script is completed, verify the cluster and workloads using the following commands:
# Confirm nodes are Readykubectl get nodes
# Confirm NFA workloads are Runningkubectl get pods -A
3.2.10 - Troubleshooting
Accessing the PPC CLI
Permission denied for publickey: Ensure the correct private key ~/.ssh/<cluster_name>_user_svc is used and matches the authorized_keys in the pod.
Connection refused: Verify the load balancer IP and hosts file configuration.
Key format issues: Ensure the private key is in the correct format . For example, OpenSSH format for Linux or macOS, .ppk for PuTTY.
Component installation issues
Helm chart not found: Run helm repo update to refresh the repository cache.
Namespace already exists: Drop the --create-namespace flag if the namespace is already created.
CRD conflicts: If cert-manager CRDs already exist, skip the CRD installation step.
Pod not starting: Inspect logs with kubectl logs <pod> -n <namespace> and kubectl describe pod <pod> -n <namespace>.
State lock error after interrupted installation
Issue: When an installation is interrupted mid-apply (Ctrl+C, network drop, SSH disconnect, or jump box crash), subsequent installation attempts fail with the following error:
Error: Error acquiring the state lock
Error message: state blob is already locked
Lock Info:
ID: 9377a903-94d1-4b19-3e57-1ee92b18bed5
Path: https://<storage>.blob.core.windows.net/velero/infrastructure-manifest%2F<cluster>%2Fstates%2F01_identity.tfstate
Operation: OperationTypeApply
Description: OpenTofu acquires a lease on the state blob in Azure Blob Storage before applying changes. If the process is terminated without a graceful shutdown, the lease is not released automatically. This can occur due to Ctrl+C, network disconnection, SSH session timeout, or a jump box reboot.
Resolution: Force-unlock the state using the lock ID from the error message, then re-run the installation.
cd iac/azure/cluster/modules/<failed-stage>
tofu init
tofu force-unlock <lock-id>
Replace <failed-stage> with the module directory that failed (for example, 01_identity) and <lock-id> with the ID shown in the error output.
3.2.11 - Restoring the SSH keys and PCT from backed up Terraform state file
Complete the steps provided in this section to restore the SSH keys and PCT from a backed up Terraform state file of a deleted v1.1.0 jump box.
This section describes the procedure to rebuild a usable PPC v1.1.0 deployment workspace on a jump box from an existing cluster and a backed up Terraform state file.
Before you Begin
Ensure the following requirements are met.
The state file from all the following modules must be available on the Storage Account.
00_backup_bucket
01_iam_roles
02_eks_cluster
03_node_group
04_eks_addons
05_helm_releases
Access to the same Microsoft Azure account and target AKS cluster.
Azure CLI credentials with required permissions.
Perform the following steps to recover PPC
Create a workspace.
To create a working directory for PCT, run the following command.
mkdir -p deployment
cd deployment
Download and extract the PCT
Download the PCT package into the deployment directory and extract it.For more information about downloading and extracting the PCT, refer to Preparing for PPC deployment.
After successfully extracting the template, this directory behaves as recovered installation workspace.
Login to Microsoft Azure as a Service Principal
To login to Microsoft Azure as a Service Principal, run the following command
az login -u <username> -p <password> -t <tenant-id>
Configure kubectl to communicate with the AKS cluster
To configure kubectl to communicate with the AKS cluster, run the following command.
az aks get-credentials \
--resource-group aks-ppc \
--name base-test
Verify the nodes and pods status
To verify the nodes and pods status, run the following command.
kubectl get nodes
kubectl get pods -A
4 - Working with Insight
About the Insight feature.
Insight is a comprehensive system designed to store and manage logs in the Audit Store, which is a repository for all audit data and logs. The Audit Store cluster is scalable and supports multiple nodes. Insight provides various functionalities, including accessing dashboards, viewing logs, and creating visualizations. It also offers tools for analyzing data, monitoring system health, and ensuring secure communication between components.
4.1 - Overview of the dashboards
Use the Insight Dashboard to visualize the data present in the logs. The dashboards provide various charts and graphs for displaying data. Use the predefined graphs or customize and view graphs.
Viewing the graphs provides an easier and faster method for reading the log information. This helps understand the working of the system and also take decisions faster, such as, understanding the processing load on the cluster and accordingly expanding the cluster by adding nodes, if required.
Note: If the Protegrity Agent is installed, then the Protegrity Agent dashboard is displayed. Click Insight to open the Insight Dashboard. For more information about the Protegrity Agent, refer to Using Protegrity Agent.
The data and time are displayed using the UTC format. To update the format, from the Menu, click Dashboards Management > Advanced settings, locate dateFormat:tz (Timezone for date formatting), click Edit, select the required format, and click Save. The appropriate format helps to set the time for scheduled tasks.
Accessing the help
The Insight Dashboard helps visualize log data and information. Use the help documentation provided by Insight to configure and create visualizations.
To access the help:
Open the Insight Dashboard.
Click the Help icon from the upper-right corner of the screen.
View the logs that are stored in the Audit Store using Discover. The basics of the Discover and an overview of running queries on the Discover screen is provided here.
The logs aggregated and collected are sent to Insight. Insight stores the logs in the Audit Store. The logs from the Audit Store are displayed on the Insight Dashboard. Here, the different fields and the data logged is visible. In addition to viewing the data, these logs serve as input for Analytics to analyze the health of the system and to monitor the system for providing security.
View the logs by logging into the system and from the menu, select Discover, and select a time period such as Last 30 days.
Use the default index pty_insight_analytics*audits_* to view the log data. This default index pattern uses wildcard charaters for referencing all indexes. Alternatively, select an index pattern or alias for the entries to view the data from a different index.
After an index is deleted, the data associated with it is permanently removed, and without a backup, there is no way to recover it. For more information about indexes, refer to Managing indexes and OpenSearch Dashboards. For more information about managing Audit Store indexes, refer to Index state management (ISM).
Saved queries
Run a query and customize the log details displayed. Save the query and the settings for running a query, such as, the columns, row count, tail, and indexes for the query. The saved queries created are user-specific.
From Discover, click Open to use the following saved queries to view information:
Policy search: This query is available to view policy logs. A policy log is a created during the the policy creation, policy deployment, policy enforcement, and during the collection, storage, forwarding, and analysis of logs.
Security search: This query is available to view security operation logs. A security log is created during various security operations performed by protectors, such as, performing protect, unprotect, and reprotect operations.
Signature Verification Search: This query is available to view signature verification information.
Unsuccessful Security Operations: This query is available to view unsuccessful security operation-related logs. Unsuccessful Security Operations logs are created when security operations fail due to errors, warnings, or exceptions.
Log in to the Insight Dashboard using a web browser.
Select Discover from the menu, and optionally select a time period such as Last 30 days..
Select the index for running the query.
Enter the query in the Search field.
Optionally, select the required fields.
Click the See saved queries icon to save the query.
The Saved Queries list appears.
Click Save current query.
The Save query dialog box appears.
Specify a name for the query.
Click Save to save the query information, including the configurations specified, such as, the columns, row count, tail, indexes, and query.
The query is saved.
Click the See saved queries icon to view the saved queries.
4.2.1 - Understanding the Insight indexes
The contents of the various logs that are generated by the Protegrity products describe the working of the system. It helps understand the health of the system, identify issues, and help in troubleshooting.
All the features and Protectors send logs to Insight. The logs from the Audit Store are displayed on the Discover screen of the Insight Dashboard. Here, you can view the different fields logged. In addition to viewing the data, these logs serve as input for Insight to analyze the health of the system and to monitor the system for providing security. These logs are stored in the Audit index with the name, such as, pty_insight_analytics_audits_1.0*.
You can view the Discover screen by logging into the Insight Dashboard, selecting Discover from the menu, and selecting a time period such as Last 30 days.
The following table lists the various indexes and information about the data contained in the index. You can view the index list for PPC, by logging into the Insight Dashboard, and navigating to Index Management > State management policies. To view all the indexes, select Indexes. Indexes can be created or deleted. However, deleting an index will lead to a permanent loss of data in the index. If the index was not backed up earlier, then the logs from the index deleted cannot be recreated or retrieved.
Index Name
Description
.kibana_1
This is a system index created by the Audit Store. This hold information about the dashboards.
.opendistro-job-scheduler-lock
This is a system index created by the Audit Store. This hold information about the security, roles, mapping, and so on.
.opendistro_security
This is a system index created by the Audit Store. It contains information about the security configurations, users, roles, and permissions.
.plugins-ml-config
This is a system index created by the Audit Store
.ql-datasources
This is a system index created by the Audit Store.
This index logs Data Anonymization dashboard and process tracking information.
pty_insight_analytics_audits_1.0--000001
This index logs the audit data for all the URP operations and the cluster logs. It also captures all logs with the log type protection, metering, audit, and security.
pty_insight_analytics_crons_1.0
This index logs information about the cron scheduler jobs.
pty_insight_analytics_crons_logs_1.0
This index logs for the cron scheduler when the jobs are executed.
This index logs information about the signature verification jobs that are currently running.
pty_insight_analytics_troubleshooting_1.0--000001
This index logs the log type application, kernel, system, and verification.
top_queries-
This index logs the top and most frequent search queries and query analytics data.
4.2.2 - Understanding the index field values
This section lists information about the various fields logged for the Protection, Policy, Application, Audit, Kernel, Security, and Verification logs. It helps you understand the information that is contained in the logs and is useful for troubleshooting the system.
Common Logging Information
These logging fields are common with the different log types generated by Protegrity products.
Note: These common fields are used across all log types.
Field
Data Type
Description
Source
Example
cnt
Integer
The aggregated count for a specific log.
Protector
5
logtype
String
The type of log. For example, Protection, Policy, Application, Audit, Kernel, System, or Verification. For more examples about the log types, refer here.
Protector
Protection
level
String
The level of severity. For example, SUCCESS, WARNING, ERROR, or INFO. These are the results of the logging operation. For more information about the log levels, refer here.
Protector
SUCCESS
starttime
Date
This is an unused field.
Protector
endtime
Date
This is an unused field.
Protector
index_time_utc
Date
The time the log was inserted into the Audit Store.
Audit Store
Mar 8, 2025 @ 12:55:24.733
ingest_time_utc
Date
The time the Log Forwarder processed the logs.
Log Forwarder
Mar 8, 2025 @ 12:56:22.027
uri
String
The URI for the log. This is an unused field.
correlationid
String
A unique ID that is generated when the policy is deployed.
Hubcontroller
clo5nyx470bi59p22fdrsr7k3
filetype
String
This is the file type, such as, regular file, directory, or device, when operations are performed on the file. This displays the value ISREG for files and ISDIR for directories. This is only used in File Protector.
File Protector
ISDIR
index_node
String
The index node that ingested the log.
Audit Store
protegrity-ppc746/192.168.2.20
operation
String
This is an unused field.
path
String
This field is provided for Protector-related data.
File Protector
/hmount/source_dir/postmark_dir/postmark/1
system_nano_time
Long
This displays the time in nano seconds for the Signature Verification job.
Signature Verification
255073580723571
tiebreaker
Long
This is an internal field that is used with the index time to make a record unique across nodes for sorting.
Protector, Signature Verification
2590230
_id
String
This is the entry id for the record stored in the Audit Store.
Log Forwarder, td-agent
NDgyNzAwMDItZDI5Yi00NjU1LWJhN2UtNzJhNWRkOWYwOGY3
_index
String
This is the index name of the Audit Store where the log is stored.
These descriptions are used for all types of logs.
Field
Data Type
Description
Source
Example
description
String
Description about the log generated.
All modules
Data protect operation was successful, Executing attempt_rollover for , and so on.
module
String
The module that generated the log.
All modules
.signature.job_runner
procedure
String
The method in the module that generated the log.
All modules
create_job
title
String
The title for the audit log.
Feature
Process
This section describes the properties of the process that created the log. For example, the protector or the rputils.
Field
Data Type
Description
Source
Example
thread_id
String
The thread_id of the process that generated the log.
PEP Server
3382487360
id
String
The id of the process that generated the log.
PEP Server
41710
user
String
The user that runs the program that generated the log.
All modules
service_admin
version
String
The version of the program or Protector that generated the log.
All modules
1.2.2+49.g126b2.1.2
platform
String
The platform that the program that generated the log is running on.
PEP Server
Linux_x64
module
String
The module that generated the log.
PPC, Protector
rpstatus
name
String
The name of the process that generated the log.
All modules
Protegrity PEP Server
pcc_version
String
The core pcc version.
PEP Server
3.4.0.20
Origin
This section describes the origin of the log, that is, from where the log came from and when it was generated.
Field
Data Type
Description
Source
Example
time_utc
Date
The time in the Coordinated Universal Time (UTC) format when the log was generated.
All modules
Mar 8, 2026 @ 12:56:29.000
hostname
String
The hostname of the machine where the log was generated.
All modules
ip-192-16-1-20.protegrity.com
ip
IP
The IP of the machine where the log was generated.
All modules
192.168.1.20
Protector
This section describes the Protector that generated the log. For example, the vendor and the version of the Protector.
Note: For more information about the Protector vendor, family, and version, refer here.
Field
Data Type
Description
Source
Example
vendor
String
The vendor of the Protector that generated the log. This is specified by the Protector.
Protector
family
String
The Protector family of the Protector that generated the logs. This is specified by the Protector. For more information about the family, refer here.
Protector
gwp
version
String
The version of the Protector that generated the logs. This is specified by the Protector.
Protector
1.2.2+49.g126b2.1.2
core_version
String
This is the Core component version of the product.
Protector
1.2.2+49.g126b2.1.2
pcc_version
String
This is the PCC version.
Protector
3.4.0.20
Protection
This section describes the protection that was done, what was done, the result of the operation, where it was done, and so on.
Field
Data Type
Description
Source
Example
policy
String
The name of the policy. This is only used in File Protector.
Protector
aes1-rcwd
role
String
This field is not used and will be deprecated.
Protector
datastore
String
The name of the datastore used for the security operation.
Protector
Testdatastore
audit_code
Integer
The return code for the operation. For more information about the return codes, refer to Log return codes.
Protector
6
session_id
String
The identifier for the session.
Protector
request_id
String
The ID of the request that generated the log.
Protector
old_dataelement
String
The old dataelement value before the reprotect to a new dataelement.
Protector
AES128
mask_setting
String
The mask setting used to protect data.
Protector
Mask Left:4 Mask Right:4 Mark Character:
dataelement
String
The dataelement used when protecting or unprotecting data. This is passed by the Protector performing the operation.
Protector
PTY_DE_CCN
operation
String
The operation, for example Protect, Unprotect, or Reprotect. This is passed in by the Protector performing the operation.
Protector
Protect
policy_user
String
The policy user for which the operation is being performed. This is passed in by the Protector performing the operation.
Protector
exampleuser1
devicepath
String
The path to the device. This is only used in File Protector.
Protector
/hmount/fuse_mount
filetype
String
The type of file that was protected or unprotected. This displays the value ISREG for files and ISDIR for directories. This is only used in File Protector.
Protector
ISREG
path
String
The path to the file protected or unprotected by the File Protector. This is only used in File Protector.
Protector
/testdata/src/ez/audit_log(13).csv
Client
This section describes from where the log came from.
Field
Data Type
Description
Source
Example
ip
String
The IP of the client that generated the log.
Protector
192.168.2.10
username
String
The username that ran the Protector or Server on the client that created the log.
Hubcontroller
johndoe
Policy
This section describes the information about the policy.
Field
Data Type
Description
Source
Example
audit_code
Integer
This is the policy audit code for the policy log.
PEP Server
198
policy_name
String
This is the policy name for the policy log.
PEP Server
AutomationPolicy
severity
String
This is the severity level for the policy log entry.
PEP Server
Low
username
String
This is the user who modified the policy.
PEP Server
johndoe
Signature
This section handles the signing of the log. The key that was used to sign the log and the actual checksum that was generated.
Field
Data Type
Description
Source
Example
key_id
String
The key ID of the signingkey that signed the log record.
Protector
cc93c930-2ba5-47e1-9341-56a8d67d55d4
checksum
String
The checksum that was the result of signing the log.
The index configuration, samples, and entry descriptions describe help identify and analyze the log entries in the indexes.
Audit index
The log types of protection, metering, audit, and security are stored in the audit index. These log are generated during security operations. The logs generated by protectors are stored in the pty_insight_analytics_*audits* audit index.
Protection logs
These logs are generated by protectors during protecting, unprotecting, and reprotecting data operations. These logs are generated by protectors.
Use the following query in Discover to view these logs.
This example includes data from each of the following groups defined in the index:
additional_info
client
origin
process
For more information about the various fields, refer here.
Security logs
These logs are generated by security events of the system.
Use the following query in Discover to view these logs.
logtype:security
For more information about the various fields, refer here.
Troubleshooting index
The log types of application, kernel, system, and verification logs are stored in the troubleshooting index. These logs helps you understand the working of the system. The logs stored in this index are essential when the system is down or has issues. This is the pty_insight_analytics_troubleshooting index. The index pattern for viewing these logs in Discover is pty_insight_analytics_*troubleshooting_*.
Application Logs
These logs are generated by Protegrity servers and Protegrity applications.
Use the following query in Discover to view these logs.
The above example contains the following information:
additional_info
origin
process
For more information about the various fields, refer here.
Kernel logs
These logs are generated by the kernel and help you analyze the working of the internal system. Some of the modules that generate these logs are CRED_DISP, KERNEL, USER_CMD, and so on.
Use the following query in Discover to view these logs.
logtype:Kernel
For more information and description about the components that can generate kernel logs, refer here.
For a list of components and modules and the type of logs they generate, refer here.
This example includes data from each of the following groups defined in the index:
additional_info
process
origin
verification
For more information about the various fields, refer here.
Policy log index
The log type of policy is stored in the policy log index. They include logs for the policy-related operations, such as, when the policy is updated. The index pattern for viewing these logs in Discover is pty_insight_analytics_*policy_log_*.
Use the following query in Discover to view these logs.
logtype:policyLog
For a list of components and modules and the type of logs they generate, refer here.
For more information about the various fields, refer here.
Policy Status Dashboard index
The policy status dashboard index contains information for the Policy Status Dashboard. It holds the policy and trusted application deployment status information. The index pattern for viewing these logs in Discover is pty_insight_analytics*policy_status_dashboard_*.
The protector status logs generated by protectors are stored in this index. The index pattern for viewing these logs in Discover is pty_insight_analytics_protectors_status_*.
Use the following query in Discover to view these logs.
The protector status dashboard index contains information for the Protector Status Dashboard. It holds the protector status information. The index pattern for viewing these logs in Discover is pty_insight_analytics*protector_status_dashboard_.
The logs that are not added to the other indexes are captured and stored in the miscellaneous index. The index pattern for viewing these logs in Discover is pty_insight_analytics_miscellaneous_*.
This index should not contain any logs. If any logs are visible in this index, then kindly contact Protegrity support.
Use the following query in Discover to view these logs.
logtype:miscellaneous;
4.2.4 - Log return codes
The log codes and the descriptions help you understand the reason for the code and is useful during troubleshooting.
Return Code
Description
0
Error code for no logging
1
The username could not be found in the policy
2
The data element could not be found in the policy
3
The user does not have the appropriate permissions to perform the requested operation
4
Tweak is null
5
Integrity check failed
6
Data protect operation was successful
7
Data protect operation failed
8
Data unprotect operation was successful
9
Data unprotect operation failed
10
The user has appropriate permissions to perform the requested operation but no data has been protected/unprotected
11
Data unprotect operation was successful with use of an inactive keyid
12
Input is null or not within allowed limits
13
Internal error occurring in a function call after the provider has been opened
14
Failed to load data encryption key
15
Tweak input is too long
16
The user does not have the appropriate permissions to perform the unprotect operation
17
Failed to initialize the PEP: this is a fatal error
19
Unsupported tweak action for the specified fpe data element
20
Failed to allocate memory
21
Input or output buffer is too small
22
Data is too short to be protected/unprotected
23
Data is too long to be protected/unprotected
24
The user does not have the appropriate permissions to perform the protect operation
25
Username too long
26
Unsupported algorithm or unsupported action for the specific data element
27
Application has been authorized
28
Application has not been authorized
29
The user does not have the appropriate permissions to perform the reprotect operation
30
Not used
31
Policy not available
32
Delete operation was successful
33
Delete operation failed
34
Create operation was successful
35
Create operation failed
36
Manage protection operation was successful
37
Manage protection operation failed
38
Not used
39
Not used
40
No valid license or current date is beyond the license expiration date
41
The use of the protection method is restricted by license
42
Invalid license or time is before license start
43
Not used
44
The content of the input data is not valid
45
Not used
46
Used for z/OS query default data element when policy name is not found
47
Access key security groups not found
48
Not used
49
Unsupported input encoding for the specific data element
50
Data reprotect operation was successful
51
Failed to send logs, connection refused
52
Return code used by bulkhandling in pepproviderauditor
4.2.5 - Protectors security log codes
The log codes and the descriptions for all protectors. This log information helps analyze the results of the protection operations.
The security logging level can be configured when a data security policy is created in the Policy management in PPC. If logging level is set to audit successful and audit failed, then both successful and failed Unprotect/Protect/Reprotect/Delete operations will be logged.
You can define the server where these security audit logs will be sent to. You can do that by modifying the Log Server configuration section in pepserver.cfg file.
If you configure to send protector security logs to the PPC, you will be able view them in Discover, by logging into the Insight Dashboard, selecting Discover from the menu, and selecting a time period such as Last 30 days. The following table displays the logs sent by protectors.
Log Code
Severity
Description
Error Message
DB / AP Operations
MSSQL
Teradata
Oracle
DB2
XC API Definitions
Recovery Actions
0
S
Internal ID when audit record should not be generated.
-
-
-
-
-
-
XC_LOG_NONE
No action is required.
1
W
The username could not be found in the policy in shared memory.
No such user
URPD
1
01H01 or U0001
20101
38821
XC_LOG_USER_NOT_FOUND
Verify that the user that calls a PTY function is in the policy. Ensure that your policy is synchronized across all Teradata nodes. Make sure that the PPC connectivity information is correct in the pepserver.cfg file.
2
W
The data element could not be found in the policy in shared memory.
No such data element
URPD
2
U0002
20102
38822
XC_LOG_DATA_ELEMENT_NOT_FOUND
Verify that you are calling a PTY function with data element that exists in the policy.
3
W
The data element was found, but the user does not have the appropriate permissions to perform the requested operation.
Permission denied
URPD
3
01H03 or U0003
20103
38823
XC_LOG_PERMISSION_DENIED
Verify that you are calling a PTY function with a user having access permissions to perform this operation according to the policy.
4
E
Tweak is null.
Tweak null
URPD
4
01H04 or U0004
20104
38824
XC_LOG_TWEAK_NULL
Ensure that the tweak is not a null value.
5
W
The data integrity check failed when decrypting using a Data Element with CRC enabled.
Integrity check failed
U—
5
U0005
20105
38825
XC_LOG_INTEGRITY_CHECK_FAILED
Check that you use the correct data element to decrypt. Check that your data was not corrupted, restore data from the backup.
6
S
The data element was found, and the user has the appropriate permissions for the operation. Data protection was successful.
-RP-
6
U0006
20106
38826
XC_LOG_PROTECT_SUCCESS
No action is required.
7
W
The data element was found, and the user has the appropriate permissions for the operation. Data protection was NOT successful.
-RP-
7
U0007
20107
38827
XC_LOG_PROTECT_FAILED
Failed to create Key ID crypto context. Verify that your data is not corrupted and you use valid combination of input data and data element to encrypt.
8
S
The data element was found, and the user has the appropriate permissions for the operation. Data unprotect operation was successful. If mask was applied to the DE, then the appropriate record is added to the audit log description.
U—
8
U0008
20108
38828
XC_LOG_UNPROTECT_SUCCESS
No action is required.
9
W
The data element was found, and the user has the appropriate permissions for the operation. Data unprotect operation was NOT successful.
U—
9
U0009
20109
38829
XC_LOG_UNPROTECT_FAILED
Failure to decrypt data with Key ID by data element without Key ID. Verify that your data is not corrupted and you use valid combination of input data and data element to decrypt.
10
S
Policy check OK. The data element was found, and the user has the appropriate permissions for the operation. NO protection operation is done.
—D
10
U0010
20110
38830
XC_LOG_OK_ACCESS
No action is required. Successful DELETE operation was performed.
11
W
The data element was found, and the user has the appropriate permissions for the operation. Data unprotect operation was successful with use of an inactive key ID.
U—
11
U0011
20111
38831
XC_LOG_INACTIVE_KEYID_USED
No action is required. Successful UNPROTECT operation was performed.
12
E
Input parameters are either NULL or not within allowed limits.
URPD
12
U0012
20112
38832
XC_LOG_INVALID_PARAM
Verify the input parameters are correct.
13
E
Internal error occurring in a function call after the PEP Provider has been opened. For instance: - failed to get mutex/semaphore, - unexpected null parameter in internal (private) functions, - uninitialized provider, etc.
URPD
13
U0013
20113
38833
XC_LOG_INTERNAL_ERROR
Restart PEP Server and re-deploy the policy.
14
W
A key for a data element could not be loaded from shared memory into the crypto engine.
Failed to load data encryption key - Cache is full, or Failed to load data encryption key - No such key, or Failed to load data encryption key - Internal error.
URP-
14
U0014
20114
38834
XC_LOG_LOAD_KEY_FAILED
If return message is ‘Cache is full’, then logoff and logon again, clear the session and cache. For all other return messages restart PEP Server and re-deploy the policy.
15
Tweak input is too long.
16
The user does not have the appropriate permissions to perform the unprotect operation.
17
E
A fatal error was encountered when initializing the PEP.
URPD
17
U0017
20117
38837
XC_LOG_INIT_FAILED
Re-install the protector, re-deploy policy.
19
Unsupported tweak action for the specified fpe data element.
20
E
Failed to allocate memory.
URPD
20
U0020
20120
38840
XC_LOG_OUT_OF_MEMORY
Check what uses the memory on the server.
21
W
Supplied input or output buffer is too small.
Buffer too small
URPD
21
U0021
20121
38841
XC_LOG_BUFFER_TOO_SMALL
Token specific error about supplied buffers. Data expands too much, using non-length preserving Token element. Check return message for specific error, and verify you use correct combination of data type (encoding), and token element. Verify supported data types according to Protegrity Protection Methods Reference 7.2.1.
22
W
Data is too short to be protected or unprotected. E.g. Too few characters were provided when tokenizing with a length-preserving token element.
Input too short
URPD
22
U0022
20122
38842
XC_LOG_INPUT_TOO_SHORT
Provide the longer input data.
23
W
Data is too long to be protected or unprotected. E.g. Too many characters were provided.
Input too long
URPD
23
U0023
20123
38843
XC_LOG_INPUT_TOO_LONG
Provide the shorter input data.
24
The user does not have the appropriate permissions to perform the protect operation.
25
W
Unauthorized Username too long.
Username too long.
UPRD
-
U0025
-
-
Run query by user with Username up to 255 characters long.
26
E
Unsupported algorithm or unsupported action for the specific data element or unsupported policy version. For example, unprotect using HMAC data element.
URPD
26
U0026
20126
38846
XC_LOG_UNSUPPORTED
Check the data elements used for the crypto operation. Note that HMAC data elements cannot be used for decrypt and re-encrypt operations.
27
Application has been authorized.
28
Application has not been authorized.
29
The JSON type is not serializable.
30
W
Failed to save audit record in shared memory.
Failed to save audit record
URPD
30
U0030
20130
38850
XC_LOG_AUDITING_FAILED
Check if PEP Server is started.
31
E
The policy shared memory is empty.
Policy not available
URPD
31
U0031
20131
38851
XC_LOG_EMPTY_POLICY
No policy is deployed on PEP Server.
32
Delete operation was successful.
33
Delete operation failed.
34
Create operation was successful.
35
Create operation failed.
36
Manage protection operation was successful.
37
Manage protection operation failed.
39
E
The policy in shared memory is locked. This is the result of a disk full alert.
Policy locked
URPD
39
U0039
20139
38859
XC_LOG_POLICY_LOCKED
Fix the disk space and restart the PEP Server.
40
E
No valid license or current date is beyond the license expiration date.
License expired
-RP-
40
U0040
20140
38860
XC_LOG_LICENSE_EXPIRED
PPC System Administrator should request and obtain a new license. Re-deploy policy with renewed license.
41
E
The use of the protection method is restricted by the license.
Protection method restricted by license.
URPD
41
U0041
20141
38861
XC_LOG_METHOD_RESTRICTED
Perform the protection operation with the protection method that is not restricted by the license. Request license with desired protection method enabled.
42
E
Invalid license or time is before license start time.
License is invalid.
URPD
42
U0042
20142
38862
XC_LOG_LICENSE_INVALID
PPC System Administrator should request and obtain a new license. Re-deploy policy with renewed license.
44
W
Content of the input data to protect is not valid (e.g. for Tokenization). E.g. Input is alphabetic when it is supposed to be numeric.
Invalid format
-RP-
44
U0044
20144
38864
XC_LOG_INVALID_FORMAT
Verify the input data is of the supported alphabet for specified type of token element.
46
E
Used for z/OS Query Default Data element when policy name is not found.
No policy. Cannot Continue.
46
n/a
n/a
n/a
XC_LOG_INVALID_POLICY
Specify the valid policy. Policy name is case sensitive.
47
Access Key security groups not found.
48
Rule Set not found.
49
Unsupported input encoding for the specific data element.
50
S
The data element was found, and the user has the appropriate permissions for the operation. The data Reprotect operation is successful.
-R-
n/a
n/a
n/a
n/a
No action is required. Successful REPROTECT operation was performed.
51
Failed to send logs, connection refused!
4.2.6 - Additional log information
The descriptions for the details diaplayed in logs helps identify the type and reason for raising the log entry.
These are values for understanding the values that are displayed in the log records.
Log levels
Most events on the system generate logs. The level of the log helps you understand whether the log is just an information message or denotes some issue with the system. The log message and the log level allows you to understand more about the working of the system and also helps you identify and troubleshoot any system issues.
Protection logs: These logs are generated for Unprotect, Reprotect, and Protect (URP) operations.
SUCCESS: This log is generated for a successful URP operation.
WARNING: This log is generated if a user does not have access and the operation is unprotect.
EXCEPTION: This log is generated if a user does not have access, the operation is unprotect, and the return exception property is set.
ERROR: This log is generated for all other issues.
Application logs: These logs are generated by the application. The log level denotes the severity level of the log, however, levels 1 and 6 are used for the log configuration.
1: OFF. This level is used to turn logging off.
2: SEVERE. This level indicates a serious failure that prevents normal program execution.
3: WARNING. This level indicates a potential problem or an issue with the system.
4: INFO. This level is used to display information messages about the application.
5: CONFIG. This level is used to display static configuration information that is useful during debugging.
6: ALL. This level is used to log all messages.
Policy logs: These logs are used for the policy logs.
LOWEST
LOW
NORMAL
HIGH
CRITICAL
N/A
Protector information
The information displayed in the Protector-related fields of the audit log are listed in the table.
protector.family
protector.vendor
protector.version
APPLICATION PROTECTORS
sdk
C
9.1.0.0.x
sdk
Java
10.0.0+x, 9.1.0.0.x
sdk
Python
9.1.0.0.x
sdk
Go
9.1.0.0.x
sdk
NodeJS
9.1.0.0.x
sdk
DotNet
9.1.0.0.x
TRUSTED APPLICATION LOGS IN APPLICATION PROTECTORS
<process.name>
C
9.1.0.0.x
<process.name>
Java
9.1.0.0.x
<process.name>
Python
9.1.0.0.x
<process.name>
Go
9.1.0.0.x
<process.name>
NodeJS
9.1.0.0.x
<process.name>
DotNet
9.1.0.0.x
DATABASE PROTECTOR
dbp
SqlServer
9.1.0.0.x
dbp
Oracle
9.1.0.0.x
dbp
Db2
9.1.0.0.x
dwp
Teradata
10.0.0+x, 9.1.0.0.x
dwp
Exadata
9.1.0.0.x
BIG DATA PROTECTOR
bdp
Impala
9.2.0.0.x, 9.1.0.0.x
bdp
Mapreduce
9.2.0.0.x, 9.1.0.0.x
bdp
Pig
9.2.0.0.x, 9.1.0.0.x
bdp
HBase
9.2.0.0.x, 9.1.0.0.x
bdp
Hive
9.2.0.0.x, 9.1.0.0.x
bdp
Spark
9.2.0.0.x, 9.1.0.0.x
bdp
SparkSQL
9.2.0.0.x, 9.1.0.0.x
All Protectors displayed here may not be compatible with this release. Refer to your contract for compatible products.
Modules and components and the log type
Some of the components and modules and the logtype that they generate are provided in the following table.
Module / Component
Protection
Policy
Application
Audit
Kernel
System
Verification
as_image_management.pyc
✓
as_memory_management.pyc
✓
asmanagement.pyc
✓
buffer_watch.pyc
✓
devops
✓
PPCPAP
✓
fluentbit
✓
hubcontroller
✓
imps
✓
insight.pyc
✓
insight_cron_executor.pyc
✓
insight_cron_job_method_executor.pyc
✓
kmgw_external
✓
kmgw_internal
✓
logfacade
✓
membersource
✓
meteringfacade
✓
PIM_Cluster
✓
Protegrity PEP Server
✓
TRIGGERING_AGENT_policy_deploy.pyc
✓
For more information and description about the components that can generate kernel logs, refer here.
Kernel logs
This section lists the various kernel logs that are generated.
INTEGRITY_DATA: The data integrity verification event run by the kernel.
INTEGRITY_EVM_XATTR: The EVM-covered extended attribute is modified.
INTEGRITY_HASH: The hash type integrity verification event run by the kernel.
INTEGRITY_METADATA: The metadata integrity verification event run by the kernel.
INTEGRITY_PCR: The Platform Configuration Register (PCR) invalidation messages.
INTEGRITY_RULE: A policy rule.
INTEGRITY_STATUS: The status of integrity verification.
Intrusion Prevention System:
Anomaly detected:
ANOM_ABEND
ANOM_ACCESS_FS
ANOM_ADD_ACCT
ANOM_AMTU_FAIL
ANOM_CRYPTO_FAIL
ANOM_DEL_ACCT
ANOM_EXEC
ANOM_LINK
ANOM_LOGIN_ACCT
ANOM_LOGIN_FAILURES
ANOM_LOGIN_LOCATION
ANOM_LOGIN_SESSIONS
ANOM_LOGIN_TIME
ANOM_MAX_DAC
ANOM_MAX_MAC
ANOM_MK_EXEC
ANOM_MOD_ACCT
ANOM_PROMISCUOUS
ANOM_RBAC_FAIL
ANOM_RBAC_INTEGRITY_FAIL
ANOM_ROOT_TRANS
Responses:
RESP_ACCT_LOCK_TIMED
RESP_ACCT_LOCK
RESP_ACCT_REMOTE
RESP_ACCT_UNLOCK_TIMED
RESP_ALERT
RESP_ANOMALY
RESP_EXEC
RESP_HALT
RESP_KILL_PROC
RESP_SEBOOL
RESP_SINGLE
RESP_TERM_ACCESS
RESP_TERM_LOCK
Miscellaneous:
ALL: Matches all types.
KERNEL_OTHER: The record information from third-party kernel modules.
EOE: An end of a multi-record event.
TEST: The success value of a test message.
TRUSTED_APP: The record of this type can be used by third-party application that require auditing.
TTY: The TTY input that was sent to an administrative process.
USER_TTY: An explanatory message about TTY input to an administrative process that is sent from the user-space.
USER: The user details.
USYS_CONFIG: A user-space system configuration change is detected.
TIME_ADJNTPVAL: The system clock is modified.
TIME_INJOFFSET: A Timekeeping offset is injected to the system clock.
4.3 - Viewing the dashboards
Protegrity provides Insight Dashboard which helps analyze data and operations performed. Use the graphs and heat maps to visualize the logs in the Audit Store.
The dashboards are built using visualizations. Use the information from Viewing visualizations to customize and build dashboards.
Note: Do not clone, delete, or modify the configuration or details of the dashboards that are provided by Protegrity. To create a customized dashboard, first clone and customize the required visualizations, then create a dashboard, and place the customized visualizations on the dashboard.
To view a dashboard:
Log in to the Insight Dashboard.
From the navigation panel, click Dashboards.
Click the dashboard.
Viewing the Security Operation Dashboard
The security operation dashboard displays the counts of individual and total number of security operations for successful and unsuccessful operations. The Security Operation Dashboard has a table and pie charts that summarizes the security operations performed by a specific data store, protector family, and protector vendor. This dashboard shows different visualizations for the Successful Security Operations, Security Operations, Reprotect Counts, Successful Security Operation Counts, Security Operation Counts, Security Operation Table, and Unsuccessful Security Operations.
Note: Do not delete this dashboard.
The dashboard has the following panels:
Total Security Operations: Displays pie charts for the following security operations:
Successful: Total number of security operations that succeeded.
Unsuccessful: Total number of security operations that were unsuccessful.
Successful Security Operations: Displays pie charts for the following security operations:
Protect: Total number of protect operations.
Unprotect: Total number of unprotect operations.
Reprotect: Total number of reprotect operations.
Unsuccessful Security Operations: Displays pie charts for the following security operations:
Error: Total number of operations that were unsuccessful due to an error.
Warning: Total number of operations that were unsuccessful due to a warning.
Exception: Total number of operations that were unsuccessful due to an exception.
Total Security Operation Values: Displays the following information:
Successful - Count: Total number of security operations that succeeded.
Unsuccessful - Count: Total number of security operations that were unsuccessful.
Successful Security Operation Values: Displays the following information:
Protect - Count: Total number of protect operations.
Unprotect - Count: Total number of unprotect operations.
Reprotect - Count: Total number of reprotect operations.
Unsuccessful Security Operation Values: Displays the following information:
ERROR - Count: Total number of error logs.
WARNING - Count: Total number of warning logs.
EXCEPTION - Count: Total number of exception logs.
Security Operation Table: Displays the number of security operations done for a data store, protector family, protector vendor, and protector version.
Unsuccessful Security Operations: Displays a list of unsuccessful security operations with details, such as, time, data store, protector family, protector vendor, protector version, IP, hostname, level, count, description, and source.
Viewing the Feature Usage Dashboard
The dashboard displays different visualizations for Successful Security Operation Count, Data Discovery, Semantic Guardrails, Anonymization, and Synthetic Data.
Note: Do not delete this dashboard.
The dashboard has the following panels:
Successful Security Operation Count: Displays the information on successful protection operations performed by protectors.
Protect: Total number of successful protect operations.
Reprotect: Total number of successful reprotect operations.
Unprotect: Total number of successful unprotect operations.
Data Discovery Information: Displays the number of successful operations performed by Data Discovery.
Operations Performed: Total number of operations performed.
Sensitive Data Identified(MB): Sensitive data identified in MB.
Semantic Guardrails Information: Displays the following information:
Total Messages: Total number of guardrail messages processed.
Blocked messages: Total number of blocked messages.
Operation Counts: Displays the total number of operations performed by Protectors, Data Discovery, and Semantic Guardrails.
Protection Operations: Total number of Protect, Reprotect, and Unprotect operations.
Data Discovery Operations: Total number of operations performed by Data Discovery.
Semantic Guardrails Operations: Total number of operations performed by Semantic Guardrails.
Anonymization Information: Displays the following information:
Job Id: Displays the job id.
Job Status: Displays the status of the job.
Total Data(MB): Total data processed in MB.
Data Anonymized(MB): Data anonymized in MB.
Synthetic Data Information: Displays the following information:
Job Id: Displays the job id.
Job Status: Displays the status of the job.
Source DATA(MB): Displays the size of the original source data used as input for synthetic data generation, measured in MB.
Synthetic Data(MB): Synthetic data generated in MB.
Viewing the Protector Inventory Dashboard
The protector inventory dashboard displays protector details connected to the cluster through pie charts and tables. This dashboard has the Protector Details, Protector Families, Protector Vendor, Protector Version, Protector Core Version, and Protector PCC Version visualizations. It is useful for understanding information about the installed Protectors.
Only protectors that perform security operations show up on the dashboard.
Note: Do not delete this dashboard.
The dashboard has the following panels:
Protector Details: Displays the list of protectors installed with information, such as, Protector Family, Protector Vendor, Protector Version, PCC Version, Protector Core Version, and Deployment count. The Deployment count is based on the number of unique IPs. Updating the IP address of the Protector will consider both the old and new entries for the protector.
Protector Families: Displays pie chart with protector family information.
Protector Vendor: Displays pie chart with protector vendor information.
Protector Version: Displays pie chart with protector version information.
Protector Core Version: Displays pie chart with protector core version information.
Protector PCC Version: Displays pie chart with protector PCC version information.
Viewing the Protector Operation Dashboard
The protector operation dashboard displays protector details connected to the cluster through tables. This dashboard has the Protector Count and Protector List tables. It is useful for understanding information about the operations performed by the Protectors.
Only protectors that perform security operations show up on the dashboard. Updating the IP address or the hostname of the Protector shows the old and new entry for the protector.
Note: Do not delete this dashboard.
The dashboard has the following panels:
Protector Count: Displays the deployment count and operations performed for each Protector Family and Protector Vendor combination.
Protector List: Displays the list of protection operations with information, such as, Protector Vendor, Protector Family, Protector Version, Protector IP, Hostname, Core Version, PCC Version, and URP operations performed.
Viewing the Protector Status Dashboard
The protector status dashboard displays the protector connectivity status through a pie chart and a table visualization. This information is available only for v10.0.0 and later protectors. Logs from earlier protector versions are not available for the dashboards due to differences between the log formats. It is useful for understanding information about the installed v10.0.0 protectors. This dashboard uses status logs sent by the protector, so the protector which performed at least one security operation shows up on this dashboard. A protector is shown in one of the following states on the dashboard:
OK: The latest logs are sent from the protector to the Audit Store within the last 15 minutes.
Warning: The latest logs sent from the protector to the Audit Store in the last 15 and 60 minutes.
Error: The latest logs sent from the protector to the Audit Store are more than 60 minutes.
Updating the IP address or the hostname of the protector shows the old and new entry for the protector.
Note: This dashboard shows the v10.0.0 protectors that are connected to the cluster. Do not delete this dashboard.
The dashboard has the following panels:
Connectivity Status: Displays a pie chart of the different states with the number of protectors that are in each state.
Protector Status: Displays the list of protectors connectivity status with information, such as, Datastore, Node IP, Hostname, Protector Platform, Core Version, Protector Vendor, Protector Family, Protector Version, Status, and Last Seen.
Viewing the Policy Status Dashboard
The policy status dashboard displays the Policy and Trusted Application connectivity status for a DataStore. The status information, on this dashboard, is updated every 10 minutes. It is useful to understand deployment of the DataStore on all protector nodes. This dashboard displays the Policy deploy Status, Trusted Application deploy status, Policy Deploy details, and Trusted Application details visualizations. This information is available only for v10.0.0 and later protectors.
The policy status logs are sent to Insight. These logs are stored in the policy status index that is pty_insight_analytics_policy. The policy status index is analyzed using the correlation ID to identify the unique policies received by the Audit Store. The time duration and the correlation ID are then analyzed to determine the policy status.
The dashboard uses status logs sent by the protectors about the deployed policy. The Policy or Trusted Application used for at least one security operation shows up on this dashboard. A Policy and Trusted Application can be shown in one of the following states on the dashboard:
OK: The latest correlation value of the logs sent for the Policy or Trusted Application to the Audit Store are within the last 15 minutes.
Warning: The latest correlation value of the logs sent for the Policy or Trusted Application to the Audit Store are more than 15 minutes.
Note: Do not delete this dashboard.
The dashboard has the following panels:
Policy Deploy Status: Displays a pie chart of the different states with the number of policies that are in each state.
Trusted Application Status: Displays a pie chart of the different states with the number of trusted applications that are in each state.
Policy Deploy Details: Displays the list of policies and details. For example, Datastore Name, Node IP, Hostname, Last Seen, Policy Status, Process Name, Process Id, Platform, Core Version, PCC Version, Vendor, Family, Version, Deployment Time, and Policy Count.
Trusted Application Details: Displays the list of policies for Trusted Applications and details. For example, Datastore Name, Node IP, Hostname, Last Seen, Policy Status, Process Name, Process Id, Platform, Core Version, PCC Version, Vendor, Family, Version, Authorize Time, and Policy Count.
Data Element Usage Dashboard
The dashboard shows the security operation performed by users according to data elements. It displays the top 10 data elements used for the top five users.
Note: Do not delete this dashboard.
The following visualizations are displayed on the dashboard:
Data Element Usage Intensity Of Users Per Protect operation
Data Element Usage Intensity Of Users Per Unprotect operation
Data Element Usage Intensity Of Users Per Reprotect operation
Sensitive Activity Dashboard
The dashboard shows the daily count of security events by data elements for specific time period.
Note: Do not delete this dashboard.
The following visualization is displayed on the dashboard:
Sensitive Activity By Date
Server Activity Dashboard
The dashboard shows the daily count of all events by servers for specific time period. The older Audit index entries are not displayed on a new installation.
Note: Do not delete this dashboard.
The following visualizations are displayed on the dashboard:
Server Activity of Troubleshooting Index By Date
Server Activity of Policy Logs Index By Date
Server Activity of Audit Index By Date
High & Critical Events Dashboard
The dashboard shows the daily count of system events of high and critical severity for selected time period. The older Audit index entries are not displayed on a new installation.
Note: Do not delete this dashboard.
The following visualizations are displayed on the dashboard:
System Report - High & Critical Events of Troubleshooting Index
System Report - High & Critical Events of Policy Logs Index
System Report - High & Critical Events of Older Audit Indices
The System Report - High & Critical Events of Older Audit Indices graph is for legacy protectors.
Signature Verification Dashboard
Logs are generated on the protectors. The log is then processed using the signature key and a hash value, and a checksum is generated for the log entry. The hash and the checksum is sent to Insight for storage and further processing. When the log entry is received by Insight, Insight verifies log integrity when the signature verification job runs.
The log entries having checksums are identified. These entries are then processed using the signature key and the checksum received in the log entry from the protector is checked. If both the checksum values match, then the log entry has not been tampered with. If a mismatch is found, then it might be possible that the log entry was tampered or there is an issue receiving logs from a protector. These can be viewed on the Discover screen by using the logtype:verification search criteria.
Note: Do not delete this dashboard.
When the signature verification for an audit log fails, the failure logs are logged in Insight.
The following information is displayed on the dashboard:
Time: Displays the date and time.
Name: Displays the unique name for the signature verification job.
Indexes: Displays the list of indexes on which the signature verification job runs.
Query: Displays the signature verification query.
Pending: Displays the number of logs pending for signature verification.
Processed: Displays the current number of logs processed.
Not-Verified: Displays the number of logs that could not be verified. Only protection logs are verified.
Success: Displays the number of verifiable logs where signature verification succeeded.
Failed: Displays the number of verifiable logs where signature verification failed.
State: Displays the job status.
Support Logs Dashboard
The dashboard shows support logs required by support for troubleshooting. Filter the logs displayed using the Level, Pod, Container, and Namespace list.
Note: Do not delete this dashboard.
Unauthorized Access Dashboard
The dashboard shows the cumulative counts of unauthorized access and activity by users into Protegrity appliances and protectors.
Note: Do not delete this dashboard.
The following visualization is displayed on the dashboard:
Unauthorized Access By Username
User Activity Dashboard
The dashboard shows the cumulative transactions performed by users over a date range.
Note: Do not delete this dashboard.
The following visualization is displayed on the dashboard:
User Activity Across Date Range
4.4 - Viewing visualizations
Protegrity provides out-of-the-box visualization for viewing the data. The configuration used for the visualization are provided here. This helps better understand and interpret the data shown on the various graphs and charts.
Note: Do not delete or modify the configuration or details of the visualizations provided by Protegrity. To customize the visualization, create a copy of the visualization and perform the customization on the copy of the visualization.
To view visualizations:
Log in to the Insight Dashboard.
From the navigation panel, click Visualize.
Create and view visualizations from here.
Click a visualization to view it.
Anonymization Information
Description: The usage information for the Anonymization feature.
Description: The user activity during the date range specified.
Type: Heat Map
Filter: Audit Index Logtypes
Configuration:
Index: pty_insight_analytics*audits_*
Metrics:
Value: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum interval: Day
Y-axis
Sub aggregation: Terms
Field: protection.policy_user.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Custom label: Policy Users
Sensitive Activity by Date
Description: The data element usage on a daily basis.
Type: Line
Filter: Audit Index Logtypes
Configuration:
Index: pty_insight_analytics*audits_*
Metrics: Y-axis
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum interval: Day
Custom label: Date
Split series
Sub aggregation: Terms
Field: protection.dataelement.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Custom label: Operation Count
Unauthorized Access By Username
Description: Top 10 Unauthorized Protect and Unprotect operation counts per user.
Type: Line
Filter 1: Audit Index Logtypes
Filter 2: protection.audit_code: is one of 1,3
Configuration:
Index: pty_insight_analytics*audits_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Terms
Field: protection.policy_user.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Custom label: Top 10 Policy Users
Split series
Sub aggregation: Filters
Filter 1-Protect: level=‘Error’
Filter 2-Unprotect: level=‘WARNING’
System Report - High & Critical Events of Audit Indices
Description: The chart reporting high and critical events from the Audit index.
Type: Vertical Bar
Filter: Severity Level : (High & Critical)
Configuration:
Index: pty_insight_analytics*audits_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum Interval: Auto
Custom label: Date
Split series
Sub aggregation: Terms
Field: level.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Split series
Sub aggregation: Terms
Field: origin.hostname.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 50
Custom label: Server
System Report - High & Critical Events of Policy Logs Index
Description: The chart reporting high and critical events from the Policy index.
Type: Vertical Bar
Filter: Severity Level : (High & Critical)
Configuration:
Index: pty_insight_analytics*policy_log_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum Interval: Auto
Custom label: Date
Split series
Sub aggregation: Terms
Field: level.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 20
Split series
Sub aggregation: Terms
Field: origin.hostname.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 50
Custom label: Server
System Report - High & Critical Events of Troubleshooting Index
Description: The chart reporting high and critical events from the Troubleshooting index.
Type: Vertical Bar
Filter: Severity Level : (High & Critical)
Configuration:
Index: pty_insight_analytics*troubleshooting_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum Interval: Auto
Custom label: Date
Split series
Sub aggregation: Terms
Field: level.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Split series
Sub aggregation: Terms
Field: origin.hostname.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 50
Custom label: Server
Data Element Usage Intensity Of Users per Protect operation
Description: The chart shows the data element usage intensity of users per protect operation. It displays the top 10 data elements used by the top five users.
Type: Heat Map
Filter 1: protection.operation.keyword: Protect
Filter 2: Audit Index Logtypes
Configuration:
Index: pty_insight_analytics*audits_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Terms
Field: protection.policy_user.keyword
Order by: Metric: Sum of cnt
Order: Descending
Size: 5
Y-axis
Sub aggregation: Terms
Field: protection.dataelement.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Data Element Usage Intensity Of Users per Reprotect operation
Description: The chart shows the data element usage intensity of users per reprotect operation. It displays the top 10 data elements used by the top five users.
Type: Heat Map
Filter 1: protection.operation.keyword: Reprotect
Filter 2: Audit Index Logtypes
Configuration:
Index: pty_insight_analytics*audits_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Terms
Field: protection.policy_user.keyword
Order by: Metric: Sum of cnt
Order: Descending
Size: 5
Y-axis
Sub aggregation: Terms
Field: protection.dataelement.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Data Element Usage Intensity Of Users per Unprotect operation
Description: The chart shows the data element usage intensity of users per unprotect operation. It displays the top 10 data elements used by the top five users.
Type: Heat Map
Filter 1: protection.operation.keyword: Unprotect
Filter 2: Audit Index Logtypes
Configuration:
Index: pty_insight_analytics*audits_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Terms
Field: protection.policy_user.keyword
Order by: Metric: Sum of cnt
Order: Descending
Size: 5
Y-axis
Sub aggregation: Terms
Field: protection.dataelement.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Server Activity of Audit Index By Date
Description: The chart shows the daily count of all events by servers for specific time period from the audit index.
Type: Line
Configuration:
Index: pty_insight_analytics*audits_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum interval: Day
Split series
Sub aggregation: Terms
Field: origin.hostname.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Server Activity of Policy Log Index By Date
Description: The chart shows the daily count of all events by servers for specific time period from the policy index.
Type: Line
Configuration:
Index: pty_insight_analytics*policy_log_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum interval: Day
Split series
Sub aggregation: Terms
Field: origin.hostname.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Server Activity of Troubleshooting Index By Date
Description: The chart shows the daily count of all events by servers for specific time period from the troubleshooting index.
Type: Line
Configuration:
Index: pty_insight_analytics*troubleshooting_*
Metrics: Y-axis:
Aggregation: Sum
Field: cnt
Buckets:
X-axis
Aggregation: Date Histogram
Field: origin.time_utc
Minimum interval: Day
Split series
Sub aggregation: Terms
Field: origin.hostname.keyword
Order by: Metric:Sum of cnt
Order: Descending
Size: 10
Connectivity status
Description: This pie chart display connectivity status for the protectors.
Description: This table displays the policy deployment status and uniquely identified information for the data store, protector, process, platform, node, and so on.
Description: The trusted application deployment status that is displayed on the dashboard. This table uniquely identifies the data store, protector, process, platform, node, and so on.
Split rows
- Aggregation: Terms
- Field: protector.datastore.keyword
- Order by: Metric: Metric:Count
- Order: Descending
- Size: 50
- Custom label: Data Store Name
Split rows
Aggregation: Terms
Field: origin.ip
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Node IP
Split rows
Aggregation: Terms
Field: origin.hostname.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Host Name
Split rows
Aggregation: Terms
Field: policystatus.status.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Status
Split rows
Aggregation: Terms
Field: origin.time_utc
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Last Seen
Split rows
Aggregation: Terms
Field: process.name.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Process Name
Split rows
Aggregation: Terms
Field: process.id.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Process Id
Split rows
Aggregation: Terms
Field: process.platform.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Platform
Split rows
Aggregation: Terms
Field: process.core_version.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Core Version
Split rows
Aggregation: Terms
Field: process.pcc_version.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: PCC Version
Split rows
Aggregation: Terms
Field: protector.version.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Protector Version
Split rows
Aggregation: Terms
Field: protector.vendor.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Vendor
Split rows
Aggregation: Terms
Field: protector.family.keyword
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Family
Split rows
Aggregation: Terms
Field: policystatus.deployment_or_auth_time
Order by: Metric: Metric:Count
Order: Descending
Size: 50
Custom label: Authorize Time
Unsuccessful Security Operation Values
Description: The metric displays unsuccessful security operation counts.
Type: Metric
Filter 1: logtype: Protection
Filter 2: NOT level: success
Filter 3: NOT protection.audit_code: 28
Configuration:
Index: pty_insight_analytics*audits_*
Metrics:
Aggregation: Sum
Field: cnt
Custom label: Count
Buckets:
- Split group
- Aggregation: Terms
- Field: level.keyword
- Order by: Metric:Count
- Order: Descending
- Size: 10000
Unsuccessful Security Operations
Description: The pie chart displays unsuccessful security operations.
Type: Pie
Filter 1: logtype: protection
Filter 2: NOT level: success
Filter 3: NOT protection.audit_code: 28
Configuration:
Index: pty_insight_analytics*audits_*
Metrics:
Slice size:
Aggregation: Sum
Field: cnt
Custom label: Counts
Buckets:
Split slices
Aggregation: Terms
Field: level.keyword
Order by: Metric: Counts
Order: Descending
Size: 10000
4.5 - Index State Management (ISM)
Information about managing indexes.
The Protegrity Data Security Platform enforces security policies at many protection points throughout an enterprise and sends logs to the PPC. The logs are stored in a log repository, in this case the Audit Store. Manage the log repository using ISM in Insight Dashboard.
The following figure shows the components and the workflow of the ISM system.
The ISM log repository consists of the following parts:
Active logs that may be required for immediate reporting and are accessed regularly for high‑frequency analysis.
Logs that are rolled over to a backup index using index rollover.
Logs that are moved to external storage using snapshot backup.
Logs that are deleted when they are no longer required.
To manage growing log data efficiently and ensure optimal performance of the Audit Store cluster, index rollover and index delete policy configurations are implemented. Index rollover allows the automatic creation of new indexes based on the size, age, or document count thresholds. The index delete policies must be defined by lifecycle actions such as rollover, delete, or transition to warm or cold storage. This setup is essential for maintaining healthy cluster performance and managing storage costs.
ISM does not take a snapshot automatically, logs must be manually backed up before the logs are deleted. ISM only performs index rollover and index delete operations.
Index rollover
This task performs an index rollover of the indexes when any of the specified conditions are fulfilled. The next index holds recent logs, making it faster to query and obtain current log information for monitoring and reporting. The earlier logs are available in the older indexes. Ensure that the older indexes are archived to an external storage before the delete policy permanently removes the older indexes. Alternatively, create a snapshot for backing up the logs. For more information about snapshots, refer to Backing up and restoring indexes.
The index rollover is applicable for the following indexes:
pty_insight_analytics_troubleshooting_0.9*
pty_insight_analytics_protectors_status_0.9*
pty_insight_analytics_policy_log_0.9*
pty_insight_analytics_miscellaneous_0.9*
pty_insight_analytics_audits_0.9*
The index rollover is initiated when any one of the following criteria is fulfilled:
rollover_min_index_age=“30d”
rollover_min_doc_count=200000000
rollover_min_size=“5gb”
Index delete
The index rollover creates a new index for entries. However, these indexes still reside on the same system and take up disk space. To reduce the disk space consumed, a rule is in place to delete rolled over indexes. Ensure that the older indexes are backed up to an external storage before the delete policy permanently removes the older indexes.
The following policy is defined for deleting indexes after rollover:
delete_min_index_age=“90d”
Modifying index configurations
The index policies are set using industry standards and must not be changed. However, they can be modified based on company policies and requirements.
Log in to the Insight Dashboard.
From the menu, select Index Management.
Click State management policies.
Select the check box for the policy.
Click Edit.
Select JSON editor.
Click Continue.
Update the values in Define policy.
Click Update.
Note: After policy modification, the new configuration will effect future indexes only. These new modifications are not applied to existing indexes.
4.6 - Backing up and restoring indexes
Steps to back up and restore.
Backing up and restoring Audit Store indexes is essential for maintaining the reliability of Protegrity AI Team Edition. The Audit Store holds critical operational and audit data used for monitoring, troubleshooting, and compliance. Regular backups protect this data from loss due to failures, upgrades, or misconfiguration, while restore capabilities enable quick recovery and minimal downtime. A well-defined backup and restore strategy helps ensure data durability and platform stability.
Note: Use a dedicated backup bucket per cluster to prevent data corruption.
Only snapshots backed up using the daily-insight-snapshots policy are restored during disaster management. Do not delete this policy.
Understanding the snapshot policy
Policies are defined for backing up Audit Store indexes regularly. This ensures that data is available for restoring the indexes and logs in case of data corruption or data deletion. This policy is different from the Index Statement Management (ISM) for rolling over indexes and deleting indexes for maintenance and ensuring the system works fast and smooth. For more information about ISM, refer to Index State Management (ISM). Indexes deleted by ISM can be recreated using the backup created. The state of the indexes are tracked and backed up when the policy is run. Any updated made to the index during the snapshot creation are not backed up during the current run. They will be backed up when the policy is run again as per the schedule set.
The following criteria is specified for creating backups:
Policy settings
Policy name: daily-insight-snapshots
Indices: *, -*-restored, -*_restored, -restored_*
Repository: insight-snapshots
Include cluster state: true
Ignore unavailable indices: true
Allow partial snapshots: false
Snapshot schedule
Frequency: Daily
Cron schedule: 3:00 am UTC (UTC)
Snapshot retention period
Maximum age of snapshots: 60d
Minimum of snapshots retained: 1
Maximum of snapshots retained: undefined
Frequency: Daily
Cron schedule: 4:00 am UTC (UTC)
Notification
Notify on snapshot activities: creation, deletion, failure
Managing the backup policy
The default policy provides a Recovery Point Objective (RPO) of 24 hours. Update the snapshot schedule to modify the backup policy based on the required RPO and Recovery Time Objective (RTO).
View and update the policy using the following steps.
Log in to the Insight Dashboard.
Select the main menu.
Navigate to Management > Snapshot Management > Snapshot policies.
Click the daily-insight-snapshots policy.
Click Edit.
Update the required parameters, such as, the snapshot schedule.
Select the retention period and number of snapshots to be retained.
Select the deletion frequency for the snapshot. This is the scheduled task run for deleting snapshots that no longer need to be retained.
Select the required Notifications check boxes for receiving notifications.
Click Update.
The new backup policy settings are used for creating the restore points.
For disaster management, to restore the system and the indexes, refer to restoring. A snapshot needs to be available before it can be restored.
4.7 - Working with alerts
Use alerting to keep track of the different activities that take place on the system. The alerting ecosystem consists of the monitor, trigger, action, and channels.
Viewing alerts
Generated alerts are displayed on the Insight Dashboard. View and acknowledge the alerts from the alerting dashboard by navigating to OpenSearch Plugins > Alerting > Alerts.
For more information about working with Monitors, Alerts, and Notifications, refer to Monitors in OpenSearch Dashboards.
Creating notifications
Create notification channels to receive alerts as per individual requirements. The alerts are sent to the destination specified in the channel.
Creating a custom webhook notification
A webhook notification sends the alerts generated by a monitor to a destination, such as, a web page.
Perform the following steps to configure the notification channel for generating webhook alerts:
Log in to the Web UI.
From the menu, navigate to Management > Notifications > Channels.
Click Create channel.
Specify the following information under Name and Description:
Name: Http_webhook
Description: For generating http webhook alerts.
Specify the following information under Configurations:
Channel type: Custom webhook
Method: POST
Define endpoints by: Webhook URL
Webhook URL: Specify the URL that receives the alert. For example https://webhook.site/9385a259-3b82-4e99-ad1e-1eb875f00734.
Webhook headers: Specify the key value pairs for the webhook.
Click Send test message to send a message to the email recipients.
Click Create to create the channel.
The webhook is set up successfully.
Create a monitor and attach the channel created using the steps from the section Creating the monitor.
Creating email alerts using custom webhook
An email notification sends alerts generated by a monitor to an email address. It is also possible to configure the SMTP channel for sending an email alert. The email alerts can be encrypted or non-encrypted. Accordingly, the required SMTP settings for email notifications must be configured.
Ensure that the following is configured as per the requirement:
Ensure that the following prerequisites are met.
Outbound SMTP access is enabled.
Required SMTP port is open, for example, 587 for STARTTLS.
Firewall and routing configurations allow SMTP traffic.
A monitor tracks the system and sends an alert when a trigger is activated. Triggers cause actions to occur when certain criteria are met. Those criteria are set when a trigger is created. For more information about monitors, actions, and triggers, refer to Alerting.
Perform the following steps to create a monitor. The configuration specified here is just an example. For real use, create whatever configuration is needed per individual requirements:
Click Add trigger and specify the information provided here.
Specify a trigger name.
Specify a severity level.
Specify the following code for the trigger condition:
ctx.results[0].hits.total.value > 0
Click Add action.
From the Channels list, select the required channel.
Add the following code in the Message field. The default message displayed might not be formatted properly. Update the message by replacing the Line spaces with the n escape code. The message value is a JSON value. Use escape characters to structure the email properly using valid JSON syntax.
```
{
"message": "Please investigate the issue.\n - Trigger: {{ctx.trigger.name}}\n - Severity: {{ctx.trigger.severity}}\n - Period start: {{ctx.periodStart}}\n - Period end: {{ctx.periodEnd}}",
"subject": "Monitor {{ctx.monitor.name}} just entered alert status"
}
```
> **Note:** The **message** value is a JSON value. Be sure to use escape characters to structure the email properly using valid JSON syntax. The default message displayed might not be formatted properly. Update the message by replacing the Line spaces with the **\\n** escape code.
Select the Preview message check box to view the formatted email message.
Click Send test message and verify the recipient’s inbox for the message.
Click Save to update the configuration.
5 - Protegrity REST APIs
Overview of the Policy Management and Encrypted Resilient Package REST APIs.
The Protegrity REST APIs include the following APIs:
Policy Management REST APIs
The Policy Management REST APIs are used to create or manage policies.
Encrypted Resilient Package APIs
The Encrypted Resilient Package REST APIs include the REST API that is used to encrypt and export a resilient package, which is used by the resilient protectors. For more information on how the REST API is used to export the encrypted resilient package in an immutable policy deployment, refer to the section DevOps Approach for Application Protector.
5.1 - Accessing the Protegrity REST APIs
Overview of how to access the Protegrity REST APIs.
The following section lists the requirements for accessing the Protegrity REST APIs.
Available endpoints - Protegrity has enabled the following endpoints to access the REST APIs.
Base URL
https://<FQDN>/pty/<Version>/<API>
Where:
FQDN: Fully Qualified Domain Name provided by the user during PPC installation.
Version: Specifies the version of the API.
API: Endpoint of the REST API.
Authentication - You can access the REST APIs using client certificates or tokens. The authentication depends on the type of REST API that you are using.
For more information about accessing the REST APIs using these authentication mechanisms, refer to the section Accessing REST API Resources.
Authorization - You must assign the permissions to roles for accessing the REST APIs.
For more information about the roles and permissions required, refer to the section Managing Roles.
5.2 - View the Protegrity REST API Specification Document
Access and view the REST API specification document. Use an OpenAPI specification editor, such as Swagger Editor, to generate samples.
The steps mentioned in this section contain the usage of Docker containers and services to download and launch the images for Swagger Editor within a Docker container. The following example uses Swagger Editor to view the REST API specification document.
<Version> is the version number of the API. For example, v1 or v2.
<API> is the API for which you want to download the OpenAPI specifications document. For example, specify the value as pim to download the OpenAPI specifications for the Policy Management REST API. Similarly, specify the value as auth to download the OpenAPI specifications for the Authentication and Token Management API.
<FQDN> is the Fully Qualified Domain Name of the Protegrity server. For example, protegrity.example.com. For more information about the Policy Management REST APIs, refer to the section Using the Policy Management REST APIs. For more information about the Authentication and Token Management REST APIs, refer to the section Using the Authentication and Token Management REST APIs.
Drag and drop the downloaded api-doc.yaml file into a browser window of the Swagger Editor.
Generating the REST API Samples Using the Swagger Editor
Perform the following steps to generate samples using the Swagger Editor.
Open the api-doc.yaml file in the Swagger Editor.
On the Swagger Editor UI, click on the required API request.
Click Try it out.
Enter the parameters for the API request.
Click Execute.
The generated cURL command and the URL for the request appear in the Responses section.
5.3 - Using the Common REST API Endpoints
Explains the usage of the Common APIs with some generic samples.
The following section specifies the common operations that are applicable to all the Protegrity REST APIs.
The Base URL for each API will change depending on the version of the API being used. The following table specifies the version that you must use when executing the common operations for each API.
REST API
Description
Base URL <Version>
pim
Policy Management
v2
rps
Encrypted Resilient Package
v1
auth
Authentication and Token Management
v1
Common REST API Endpoints
The following table lists the common operations for the Protegrity REST APIs.
Changes the log level for the REST API service during run-time. The level set through this resource is persisted until the corresponding service is restarted. This log level overrides the log level defined in the configuration.
This API request retrieves the API specification document.
Base URL
https://{FQDN}/pty/<Version>/<API>
Path
/doc
Method
GET
CURL request syntax
curl -X GET "https://<FQDN>/pty/<Version>/<API>/doc"
Authentication credentials
Not required.
Sample CURL requests
curl -X GET "https://<FQDN>/pty/v1/rps/doc"
curl -X GET "https://<FQDN>/pty/v1/rps/doc" -o "rps.yaml"
Sample CURL responses
The Encrypted Resilient Package API specification document is displayed as a response. If you have specified the “-o” parameter in the CURL request, then the API specification is saved to the output file name specified in the command, rather than being displayed in the terminal. You can use the Swagger UI to view the API specification document.
Retrieving the Log Level
This API request retrieves the current log level of the REST API service logs.
This sample request uses the JWT token authentication.
Sample CURL response
{
"level": "info"
}
Setting Log Level for the REST API Service Log
This API request changes the REST API service log level during run-time. The level set through this resource persists until the corresponding service is restarted. This log level overrides the log level defined in the configuration.
5.4 - Using the Authentication and Token Management REST APIs
Explains the usage of the Authentication and Token Management APIs with some generic samples.
Note: The Authentication and Token Management API uses the v1 version.
If you want to perform common operations using the Authentication and Token REST API, then refer the section Using the Common REST API Endpoints.
The following table provides section references that explain usage of some of the Authentication and Token REST APIs. It includes sample examples to work with the Authentication and Token functions. If you want to view all the Authentication and Token APIs, then use the /doc API to retrieve the API specification.
Tokens are short-lived credentials used to authenticate and authorize API requests securely, without transmitting user passwords on every call. The Protegrity REST APIs use JSON Web Tokens (JWTs). When a user logs in, an access token and a refresh token are issued. The access token is included in the Authorization header of each API request to verify the caller’s identity and permissions. Once the access token expires, the refresh token can be used to obtain a new access token without requiring the user to log in again.
The following section lists the commonly used APIs to manage tokens.
Generate token
This API explains how you can generate an access token for authenticating the APIs.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/login/token
Method
POST
Request Body
loginname: User name for authentication.
password: Password for authentication.
Result
This API returns JWT access token in the response header and the refresh token in the response body. You can use the refresh token in the Refresh token API to obtain new access tokens without logging again.
The response body includes the following expiry fields:
expiresIn: Number of seconds until the access token expires. For example, a value of 300 means the access token is valid for 5 minutes from the time it was issued.
refreshExpiresIn: Number of seconds until the refresh token expires. For example, a value of 900 means the refresh token is valid for 15 minutes.
This API explains how to refresh an access token using the refresh token.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/login/refresh
Method
POST
Request Body
refreshToken: Refresh token for getting a new access token.
Result
This API returns a new JWT access token in the response header and a new refresh token in the response body. You can use this refresh token to obtain new access tokens without logging again.
This API explains how you can update the access token lifespan and SSO idle timeout.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/token/lifespan/update
Method
POST
Request Body
accessTokenLifespan: Updated lifespan of the access token in seconds.
Result
This API updates the lifespan of the access token. It also automatically updates the lifespan of the refresh token or the SSO idle timeout by adding 10 minutes to the lifespan of the access token.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
[
{
"name": "user_manager_admin",
"description": "Permission to manage users with read-write access"
},
{
"name": "saml_viewer",
"description": "Permission to view SAML configurations with read-only access"
},
{
"name": "user_manager_viewer",
"description": "Permission to view users with read-only access"
},
{
"name": "cli_access",
"description": "Grants or restricts a user’s ability to access the CLI"
},
{
"name": "saml_admin",
"description": "Permission to update SAML configurations with read-write access"
},
{
"name": "group_viewer",
"description": "Permission to view groups with read-only access"
},
{
"name": "group_admin",
"description": "Permission to manage groups with read-write access"
},
{
"name": "password_policy_admin",
"description": "Permission to update password policy with read-write access"
},
{
"name": "insight_viewer",
"description": "Permission to view Insight Dashboard with read-only access."
},
{
"name": "password_policy_viewer",
"description": "Permission to view password policy with read-only access"
},
{
"name": "role_viewer",
"description": "Permission to view roles with read-only access"
},
{
"name": "can_create_token",
"description": "Permission to create/refresh tokens"
},
{
"name": "insight_admin",
"description": "Permission to view and edit Insight Dashboard with admin access."
},
{
"name": "role_admin",
"description": "Permission to manage roles with read-write access"
},
{
"name": "web_admin",
"description": "Permission to perform all operations available as part of the Web UI."
}
]
List all roles
This API returns a list of all the roles available or defined in PPC.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/roles
Method
GET
Request Body
No parameters.
Result
This API returns a list of all the roles available for the logged-in user.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"role_name": "admin",
"status": "updated"
}
Create role
This API enables you to create a role.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/roles
Method
POST
Request Body
name: Role name.
description: Description of the role.
permissions: List of permissions that need to be created for the existing role.
Result
This API creates a roles with the requested permissions.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"role_name": "admin",
"status": "created"
}
Delete roles
This API enables you to delete a role. Deleting a default role, such as, directory_administrator, directory_viewer, security_administrator, and security_viewer, using the API is not supported. Only custom roles created by users can be deleted using the API.
This sample request deletes the custom role named user1, from the system and returns the deletion status. This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"role_name": "user1",
"status": "deleted"
}
Add or remove permissions from a role
This API enables to incrementally add or remove permissions from a role. Unlike PUT, this does not overwrite existing permissions; only the specified permissions are affected. At least one of ‘add’ or ‘remove’ must be provided, and a permission cannot appear in both.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/roles/{role_name}/permissions
Method
PATCH
Parameters
role_name: Role name of the user. This is a mandatory field.
Request Body
{
"add": [
"perm3"
],
"remove": [
"perm1"
]
}
Result
This API adds or removes permissions from a role incrementally. It does not overwrite existing permissions.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
The following section lists the commonly used APIs for managing users.
Create user endpoint
This API enables you to create a user.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/users
Method
POST
Request Body
username: Name of the user. This is a mandatory field
email: Email of the user.
firstName: First name of the user.
lastName: Last name of the user.
enabled: Enable the user.
password: Password for the user.
roles: Roles to be assigned to the user.
groups: Groups in which the user is included.
identityProviders: An optional array that lists the SAML provider aliases to link the user, for example, AWS-IDP or AZURE-IDP, configured as part of the SAML SSO configuration.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you to retrieve the user details.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/users
Method
GET
Request Body
No parameters.
Query Parameters
max: Maximum number of entries that can retrieved.
first: Number of entries that can be skipped from the start of the data. For example, if you specify the value as 4, then the first four entries will be skipped from the result.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you to update the details of a user.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/users
Method
PUT
Request Body
id: ID of the user. This is a mandatory field
email: Email of the user.
firstName: First name of the user.
lastName: Last name of the user.
enabled: Enable the user.
password: Password for the user.
roles: Roles to be assigned to the user.
groups: Groups in which the user is included.
identityProviders: An optional array that lists the SAML provider aliases to link the user. For example, AWS-IDP or AZURE-IDP, configured as part of the SAML SSO configuration.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables self-service profile update. Updates only the profile of the user identified by the Bearer token. Cross-user updates are not possible.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
The following section lists the commonly used APIs for managing groups.
Fetch groups
This API enables you retrieve a list of all the groups.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/groups
Method
GET
Request Body
No parameters.
Query Parameters
max: Maximum number of entries that can be retrieved.
first: Number of entries that can be skipped from the start of the data. For example, if you specify the value as 4, then the first four entries will be skipped from the result.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you to create a SAML provider configuration.
Note: The metadataFileContent parameter is not supported. You cannot upload or copy the metadata file. Instead, use the metadataUrl option to configure SAML.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/saml/providers
Method
POST
Request Body
alias: Unique alias for the SAML provider. This is a mandatory field.
displayName: Display name for the SAML provider that will appear on the login page. This is a mandatory field.
configType: Configuration type, either metadata URL or metadata file content. This is a mandatory field.
metadataUrl: URL to fetch the SAML metadata from the identity provider. For example, https://login.microsoftonline.com/tenant-id/federationmetadata/2007-06/federationmetadata.xml.
metadataFileContent: SAML metadata XML content as a string. For example, <?xml version=\"1.0\"?>...</EntityDescriptor>.
signingCertificate: X.509 certificate for signing SAML requests. Use the PEM format without the headers.
nameIdPolicyFormat: NameID policy format for SAML authentication. For example, urn:oasis:names:tc:SAML:2.0:nameid-format:persistent.
forceAuthn: Force re-authentication of the user even if the user is already authenticated.
validateSignature: Validate the SAML response and assertion signatures.
wantAssertionsSigned: Require the SAML assertions to be signed.
wantAssertionsEncrypted: Require the SAML assertions to be encrypted.
signatureAlgorithm: Signature algorithm for SAML requests. For example, RSA_SHA256.
attributeMapping: Mapping of SAML attributes to user attributes.
enabled: Enable or disable the SAML provider.
For details of the each parameter, refer the documentation for the corresponding SAML provider.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"status": "created",
"alias": "test-azure-ad-saml",
"configType": "metadataUrl",
"message": "SAML provider created successfully from metadata"
}
Get SAML provider
This API enables you retrieve the details of a specific SAML provider.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/providers/{alias}
Method
GET
Request Body
No parameters.
Path Parameters
alias: Alias of the SAML provider. This is a mandatory field.
Result
This API retrieves the details about the specific SAML provider.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you update the configurations of an existing SAML provider.
Note: The metadataFileContent parameter is not supported. You cannot upload or copy the metadata file. Instead, use the metadataUrl option to configure SAML.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/providers/{alias}
Method
PUT
Request Body
No parameters.
Path Parameters
alias: Alias of the SAML provider that you want to update. This is a mandatory field.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"status": "updated",
"alias": "azure-ad-saml"
}
Delete SAML provider endpoint
This API enables you to delete the configuration of an existing SAML provider.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/saml/providers/{alias}
Method
DELETE
Request Body
No parameters.
Path Parameters
alias: Alias of the SAML provider that you want to delete. This is a mandatory field.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"status": "deleted",
"alias": "azure-ad-saml"
}
List SAML attribute mappers
This API enables you to list all attribute mappers for a SAML provider.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/saml/providers/{alias}
Method
GET
Request Body
No parameters.
Path Parameters
alias: Alias of the SAML provider that you want to list. This is a mandatory field.
Result
This API lists all attribute mappers for a SAML provider.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"message": "Attribute mapper created successfully",
"mapperId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Delete SAML Attribute Mappers Endpoint
This API delete an attribute mappers for a SAML provider.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/saml/providers/{alias}
Method
DELETE
Request Body
No parameters.
Path Parameters
alias: Alias of the SAML provider that you want to list. This is a mandatory field.
mapper_id: Unique ID of the attribute mapper that you want to delete. This is a mandatory field.
Result
This API deletes all attribute mappers for a SAML provider.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Note: The ’length’ of the password must not be greater than ‘maxLength’.
Update Password Policy
This API allows you to update password policy configuration.
Accepts a JSON object with policy keys and values to update.
Only provided keys will be updated; omitted keys remain unchanged.
Example policy configurations:
Basic: {"length": 14, "digits": 1, "upperCase": 1, "lowerCase": 1} - Sets a minimum password length of 14 characters, requiring at least 1 digit, 1 uppercase, and 1 lowercase character.
Advanced: {"length": 14, "specialChars": 2, "passwordHistory": 5, "forceExpiredPasswordChange": 90} - Enforces a 14-character minimum with 2 special characters, prevents reuse of the last 5 passwords, and requires a password change every 90 days.
Boolean flags: {"notUsername": true, "notEmail": true} - Prevents users from setting a password that contains their username or email address.
Numeric values are specified as integers, boolean policies as true/false.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/passwordpolicy
Method
PUT
Request Body
No parameters.
Path Parameters
No parameters.
Result
This API updates the password policy configuration.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API updates the brute force detection configuration.
Accepts a JSON object with configuration keys and values to update.
Configurable keys:
failureFactor: Number of login failures before lockout. Must be an integer greater than or equal to 1.
maxTemporaryLockouts: Temporary lockouts before permanent ban. Must be an integer greater than or equal to 1.
waitIncrementSeconds: Wait time increment in seconds. Must be an integer greater than or equal to 60.
maxFailureWaitSeconds: Maximum wait cap in seconds. Must be an integer greater than or equal to 60 and must be greater than or equal to waitIncrementSeconds.
maxDeltaTimeSeconds: Failure count reset window in seconds. Must be an integer greater than or equal to 60.
For example:
{"failureFactor": 5, "waitIncrementSeconds": 300, "maxFailureWaitSeconds": 900} — Locks the account for 5 minutes after 5 failed attempts, capping the maximum lockout wait time at 15 minutes.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Microsoft Entra ID is a cloud-based identity and access management service. It manages your cloud and on-premise applications and protects user identities and credentials. The following section lists the commonly used APIs for managing Microsoft Entra ID federation.
Get Entra ID configuration endpoint
This API enables you to list the current Entra ID configuration.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/federation/entra/config
Method
GET
Request Body
No parameters
Result
This API retrieves the current Entra ID configuration.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 201, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 201, if the API is invoked successfully.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
Response body
{
"status": "deleted",
"message": "Entra ID configuration deleted successfully"
}
Test Entra ID connection endpoint
This API enables you to test an Entra ID connection endpoint.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/federation/entra/config/test
Method
POST
Request Body
tenantID: Entra ID tenant ID.
clientID: Entra ID application ID.
clientSecret: Entra ID application client secret.
useStoredConfig: Specify true to test the currently stored configuration. Speicify false to provide credentials for testing without storing.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you to search Entra ID users using the stored configuration.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/federation/entra/users/search
Method
POST
Request Body
searchQuery: Specify the name of the Entra ID user to search for specific users. Specify null to retrieve a list of all the Entra ID users.
Query Parameters
max: Maximum number of entries that can retrieved.
first: Number of entries that can be skipped from the start of the data. For example, if you specify the value as 4, then the first four entries will be skipped from the result.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you to import Entra ID users with assigned roles.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/federation/entra/users
Method
POST
Request Body
users: Array of user objects to import. Each user must have either the userPrincipalName or email parameter specified.
userPrincipalName: User principal name from Entra ID.
email: Primary email address of the user.
firstName: First name of the user. This is an optional parameter.
lastName: Last name of the user. This is an optional parameter.
roles: An array that specifies the roles assigned to the user.
identityProviders: An array that specifies the identity providers to be associated with the user. This is an optional field. For example, you can specify the value as AWS-IDP or AZURE-IDP.
dryRun: If true, validates the import without actually creating users. The default value is false.
Result
This API imports Entra ID users with assigned roles.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 201, if the API is invoked successfully.
This API enables you to search for Entra ID groups using stored configuration.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/federation/entra/groups/search
Method
POST
Request Body
searchQuery: Specify the name of the Entra ID group to search for specific groups. Specify null to retrieve a list of all the Entra ID groups.
Query Parameters
max: Maximum number of entries that can retrieved.
first: Number of entries that can be skipped from the start of the data. For example, if you specify the value as 4, then the first four entries will be skipped from the result.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you to search for Entra ID group members using stored configuration.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/federation/entra/groups/members/search
Method
POST
Request Body
groupID: ID of the searched group. This value is case-sensitive and must be an exact match.
searchQuery: Specify the name of the Entra ID group member to search for a specific member. If this parameter is not specified, then the API retrieve a list of all the members of the Entra ID group.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 200, if the API is invoked successfully.
This API enables you to import Entra ID groups into the application.
Base URL
https://<FQDN>/pty/<version>/<API>
Path
/federation/entra/groups
Method
POST
Request Body
groups: Array of group objects to import. Each user must have the id or displayName parameters specified.
id: The unique group identifier from Entra ID is a required field.
displayName: The group display name is a required field.
description: Group description.
importMembers: Specify true to import group members. The default value is false.
memberRoles: An array that specifies the roles assigned to group members.
identityProviders: An array that specifies the identity providers to be associated with the group. This is an optional field. For example, you can specify the value as AWS-IDP or AZURE-IDP.
dryRun: If true, validates the import without actually creating users. The default value is false.
This sample request uses the access token of the logged-in user for authentication. For more information about generating the access token, refer to the section Generate token.
Sample Response
The following response appears for the status code 201, if the API is invoked successfully.
Explains the usage of the Policy Management APIs with some generic samples.
The Policy Management REST APIs will work only after you have installed the workbench.For more information about installing the workbench, refer to the Installing Policy Workbench.
The user accessing these APIs must have the workbench_management_policy_write permission for write access and the workbench_management_policy_read permission for read-only access. For more information about the roles and permissions required, refer to the section Workbench Roles and Permissions.
Note: The Policy Management API uses the v2 version.
To perform common operations, such as, retrieving the supported application versions, retrieving the API specification document, and so on using the Policy Management REST API, then refer to the section Using the Common REST API Endpoints.
The following table provides section references that explain usage of some of the Policy Management REST APIs. It includes an example workflow to work with the Policy Management functions. If you want to view all the Policy Management APIs, then use the /doc API to retrieve the API specification.
This section explains how you can initialize Policy Management to create the keys-related data and the policy repository.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
This sample request uses the JWT token authentication.
Creating a Manual Role
This section explains how you can create a manual role that accepts all the users.
For more information about working with roles, refer to the section Roles.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
Path
/pim/roles
Method
POST
Request Body
name: Name of the role. This is a mandatory field.
mode: Mode of the role. Specify MANUAL for a manually managed role.
allowAll: If true, the role accepts all users. The default value is false.
This sample request uses the JWT token authentication.
Creating Data Elements
This section explains how you can create data elements.
For more information about working with data elements, refer to the section Data Elements.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
Path
/pim/dataelements
Method
POST
Request Body
name: Name of the data element. This is a mandatory field.
description: Description of the data element.
alphaNumericToken: Configuration object for alphanumeric tokenization.
tokenizer: Tokenizer type to use. For example, SLT_1_3.
fromLeft: Number of characters to preserve from the left.
fromRight: Number of characters to preserve from the right.
lengthPreserving: If true, the tokenized output preserves the original length.
allowShort: Whether to allow tokenization of short values. Valid values: YES, NO.
This sample request uses the JWT token authentication.
Creating Policy
This section explains how you can create a policy.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
Path
/pim/policies
Method
POST
Request Body
name: Name of the policy. This is a mandatory field.
description: Description of the policy.
template: Default permission template applied to roles added to the policy.
access: Access permissions for the policy template.
protect: Allow protect operations.
reProtect: Allow re-protect operations.
unProtect: Allow unprotect operations.
audit: Audit logging configuration for the policy template.
success: Audit settings for successful operations.
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
Path
/pim/policies/1/rules
Method
POST
Request Body
role: ID of the role to add to the policy. This is a mandatory field.
dataElement: ID of the data element to add to the policy. This is a mandatory field.
noAccessOperation: Action to perform when access is denied. For example, EXCEPTION.
permission: Permission configuration for this role and data element combination.
access: Access permissions.
protect: Allow protect operations.
reProtect: Allow re-protect operations.
unProtect: Allow unprotect operations.
audit: Audit logging configuration.
success: Audit settings for successful operations.
This sample request uses the JWT token authentication.
Creating a Default Data Store
This section explains how you can create a default data store.
For more information about working with data stores, refer to the section Data Stores.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
Path
/pim/datastores
Method
POST
Request Body
name: Name of the data store. This is a mandatory field.
description: Description of the data store.
default: If true, sets this data store as the default data store.
This sample request uses the JWT token authentication.
Deploying the Data Store
This section explains how you can deploy policies or trusted applications linked to a specific data store or multiple data stores.
For more information about deploying the Data Store, refer to the section Deploying Data Stores.
Deploying a Specific Data Store
This section explains how you can deploy policies and trusted applications linked to a specific data store. The specifications provided for the specific data store are applied and become the end-result.
Note: If you deploy an array with empty policies or trusted applications, or both, then the connected protectors contain empty definitions for these respective items.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
Path
/pim/datastores/{dataStoreUid}/deploy
Method
POST
Path Parameters
dataStoreUid: Unique identifier of the data store to deploy. This is a mandatory field.
Request Body
policies: Array of policy IDs to deploy to the data store.
applications: Array of trusted application IDs to deploy to the data store.
This sample request uses the JWT token authentication.
Deploying Data Stores
This section explains how you can deploy data stores, which can contain the linking of either the policies or trusted applications, or both for the deployment.
Note: If you deploy a data store containing an array with empty policies or trusted applications, or both, then the connected protectors contain empty definitions for these respective items.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
Path
/pim/deploy
Method
POST
Request Body
dataStores: Array of data store objects to deploy. Each object contains:
uid: Unique identifier of the data store. This is a mandatory field.
policies: Array of policy IDs to deploy to the data store.
applications: Array of trusted application IDs to deploy to the data store.
This sample request uses the JWT token authentication.
Getting the Deployment Information
This section explains how you can check the complete deployment information. This service returns the list of the data stores with the connected policies and trusted applications.
Note: The result might contain data store information that is pending deployment after combining the Policy Management operations performed through the ESA Web UI and PIM API.
Base URL
https://{FQDN}/pty/v2
Authentication credentials
TOKEN - Environment variable containing the JWT token. For more information about creating a JWT token, refer to the section Generate token. For more information about refreshing the JWT token, refer to the section Refresh token.
This sample request uses the JWT token authentication.
Sample Response
The API returns the list of data stores with their connected policies and trusted applications.
5.6 - Using the Encrypted Resilient Package REST APIs
Explains the usage of the Encrypted Resilient Package APIs.
Important: The Encrypted Resilient Package REST API will work only after you have installed the Policy Workbench. For more information about installing Policy Workbench, refer to the section Installing Policy Workbench.
The Encrypted Resilient Package API is only used by the Immutable Resilient protectors.
Before you begin:
Ensure that the concept of resilient protectors and necessity of a resilient package is understood. For more information on how the REST API is used to export the encrypted resilient package in an immutable policy deployment, refer to the section DevOps Approach for Application Protector.
Ensure that the RPS service is running on the AI Team Edition.
The user accessing this API must have the workbench_deployment_immutablepackage_export permission. For more information about the roles and permissions required, refer to the section Workbench Roles and Permissions.
The Encrypted Resilient Package API uses the v1 version.
If you want to perform common operations using the Encrypted Resilient Package API, then refer to the section Using the Common REST API Endpoints.
The following table provides a section reference to the Encrypted Resilient Package API.
This API request exports the resilient package that can be used with resilient protectors. You can use Certificate authentication and JWT authentication for encrypting and exporting the resilient package.
Warning: Do not modify the package that has been exported using the RPS Service API. If you modify the exported package, then the package will get corrupted.
The resilient package that has been exported using the Encrypted Resilient Package API is not FIPS-compliant.
Base URL
https://<FQDN>/pty/v1/rps
Path
/export
Method
GET
Request Body
- TOKEN: JWT token used for authenticating the API- For more information about creating a JWT token, refer to the section Generate token.
Specify the fingerprint of the Data Store Export Key. The fingerprint is used to identify which Data Store to export and which export key to use for protecting the resilient package. The user with the Security Officer permissions must share the fingerprint of the Export Key with the user who is executing this API. For more information about obtaining the fingerprint of the Data Store Export Key, refer to step 7 of the section Adding Export Key.
version
Set the schema version of the exported resilient package that is supported by the specific protector.
coreVersion
Set the Core policy schema version that is supported by the specific protector.
This sample request uses the JWT token authentication.
Sample response
The rps.json file is exported using the public key associated with the specified fingerprint.
Protect the encrypted resilient package with standard file permissions to ensure that only the dedicated protectors can access the package.
5.7 - Roles and Permissions
List of Roles and Permissions
Roles are templates that include permissions and users can be assigned to one or more roles. All users in the appliance must be associated with a role.
The roles packaged with PPC are as follows:
Roles
Description
Permissions
directory_administrator
Role to manage users, groups, and their attributes
saml_admin
role_admin
user_manager_admin
can_create_token
password_policy_admin
group_admin
directory_viewer
Role to query and view users and groups and their attributes
saml_viewer
password_policy_viewer
user_manager_viewer
role_viewer
group_viewer
security_administrator
Role to manage users, roles, groups, and security‑related configurations, including SAML, certificates, packages, and insights
can_fetch_package
role_admin
web_admin
cli_access
saml_admin
can_export_certificates
user_manager_admin
can_create_token
password_policy_admin
group_admin
insight_admin
security_viewer
Role with Read access
saml_viewer
password_policy_viewer
insight_viewer
user_manager_viewer
role_viewer
group_viewer
Note: Deleting the default roles, such as, directory_administrator, directory_viewer, security_administrator, and security_viewer, using the API or CLI is not supported.
The capabilities of a role are defined by the permissions attached to the role. Though roles can be created or modified from the appliance, permissions cannot be edited. The following permissions are packaged with PPC and are available to assign to roles:
Permissions
Description
role_admin
Permission to manage roles with read-write access
role_viewer
Permission to view roles with read-only access
user_manager_admin
Permission to manage users with read-write access
user_manager_viewer
Permission to view users with read-only access
group_admin
Permission to manage groups with read-write access
group_viewer
Permission to view groups with read-only access
password_policy_admin
Permission to update password policies with read-write access
password_policy_viewer
Permission to view password policies with read-only access
saml_admin
Permission to update SAML configurations with read-write access
saml_viewer
Permission to view SAML configurations with read-only access
can_fetch_package
Permission to download resilient packages
can_create_token
Permission to create/refresh tokens
can_export_certificates
Permission to download protector certificates
web_admin
Permission to perform all operations available as part of the Web UI
cli_access
Permission to access CLI
insight_admin
Permission to view and edit Insight Dashboard with admin access
insight_viewer
Permission to view Insight Dashboard with read-only access
6 - Protegrity Command Line Interface (CLI) Reference
Overview of the Protegrity CLI.
The Protegrity CLI includes the following CLIs:
Administrator CLI: The Administrator CLI is used to perform administrative tasks for the PPC.
Policy Management CLI: The Policy Management CLI is used to create or manage policies. The CLI performs the same function that can be performed using the Policy Management APIs. For more information about using the Policy Management APIs, refer to the section Using the Policy Management REST APIs.
Important: The Policy Management CLI will work only after you have installed the workbench.
Insight CLI: The Insight CLI is used to work with logs, such as, forwarding logs to an external SIEM.
6.1 - Administrator Command Line Interface (CLI) Reference
Administrator CLI documentation.
Use the admin CLI commands to manage users, roles, permissions, groups, SAML providers, and Entra ID integrations. This section covers all available subcommands with syntax and examples.
admin
This section shows how to access help and provides examples for admin.
The following command shows how to access help and provides examples for create.
admin create --help
Usage: admin create [OPTIONS] COMMAND [ARGS]...
Create a resource.
Options:
--help Show this message and exit.
Commands:
entra-id Create Entra ID configuration.
entra-id-import-groups Import Entra ID groups with optional member...
entra-id-import-users Import Entra ID users with role assignments.
groups Create a new group.
roles Create a new role.
saml-mappers Create an attribute mapper for a SAML provider.
saml-providers Create a new SAML SSO provider.
users Create a new user.
create entra-id
The following command shows how to access help and provides examples for create entra-id.
admin create entra-id --help
Usage: admin create entra-id [OPTIONS]
Create Entra ID configuration.
Required Entra ID Setup:
1. Register an application in Entra ID
2. Grant Microsoft Graph API permissions:
- User.Read.All (Application)
- Group.Read.All (Application) - if importing groups
3. Create a client secret for the application
4. Note the Tenant ID, Application (Client) ID, and Client Secret
Examples:
admin create entra-id --tenant-id "12345678-1234-1234-1234-123456789012" --client-id "87654321-4321-4321-4321-210987654321" --client-secret "your-secret-here"
Options:
-t, --tenant-id TEXT Entra ID Tenant ID [required]
-c, --client-id TEXT Entra ID Application (Client) ID [required]
-s, --client-secret TEXT Entra ID Application Client Secret [required]
--enabled / --disabled Enable/disable configuration
--help Show this message and exit.
create entra-id-import-users
The following command shows how to access help and provides examples for create entra-id-import-users.
admin create entra-id-import-users --help
Usage: admin create entra-id-import-users [OPTIONS]
Import Entra ID users with role assignments.
Import users from Entra ID into the application with role assignments.
Users must be provided via JSON data.
JSON Format:
{
"users": [
{
"userPrincipalName": "john.doe@company.com",
"email": "john.doe@company.com",
"firstName": "John",
"lastName": "Doe",
"roles": ["admin", "user"],
"identityProviders": ["AWS-IDP", "AZURE-IDP"]
}
],
"dryRun": false
}
Examples:
# Direct JSON input with identity providers
admin create entra-id-import-users --json-data '{"users":[{"userPrincipalName":"john@company.com","email":"john@company.com","firstName":"John","lastName":"Doe","roles":["user"],"identityProviders":["AWS-IDP","AZURE-IDP"]}]}'
# Dry run with JSON
admin create entra-id-import-users --json-data '{"users":[...]}' --dry-run
Options:
--dry-run Validate import without creating users
-j, --json-data TEXT JSON string with users data to import directly
[required]
--help Show this message and exit.
create entra-id-import-groups
The following command shows how to access help and provides examples for create entra-id-import-groups.
admin create entra-id-import-groups --help
Usage: admin create entra-id-import-groups [OPTIONS]
Import Entra ID groups with optional member import.
Import groups from Entra ID into the system with role assignments for members.
Groups must be provided via JSON data.
JSON Format:
{
"groups": [
{
"id": "12345678-1234-1234-1234-123456789012",
"displayName": "Administrators",
"description": "Administrative users group",
"importMembers": true,
"memberRoles": ["admin", "user"],
"identityProviders": ["AWS-IDP", "AZURE-IDP"]
}
],
"dryRun": false
}
Examples:
# Direct JSON input with identity providers
admin create entra-id-import-groups --json-data '{"groups":[{"id":"12345678-1234-1234-1234-123456789012","displayName":"IT Admins","description":"IT department administrators","importMembers":true,"memberRoles":["admin"],"identityProviders":["AWS-IDP","AZURE-IDP"]}]}'
# Dry run with JSON
admin create entra-id-import-groups --json-data '{"groups":[...]}' --dry-run
Options:
--dry-run Validate import without creating groups
-j, --json-data TEXT JSON string with groups data to import directly
[required]
--help Show this message and exit.
create groups
The following command shows how to access help and provides examples for create groups.
admin create groups --help
Usage: admin create groups [OPTIONS]
Create a new group.
Examples:
admin create groups --name developers --description "Development team"
admin create groups --name admins --members "john,jane" --roles "admin,user_manager"
admin create groups --name operators --description "System operators" --members "user1,user2" --roles "operator"
Options:
-n, --name TEXT Group name [required]
-d, --description TEXT Group description
-m, --members TEXT Comma-separated list of usernames to add as members
-r, --roles TEXT Comma-separated list of role names to assign to
group
--help Show this message and exit.
create roles
The following command shows how to access help and provides examples for create roles.
The following command shows how to access help and provides examples for create saml-mappers.
admin create saml-mappers --help
Usage: admin create saml-mappers [OPTIONS] PROVIDER_ALIAS
Create an attribute mapper for a SAML provider.
Examples:
admin create saml-mappers azure-ad --name email-mapper --mapper-type saml-user-attribute-idp-mapper --attribute-name "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" --user-attribute email
admin create saml-mappers azure-ad --name role-mapper --mapper-type saml-role-idp-mapper --attribute-value admin --role admin
Options:
-n, --name TEXT Name of the attribute mapper [required]
--mapper-type [saml-user-attribute-idp-mapper|saml-role-idp-mapper|saml-advanced-group-idp-mapper|saml-username-idp-mapper]
Type of mapper [required]
--sync-mode TEXT Sync mode for the mapper
--attribute-name TEXT SAML attribute name to map from
--user-attribute TEXT User attribute to map to
--attribute-value TEXT SAML attribute value for role mapping
--role TEXT Role to assign
--group TEXT Group to assign users to
--template TEXT Username template
--attributes TEXT Key-value pairs for attribute mapping (JSON
format)
--help Show this message and exit.
create saml-providers
The following command shows how to access help and provides examples for create saml-providers.
admin create saml-providers --help
Usage: admin create saml-providers [OPTIONS]
Create a new SAML SSO provider.
Examples:
admin create saml-providers --alias azure-ad --display-name "Azure AD" --config-type metadataUrl --service-provider-entity-id "https://your-saml.com/realms/your-realm" --metadata-url "https://..."
admin create saml-providers --alias okta --display-name "Okta" --config-type metadataFile --service-provider-entity-id "https://your-saml.com/realms/your-realm" --metadata-file /path/to/metadata.xml
Options:
-a, --alias TEXT Unique alias for the SAML provider
[required]
-d, --display-name TEXT Display name shown in login pages
[required]
--config-type [metadataUrl|metadataFile]
Configuration type [required]
--service-provider-entity-id TEXT
Service Provider Entity ID [required]
--metadata-url TEXT URL to fetch SAML metadata (for metadataUrl
type)
--metadata-file FILENAME Path to SAML metadata XML file (for
metadataFile type)
--signing-certificate TEXT X.509 certificate for signing (PEM format
without headers)
--name-id-format TEXT NameID Policy Format
--force-authn / --no-force-authn
Force re-authentication
--validate-signature / --no-validate-signature
Validate SAML response signatures
--want-assertions-signed / --no-want-assertions-signed
Require signed assertions
--want-assertions-encrypted / --no-want-assertions-encrypted
Require encrypted assertions
--signature-algorithm TEXT Signature algorithm for SAML requests
--post-binding-response / --no-post-binding-response
Use POST binding for SAML responses
--post-binding-authn-request / --no-post-binding-authn-request
Use POST binding for SAML authentication
requests
--post-binding-logout / --no-post-binding-logout
Use POST binding for SAML logout requests
--want-authn-requests-signed / --no-want-authn-requests-signed
Sign SAML authentication requests
--attribute-mapping TEXT Attribute mapping as JSON string or
key=value pairs
--enabled / --disabled Enable/disable the provider
--store-token / --no-store-token
Store tokens returned by the identity
provider
--help Show this message and exit.
Note: The --metadata-file option is not supported. You cannot upload or copy the metadata file. Instead, use the --metadata-url option to configure SAML.
create users
The following command shows how to access help and provides examples for create users.
admin create users --help
Usage: admin create users [OPTIONS]
Create a new user.
Examples:
admin create users --username john.doe --email john@example.com --password "StrongPass123!"
admin create users --username jane --email jane@example.com --password "SecurePass123!" --first-name Jane --last-name Smith --roles "admin,user"
admin create users --username alpha --email alpha@example.com --password "AlphaPass123!" --identity-provider "AWS-IDP:alpha@example.com:alpha@example.com"
admin create users --username beta --password "BetaPass123!" --identity-provider "AWS-IDP:beta@example.com:beta@example.com" --identity-provider "AZURE-IDP:beta@azure.com:beta"
Options:
-u, --username TEXT Username [required]
-e, --email TEXT Email address
--first-name TEXT First name
--last-name TEXT Last name
-p, --password TEXT Password
--roles TEXT Comma-separated list of role names
--groups TEXT Comma-separated list of group names
--identity-provider TEXT Identity provider in format:
PROVIDER_NAME:userId:userName (can be specified
multiple times)
--help Show this message and exit.
delete
This section lists the delete commands.
The following command shows how to access help and provides examples for delete.
admin delete --help
Usage: admin delete [OPTIONS] COMMAND [ARGS]...
Delete a resource.
Options:
--help Show this message and exit.
Commands:
entra-id Delete Entra ID configuration.
groups Delete a group.
roles Delete a role.
saml-mappers Delete an attribute mapper for a SAML provider.
saml-providers Delete a SAML SSO provider.
users Delete a user by ID.
delete entra-id
The following command shows how to access help and provides examples for delete entra-id.
admin delete entra-id --help
Usage: admin delete entra-id [OPTIONS]
Delete Entra ID configuration.
Warning: This action cannot be undone and will permanently remove
all stored Entra ID settings.
Examples:
admin delete entra-id
Options:
--help Show this message and exit.
delete groups
The following command shows how to access help and provides examples for delete groups.
admin delete groups --help
Usage: admin delete groups [OPTIONS] GROUP_ID
Delete a group.
Examples:
admin delete groups group-uuid-here
admin delete groups group-uuid-here --delete-members
Options:
-d, --delete-members Delete all members of the group along with the group
--help Show this message and exit.
delete roles
The following command shows how to access help and provides examples for delete roles.
admin delete roles --help
Usage: admin delete roles [OPTIONS] ROLE_NAME
Delete a role.
Examples:
admin delete roles admin
Options:
--help Show this message and exit.
Note: Deleting a default role (directory_administrator, directory_viewer, security_administrator, and security_viewer) using admin delete roles is not supported. This command applies only to custom roles created by users.
delete saml-mappers
The following command shows how to access help and provides examples for delete saml-mappers.
admin delete saml-mappers --help
Usage: admin delete saml-mappers [OPTIONS] PROVIDER_ALIAS MAPPER_ID
Delete an attribute mapper for a SAML provider.
Examples:
admin delete saml-mappers azure-ad mapper-uuid
Options:
--help Show this message and exit.
delete saml-providers
The following command shows how to access help and provides examples for delete saml-providers.
admin delete saml-providers --help
Usage: admin delete saml-providers [OPTIONS] ALIAS
Delete a SAML SSO provider.
Examples:
admin delete saml-providers azure-ad
Options:
--help Show this message and exit.
delete users
The following command shows how to access help and provides examples for delete users.
admin delete users --help
Usage: admin delete users [OPTIONS] USER_ID
Delete a user by ID.
Examples:
admin delete users USER_ID
Options:
--help Show this message and exit.
get
This section lists the get commands.
The following command shows how to access help and provides examples for get.
admin get --help
Usage: admin get [OPTIONS] COMMAND [ARGS]...
Display one resource.
Options:
--help Show this message and exit.
Commands:
brute_force Get current brute force detection configuration.
email Get current SMTP configuration.
email-health Get detailed health status of the email service.
email-log Get current log level.
email-version Get email version information.
entra-id Get current Entra ID configuration.
groups Get detailed information about a specific group.
log-level Get current log level from the backend.
password_policy Get current password policy configuration.
roles Get detailed information about a specific role.
saml-mappers Get detailed information about a SAML provider...
saml-providers Get detailed information about a specific SAML provider.
users Get detailed information about a specific user.
version Get application version information.
get brute_force
The following command shows how to access help and provides examples for get brute_force.
admin get brute_force --help
Usage: admin get brute_force [OPTIONS]
Get current brute force detection configuration.
Options:
--help Show this message and exit.
get email
The following command shows how to access help and provides examples for get email.
admin get email --help
Usage: admin get email [OPTIONS]
Get current SMTP configuration.
Examples:
admin get email
Options:
--help Show this message and exit.
get email-health
The following command shows how to access help and provides examples for get email-health.
admin get email-health --help
Usage: admin get email-health [OPTIONS]
Get detailed health status of the email service.
Examples:
admin get email-health
Options:
--help Show this message and exit.
get email-log
The following command shows how to access help and provides examples for get email-log.
admin get email-log --help
Usage: admin get email-log [OPTIONS]
Get current log level.
Examples:
admin get email-log
Options:
--help Show this message and exit.
get email-version
The following command shows how to access help and provides examples for get email-version.
admin get email-version --help
Usage: admin get email-version [OPTIONS]
Get email version information.
Examples:
admin get email-version
Options:
--help Show this message and exit.
get entra-id
The following command shows how to access help and provides examples for get entra-id.
admin get entra-id --help
Usage: admin get entra-id [OPTIONS]
Get current Entra ID configuration.
Examples:
admin get entra-id
Options:
--help Show this message and exit.
get groups
The following command shows how to access help and provides examples for get groups.
admin get groups --help
Usage: admin get groups [OPTIONS] GROUP_ID
Get detailed information about a specific group.
Examples:
admin get groups group-uuid-here
admin get groups developers
Options:
--help Show this message and exit.
get password_policy
The following command shows how to access help and provides examples for get password_policy.
admin get password_policy --help
Usage: admin get password_policy [OPTIONS]
Get current password policy configuration.
Options:
--help Show this message and exit.
get roles
The following command shows how to access help and provides examples for get roles.
admin get roles --help
Usage: admin get roles [OPTIONS] ROLE_NAME
Get detailed information about a specific role.
Examples:
admin get roles admin
Options:
--help Show this message and exit.
get saml-mappers
The following command shows how to access help and provides examples for get saml-mappers.
admin get saml-mappers --help
Usage: admin get saml-mappers [OPTIONS] ALIAS
Get detailed information about a SAML provider including its mappers.
Examples:
admin get saml-mappers azure-ad
Options:
--help Show this message and exit.
get saml-providers
The following command shows how to access help and provides examples for get saml-providers.
admin get saml-providers --help
Usage: admin get saml-providers [OPTIONS] ALIAS
Get detailed information about a specific SAML provider.
Examples:
admin get saml-providers tttt
admin get saml-providers azure-ad-saml
Options:
--help Show this message and exit.
get users
The following command shows how to access help and provides examples for get users.
admin get users --help
Usage: admin get users [OPTIONS] USER_ID
Get detailed information about a specific user.
Examples:
admin get users USER_ID
admin get users 12345-uuid
Options:
--help Show this message and exit.
get version
The following command shows how to access help and provides examples for get version.
admin get version --help
Usage: admin get version [OPTIONS]
Get application version information.
Examples:
admin get version
Options:
--help Show this message and exit.
get log-level
The following command shows how to access help and provides examples for get log-level.
admin get log-level --help
Usage: admin get log-level [OPTIONS]
Get current log level from the backend.
Examples:
admin get log-level
Options:
--help Show this message and exit.
list
This section lists the list commands.
The following command shows how to access help and provides examples for list.
admin list --help
Usage: admin list [OPTIONS] COMMAND [ARGS]...
List resources.
Options:
--help Show this message and exit.
Commands:
entra-id-group-members Search Entra ID group members.
entra-id-groups Search Entra ID groups.
entra-id-users Search Entra ID users.
groups List all groups with their members and roles.
permissions List all available permissions.
roles List all roles.
saml-mappers List all attribute mappers for a SAML provider.
saml-providers List all SAML SSO providers.
users List all users.
list entra-id-group-members
The following command shows how to access help and provides examples for list entra-id-group-members.
admin list entra-id-group-members --help
Usage: admin list entra-id-group-members [OPTIONS]
Search Entra ID group members.
Search for members of a specific Entra ID group.
Search Parameters:
- Group ID: Required group unique identifier (GUID) - case-sensitive
- Search Query: Optional filter for members (searches name and email fields)
Examples:
admin list entra-id-group-members --group-id "12345678-1234-1234-1234-123456789012"
admin list entra-id-group-members --group-id "87654321-4321-4321-4321-210987654321" --search "john"
admin list entra-id-group-members -g "group-guid-here" -s "admin"
Options:
-g, --group-id TEXT Group unique identifier (GUID) [required]
-s, --search TEXT Search query to filter group members
--help Show this message and exit.
list entra-id-groups
The following command shows how to access help and provides examples for list entra-id-groups.
admin list entra-id-groups --help
Usage: admin list entra-id-groups [OPTIONS]
Search Entra ID groups.
Search across displayName field.
If no search query provided, returns all groups.
Pagination:
- Use --max to control number of results per page (max: 999)
- Use --first to skip results (offset)
- Response shows if more results are available
Examples:
# Get first 100 groups (default)
admin list entra-id-groups
# Search with default pagination
admin list entra-id-groups --search "admin"
# Get first 500 groups
admin list entra-id-groups --max 500
# Get maximum groups per page (999)
admin list entra-id-groups --max 999
# Get next page of results
admin list entra-id-groups --max 999 --first 999
# Search with custom pagination
admin list entra-id-groups --search "IT" --max 500 --first 0
To fetch all groups:
# Loop through pages until no more results
admin list entra-id-groups --max 999 --first 0
admin list entra-id-groups --max 999 --first 999
admin list entra-id-groups --max 999 --first 1998
# ... continue until "More results available" is not shown
Options:
-s, --search TEXT Search query to find groups
-m, --max INTEGER Maximum number of groups to return (default: 100, max:
999)
-f, --first INTEGER Offset for pagination (default: 0)
--help Show this message and exit.
list entra-id-users
The following command shows how to access help and provides examples for list entra-id-users.
admin list entra-id-users --help
Usage: admin list entra-id-users [OPTIONS]
Search Entra ID users.
Search across userPrincipalName, givenName, surname, and mail fields.
If no search query provided, returns all enabled users.
Pagination:
- Use --max to control number of results per page (max: 999)
- Use --first to skip results (offset)
- Response shows if more results are available
Examples:
# Get first 100 users (default)
admin list entra-id-users
# Search with default pagination
admin list entra-id-users --search "john"
# Get first 500 users
admin list entra-id-users --max 500
# Get maximum users per page (999)
admin list entra-id-users --max 999
# Get next page of results
admin list entra-id-users --max 999 --first 999
# Search with custom pagination
admin list entra-id-users --search "smith" --max 500 --first 0
To fetch all users:
# Loop through pages until no more results
admin list entra-id-users --max 999 --first 0
admin list entra-id-users --max 999 --first 999
admin list entra-id-users --max 999 --first 1998
# ... continue until "More results available" is not shown
Options:
-s, --search TEXT Search query to find users
-m, --max INTEGER Maximum number of users to return (default: 100, max:
999)
-f, --first INTEGER Offset for pagination (default: 0)
--help Show this message and exit.
list groups
The following command shows how to access help and provides examples for list groups.
admin list groups --help
Usage: admin list groups [OPTIONS]
List all groups with their members and roles.
Examples:
admin list groups
admin list groups --max 10
admin list groups --max 5 --first 10
Options:
-m, --max INTEGER RANGE Maximum number of groups to return [x>=0]
-f, --first INTEGER RANGE Offset for pagination [x>=0]
--help Show this message and exit.
list permissions
The following command shows how to access help and provides examples for list permissions.
admin list permissions --help
Usage: admin list permissions [OPTIONS]
List all available permissions.
Examples:
admin list permissions
admin list permissions --filter "read*"
Options:
-f, --filter TEXT Filter permissions by name pattern
--help Show this message and exit.
list roles
The following command shows how to access help and provides examples for list roles.
admin list roles --help
Usage: admin list roles [OPTIONS]
List all roles.
Examples:
admin list roles
Options:
--help Show this message and exit.
list saml-mappers
The following command shows how to access help and provides examples for list saml-mappers.
admin list saml-mappers --help
Usage: admin list saml-mappers [OPTIONS] PROVIDER_ALIAS
List all attribute mappers for a SAML provider.
Examples:
admin list saml-mappers azure-ad
Options:
--help Show this message and exit.
list saml-providers
The following command shows how to access help and provides examples for list saml-providers.
admin list saml-providers --help
Usage: admin list saml-providers [OPTIONS]
List all SAML SSO providers.
Examples:
admin list saml-providers
Options:
--help Show this message and exit.
list users
The following command shows how to access help and provides examples for list users.
admin list users --help
Usage: admin list users [OPTIONS]
List all users.
Examples:
admin list users
admin list users --max 10
admin list users --max 5 --first 10
Options:
-m, --max INTEGER Maximum number of users to return
-f, --first INTEGER Offset for pagination
--help Show this message and exit.
set
This section lists the set commands.
The following command shows how to access help and provides examples for set.
admin set --help
Usage: admin set [OPTIONS] COMMAND [ARGS]...
Update fields of a resource.
Options:
--help Show this message and exit.
Commands:
brute_force Update brute force detection configuration.
change_my_password Change your own password.
email Update SMTP configuration.
email-log Set email application log level.
entra-id Update existing Entra ID configuration.
groups Update an existing group.
lock_user Lock a user account.
log-level Update the log level (critical, error, warning,...
password_policy Update password policy configuration.
roles Update an existing role.
saml-providers Update an existing SAML SSO provider.
token Update access token lifespan and SSO idle timeout.
unlock_user Unlock a user account and set a new password.
update_my_profile Update your own profile (first name, last name,...
update_password Update user password.
users Update an existing user.
set brute_force
The following command shows how to access help and provides examples for set brute_force.
admin set brute_force --help
Usage: admin set brute_force [OPTIONS]
Update brute force detection configuration.
Options:
--config TEXT Brute force detection configuration as JSON string.
Configurable Keys:
- failureFactor: Number of login failures before lockout (>= 1)
- maxTemporaryLockouts: Temporary lockouts before permanent ban (>= 1)
- waitIncrementSeconds: Lockout wait increment in seconds (>= 60)
- maxFailureWaitSeconds: Maximum wait cap in seconds (>= 60, must be >= waitIncrementSeconds)
- maxDeltaTimeSeconds: Failure count reset window in seconds (>= 60)
Examples:
admin set brute_force --config '{"failureFactor": 5, "maxTemporaryLockouts": 3}'
admin set brute_force --config '{"waitIncrementSeconds": 300, "maxFailureWaitSeconds": 900}'
admin set brute_force --config '{"failureFactor": 10, "maxTemporaryLockouts": 5, "waitIncrementSeconds": 600, "maxFailureWaitSeconds": 1800, "maxDeltaTimeSeconds": 86400}' [required]
--help Show this message and exit.
set change_my_password
The following command shows how to access help and provides examples for set change_my_password.
admin set change_my_password --help
Usage: admin set change_my_password [OPTIONS]
Change your own password.
This command changes the password of the currently authenticated user.
Requires the current password for verification.
Examples:
admin set change_my_password --current-password "OldPass123!" --new-password "NewPass123!"
admin set change_my_password -c "OldPass123!" -n "NewPass123!"
Options:
-c, --current-password TEXT Current password [required]
-n, --new-password TEXT New password [required]
--help Show this message and exit.
set email
The following command shows how to access help and provides examples for set email.
admin set email --help
Usage: admin set email [OPTIONS]
Update SMTP configuration.
Examples:
admin set email -h "smtp.example.com" -p 587 --use-tls -u "app-user" -w "app-password"
Options:
-h, --smtp-host TEXT SMTP server hostname [required]
-p, --smtp-port INTEGER SMTP server port [required]
--use-tls / --no-tls Enable/disable TLS
-u, --username TEXT SMTP username
-w, --password TEXT SMTP password
--help Show this message and exit.
set email-log
The following command shows how to access help and provides examples for set email-log.
admin set email-log --help
Usage: admin set email-log [OPTIONS]
Set email application log level.
Examples:
admin set email-log -l debug
admin set email-log -l info
Options:
-l, --level [debug|info|warning|error|critical]
Log level to set [required]
--help Show this message and exit.
set entra-id
The following command shows how to access help and provides examples for set entra-id.
admin set entra-id --help
Usage: admin set entra-id [OPTIONS]
Update existing Entra ID configuration.
Only provided fields are updated. Configuration is tested if credentials are changed.
Examples:
admin set entra-id --enabled
admin set entra-id --client-secret "new-secret-here"
admin set entra-id --tenant-id "new-tenant-id" --client-id "new-client-id"
Options:
-t, --tenant-id TEXT Update Entra ID Tenant ID
-c, --client-id TEXT Update Entra ID Application (Client) ID
-s, --client-secret TEXT Update Entra ID Application Client Secret
--enabled / --disabled Enable/disable configuration
--help Show this message and exit.
set groups
The following command shows how to access help and provides examples for set groups.
admin set groups --help
Usage: admin set groups [OPTIONS] GROUP_ID
Update an existing group.
Examples:
admin set groups group-uuid --description "New description"
admin set groups group-uuid --members "john,jane,bob"
admin set groups group-uuid --roles "admin,user_manager"
admin set groups group-uuid --members "user1,user2" --roles "operator,viewer"
admin set groups group-uuid --identity-providers "AWS-IDP,AZURE-IDP"
admin set groups group-uuid --members "john.doe,senior.dev" --roles "senior_admin,lead_developer" --identity-providers "AWS-IDP,AZURE-IDP"
Options:
-d, --description TEXT Group description
-m, --members TEXT Comma-separated list of usernames (replaces
existing members)
-r, --roles TEXT Comma-separated list of role names (replaces
existing roles)
-i, --identity-providers TEXT Comma-separated list of identity provider
names (replaces existing providers)
--help Show this message and exit.
set lock_user
The following command shows how to access help and provides examples for set lock_user.
admin set lock_user --help
Usage: admin set lock_user [OPTIONS] USER_ID
Lock a user account.
Examples:
admin set lock_user USER_ID
Options:
--help Show this message and exit.
set log-level
The following command shows how to access help and provides examples for set log-level.
admin set log-level --help
Usage: admin set log-level [OPTIONS] {critical|error|warning|info|debug}
Update the log level (critical, error, warning, info, debug).
Examples:
admin set log-level info
admin set log-level debug
Options:
--help Show this message and exit.
set password_policy
The following command shows how to access help and provides examples for set password_policy.
admin set password_policy --help
Usage: admin set password_policy [OPTIONS]
Update password policy configuration.
Options:
--policy TEXT Password policy configuration as JSON string.
Common Keys:
- length: Minimum password length
- digits: Number of digits required
- lowerCase: Number of lowercase characters required
- upperCase: Number of uppercase characters required
- specialChars: Number of special characters required
- notUsername: Password cannot be same as username (true or false)
- passwordHistory: Number of previous passwords to remember
- maxLength: Maximum password length
- forceExpiredPasswordChange: Number of days before password expires and must be changed
Examples:
admin set password_policy --policy '{"length": 14, "digits": 1, "upperCase": 1, "specialChars": 1}'
admin set password_policy --policy '{"length": 14, "digits": 2, "lowerCase": 1, "upperCase": 1, "specialChars": 2, "notUsername": true}'
admin set password_policy --policy '{"length": 14, "passwordHistory": 5, "forceExpiredPasswordChange": 90, "maxLength": 128}' [required]
--help Show this message and exit.
set roles
The following command shows how to access help and provides examples for set roles.
admin set roles --help
Usage: admin set roles [OPTIONS] ROLE_NAME
Update an existing role.
Examples:
admin set roles admin --description "Updated admin role"
admin set roles manager --permissions --add "role_admin"
admin set roles manager --permissions --remove "group_admin"
admin set roles manager --permissions --add "role_admin" --remove "group_admin"
admin set roles operator --description "New desc" --permissions --add "role_admin"
admin set roles manager --permissions "role_admin"
admin set roles operator --description "System operator" --permissions "role_admin,group_admin"
Options:
-d, --description TEXT New role description
-p, --permissions TEXT Comma-separated permissions to overwrite all
existing, or bare flag with --add/--remove
--add TEXT Comma-separated permissions to add (use with
--permissions flag)
--remove TEXT Comma-separated permissions to remove (use with
--permissions flag)
--help Show this message and exit.
set saml-providers
The following command shows how to access help and provides examples for set saml-providers.
admin set saml-providers --help
Usage: admin set saml-providers [OPTIONS] ALIAS
Update an existing SAML SSO provider.
Only the parameters you explicitly provide will be updated.
Examples:
admin set saml-providers azure-ad --display-name "New Azure AD"
admin set saml-providers Test --enabled
admin set saml-providers Test --disabled
admin set saml-providers Test --force-authn
admin set saml-providers Test --no-validate-signature
admin set saml-providers Test --metadata-url "https://new-metadata-url.com"
admin set saml-providers Test --signature-algorithm "RSA_SHA512"
Options:
-d, --display-name TEXT Update display name for the provider
--config-type [metadataUrl|metadataFile]
Update configuration type
--service-provider-entity-id TEXT
Update Service Provider Entity ID
--metadata-url TEXT Update metadata URL
--metadata-file FILENAME Update metadata file content
--signing-certificate TEXT Update signing certificate
--name-id-policy-format TEXT Update NameID Policy Format
--force-authn Enable force authentication
--no-force-authn Disable force authentication
--validate-signature Enable signature validation
--no-validate-signature Disable signature validation
--want-assertions-signed Require signed assertions
--no-want-assertions-signed Don't require signed assertions
--want-assertions-encrypted Require encrypted assertions
--no-want-assertions-encrypted Don't require encrypted assertions
--signature-algorithm TEXT Update signature algorithm
--post-binding-response Enable POST binding for responses
--no-post-binding-response Disable POST binding for responses
--post-binding-authn-request Enable POST binding for auth requests
--no-post-binding-authn-request
Disable POST binding for auth requests
--post-binding-logout Enable POST binding for logout
--no-post-binding-logout Disable POST binding for logout
--want-authn-requests-signed Enable authentication request signing
--no-want-authn-requests-signed
Disable authentication request signing
--attribute-mapping TEXT Update attribute mapping (JSON format)
--enabled Enable the provider
--disabled Disable the provider
--store-token Enable token storage
--no-store-token Disable token storage
--help Show this message and exit.
Note: The --metadata-file option is not supported. You cannot upload or copy the metadata file. Instead, use the --metadata-url option to configure SAML.
set unlock_user
The following command shows how to access help and provides examples for set unlock_user.
admin set unlock_user --help
Usage: admin set unlock_user [OPTIONS] USER_ID
Unlock a user account and set a new password.
Examples:
admin set unlock_user USER_ID --password "NewPassword123!"
admin set unlock_user USER_ID -p "StrongPass123!"
Options:
-p, --password TEXT New password to set after unlocking [required]
--help Show this message and exit.
set update_my_profile
The following command shows how to access help and provides examples for set update_my_profile.
admin set update_my_profile --help
Usage: admin set update_my_profile [OPTIONS]
Update your own profile (first name, last name, email).
This command updates the profile of the currently authenticated user. Only
provided fields are updated (patch semantics).
Examples:
admin set update_my_profile --first-name "John" --last-name "Doe"
admin set update_my_profile --email "newemail@example.com"
admin set update_my_profile --first-name "Jane" --last-name "Smith" --email "jane@example.com"
Options:
-e, --email TEXT New email address
--first-name TEXT New first name
--last-name TEXT New last name
--help Show this message and exit.
set update_password
The following command shows how to access help and provides examples for set update_password.
admin set update_password --help
Usage: admin set update_password [OPTIONS] USER_ID
Update user password.
Examples:
admin set update_password USER_ID --new-password "NewPassword123!" --old-password "OldPass123!"
admin set update_password USER_ID -n "NewPass123!" -o "OldPass123!"
Options:
-n, --new-password TEXT New password [required]
-o, --old-password TEXT Current password for validation [required]
--help Show this message and exit.
set users
The following command shows how to access help and provides examples for set users.
admin set users --help
Usage: admin set users [OPTIONS] USER_ID
Update an existing user.
Examples:
admin set users USER_ID --email newemail@example.com
admin set users USER_ID --roles "admin,manager"
admin set users USER_ID --identity-provider "AWS-IDP:alpha@example.com:alpha@example.com"
admin set users USER_ID --identity-provider "AWS-IDP:alpha@example.com:alpha@example.com" --identity-provider "AZURE-IDP:beta@azure.com:beta"
Options:
-e, --email TEXT New email address
--first-name TEXT New first name
--last-name TEXT New last name
--roles TEXT Comma-separated list of role names (replaces
existing)
--groups TEXT Comma-separated list of group names (replaces
existing)
--identity-provider TEXT Identity provider in format:
PROVIDER_NAME:userId:userName (can be specified
multiple times, replaces existing)
--help Show this message and exit.
set token
The following command shows how to access help and provides examples for set token.
admin set token --help
Usage: admin set token [OPTIONS]
Update access token lifespan and SSO idle timeout.
Examples:
admin set token --lifespan 600
admin set token --lifespan 1200
Options:
--lifespan INTEGER RANGE Access token lifespan in seconds (minimum: 60,
maximum: 3600) [60<=x<=3600; required]
--help Show this message and exit.
test
This section lists the test commands.
The following command shows how to access help and provides examples for test.
The following command shows how to access help and provides examples for test email.
admin test email --help
Usage: admin test email [OPTIONS]
Send an email.
Examples:
admin test email -f "sender@example.com" -t "recipient@example.com" -s "Test" -b "This is a test"
admin test email -f "sender@example.com" -t "recipient@example.com" -c "cc@example.com" --bcc-emails "bcc@example.com" -s "Test" -b "Message"
Options:
-f, --from-email TEXT Sender email address [required]
-t, --to-emails TEXT Recipient email address. For multiple recipients,
provide a comma-separated list [required]
-s, --subject TEXT Email subject [required]
-b, --body TEXT Email body content [required]
-c, --cc-emails TEXT CC email address. For multiple recipients, provide a
comma-separated list
--bcc-emails TEXT BCC email address. For multiple recipients, provide a
comma-separated list
--help Show this message and exit.
test entra-id
The following command shows how to access help and provides examples for test entra-id.
admin test entra-id --help
Usage: admin test entra-id [OPTIONS]
Test Entra ID connection.
Test Options:
1. Test stored configuration: --use-stored
2. Test provided credentials: --tenant-id, --client-id, --client-secret
Examples:
admin test entra-id --use-stored
admin test entra-id --tenant-id "tenant-id" --client-id "client-id" --client-secret "secret"
Options:
--use-stored Test stored configuration
-t, --tenant-id TEXT Entra ID Tenant ID (for direct test)
-c, --client-id TEXT Entra ID Application (Client) ID (for direct test)
-s, --client-secret TEXT Entra ID Application Client Secret (for direct
test)
--help Show this message and exit.
6.1.1 - Configuring SAML SSO
Steps to configure SAML SSO using the CLI
SAML SSO enables users to authenticate using enterprise‑managed credentials instead of maintaining separate application passwords.
This section describes how to configure SAML Single Sign‑On (SSO) using an external Identity Provider (IdP) in cloud environments such as Entra ID, AWS, and Google Cloud Platform (GCP).
Setting up SAML SSO using the CLI
This section describes how to configure SAML SSO using the PPC CLI.
Prerequisites
Before you begin, ensure the following prerequisites are met:
Access to an IdP.
Administrative privileges to configure SAML settings in the IdP.
Copy the Metadata URL.
Users and groups already created in the IdP.
Administrative access to the PPC CLI.
The same setup flow applies across Entra ID, AWS, and GCP, with differences limited to the IdP administration interface.
Setting up SAML SSO on Entra ID IdP - An Example
To configure SAML SSO on PPC using Entra ID IdP, perform the following steps:
Log in to the PPC CLI.
Create a SAML provider using the metadata URL from the IdP using the following command.
After successful execution, the following message displays.
Successfully imported 1 user(s)
Verify if the user is imported using the following command.
admin list users
A list of all available users display. The imported user appears in the list. Note the USER_ID.
To get detailed information about a user, run the following command.
admin get users USER_ID
The user details display. The attributes display user type as external, stating that the user is imported from an external IdP.
Open the Web browser and enter the FQDN of the PPC. The Login page displays.
Click Sign in with SAML SSO.
The screen is redirected to the IdP portal for authentication. If the user is not logged in, the login dialog appears. Provide the user credentials for login.
After logging in successfully, the screen automatically redirects to the PPC Dashboard.
SAML SSO is now configured. Users can authenticate using enterprise‑managed credentials and are granted access based on the roles assigned in the PPC.
Creating users for AWS and GCP
This section describes environments where users are created locally using the Admin CLI, rather than being imported from an external IdP. This procedure is applicable to AWS and GCP deployments where SAML SSO is enabled but users are created using the CLI.
Creating local users for AWS and GCP using the CLI
In AWS and GCP environments, administrators can create users directly using the Admin CLI. These users authenticate through the configured SAML provider, while credentials, roles, and access control are managed locally.
To create the users for AWS and GCP using the CLI, perform the following steps:
Configure the SAML provider using the CLI.
Create a local user, set a password, assign one or more roles to define access permissions, using the following command.
The --password parameter sets the initial login password.
The --roles parameter assigns one or more roles that control user permissions.
The user authenticates via the SAML IdP and is authorized based on locally assigned roles.
To update the roles, run the following command:
admin set users USER_ID --roles admin,operator
To update an existing user password, run the following command:
admin set update_password USER_ID \
--old-password OldPassword123! \
--new-password NewPassword123!
To unlock an account, run the following command:
admin set unlock_user USER_ID --password NewPassword123!
Note: In this process, users are not imported from AWS IAM or GCP IAM. Identity authentication is handled through the SAML provider, while user records, passwords, and role assignments are managed locally through the CLI.
Understanding SAML Mappers
SAML mappers define how attributes received from the SAML Identity Provider (IdP) are mapped to local user attributes, roles, or groups during authentication.
SAML mappers are configured per SAML provider and allow administrators to control how identity data is interpreted and applied within the system.
Why SAML Mappers Are Required
SAML assertions typically contain user attributes such as email, username, group membership, or role indicators. SAML mappers translate these attributes into:
Local usernames
User attributes
Role assignments
Group memberships
Without SAML mappers, users may authenticate successfully but will not be assigned the correct access permissions.
Note: SAML mappers are evaluated during user authentication. Ensure that the IdP sends the required attributes and that mapper definitions align with the IdP’s SAML assertion format.
6.2 - Using the Insight Command Line Interface (CLI)
Insight CLI documentation
Main Insight Command
The following command shows to access the help for the insight commands.
insight --help
Usage: insight [OPTIONS] COMMAND [ARGS]...
Log Management and Log Forwarding commands.
EXAMPLES:
# Verify if configuration exists
insight list fluentd
or
insight list syslog
# Test connection to SIEM
insight test fluentd --host <fluentd_address> --port <fluentd_port>
or
insight test syslog --host <syslog_address> --port <syslog_port>
# Configure external SIEM
insight configure fluentd --host <fluentd_address> --port <fluentd_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
or
insight configure syslog --host <syslog_address> --port <syslog_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
# Update configurations
insight update fluentd --host <fluentd_address> --port <fluentd_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
or
insight update syslog --host <syslog_address> --port <syslog_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
# Delete if configuration exists
insight delete fluentd
or
insight delete syslog
Options:
--help Show this message and exit.
Commands:
configure Configure log forwarding to external system.
delete Remove log forwarding configurations to external system.
list Show the current log forwarding configurations.
test Test connectivity to external system.
update Update log forwarding configurations.
Configure Command
The following section lists the insight configure commands. The pods take some time to initialize and stabilize, about 15 minutes, after running this command. Avoid updating any more configurations till the pds are ready. Verify the status of the pods using the kubectl get pods -n pty-insightcommand.
Main Configure Command
The following command shows how to access help for the insight configure command.
insight configure --help
Usage: insight configure [OPTIONS] COMMAND [ARGS]...
Configure log forwarding to external system.
EXAMPLES:
# Configure external SIEM
insight configure fluentd --host <fluentd_address> --port <fluentd_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
or
insight configure syslog --host <syslog_address> --port <syslog_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
Options:
--help Show this message and exit.
Commands:
fluentd Set up log forwarding to an external Fluentd server.
syslog Set up log forwarding to an external Syslog server.
Configure Fluentd Command
The following command shows how to access help for the insight configure fluentd command.
insight configure fluentd --help
Usage: insight configure fluentd [OPTIONS]
Set up log forwarding to an external Fluentd server.
EXAMPLES:
# Configure external Fluentd server
insight configure fluentd --host <fluentd_address> --port <fluentd_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>"
# Configure external Fluentd server (with troubleshooting logs)
insight configure fluentd --host <fluentd_address> --port <fluentd_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>" --troubleshooting_log True
Options:
--host TEXT External Fluentd server address [required]
--port INTEGER External Fluentd server port [required]
--ca_content TEXT Content of the CA certificate [required]
--cert_content TEXT Content of the client certificate [required]
--key_content TEXT Content of the client private key [required]
--troubleshooting_log BOOLEAN Enable troubleshooting log forward
--help Show this message and exit.
Configure Syslog Command
The following command shows how to access help for the insight configure syslog command.
insight configure syslog --help
Usage: insight configure syslog [OPTIONS]
Set up log forwarding to an external Syslog server.
EXAMPLES:
# Configure external Syslog server
insight configure syslog --host <syslog_address> --port <syslog_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>"
# Configure external Syslog server (with troubleshooting logs)
insight configure syslog --host <syslog_address> --port <syslog_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>" --troubleshooting_log True
Options:
--host TEXT Syslog server address [required]
--port INTEGER Syslog server port [required]
--ca_content TEXT Content of the CA certificate [required]
--cert_content TEXT Content of the client certificate [required]
--key_content TEXT Content of the client private key [required]
--troubleshooting_log BOOLEAN Enable troubleshooting log forward
--help Show this message and exit.
Delete Command
The following section lists the insight delete commands. The pods take some time to initialize and stabilize, about 15 minutes, after running this command. Avoid updating any more configurations till the pds are ready. Verify the status of the pods using the kubectl get pods -n pty-insightcommand.
Main Delete Command
The following command shows how to access help for the insight delete command.
insight delete --help
Usage: insight delete [OPTIONS] COMMAND [ARGS]...
Remove log forwarding configurations to external system.
EXAMPLES:
# Delete if configuration exists
insight delete fluentd
or
insight delete syslog
Options:
--help Show this message and exit.
Commands:
fluentd Remove log forwarding configurations and certificates to external system.
syslog Remove log forwarding configurations and certificates to external system.
Delete Fluentd Command
The following command shows how to access help for the insight delete fluentd command.
insight delete fluentd --help
Usage: insight delete fluentd [OPTIONS]
Remove log forwarding configurations and certificates to external system.
EXAMPLES:
# Delete if configuration exists
insight delete fluentd
Options:
--help Show this message and exit.
Delete Syslog Command
The following command shows how to access help for the insight delete syslog command.
insight delete syslog --help
Usage: insight delete syslog [OPTIONS]
Remove log forwarding configurations and certificates to external system.
EXAMPLES:
# Delete if configuration exists
insight delete syslog
Options:
--help Show this message and exit.
List Command
The following section lists the insight list commands.
Main List Command
The following command shows how to access help for the insight list command.
insight list --help
Usage: insight list [OPTIONS] COMMAND [ARGS]...
Show the current log forwarding configurations.
EXAMPLES:
# Verify if configuration exists
insight list fluentd
or
insight list syslog
Options:
--help Show this message and exit.
Commands:
fluentd Show the current log forwarding configurations.
syslog Show the current log forwarding configurations.
List Fluentd Command
The following command shows how to access help for the insight list fluentd command.
insight list fluentd --help
Usage: insight list fluentd [OPTIONS]
Show the current log forwarding configurations.
EXAMPLES:
# Verify if configuration exists
insight list fluentd
Options:
--help Show this message and exit.
List Syslog Command
The following command shows how to access help for the insight list syslog command.
insight list syslog --help
Usage: insight list syslog [OPTIONS]
Show the current log forwarding configurations.
EXAMPLES:
# Verify if configuration exists
insight list syslog
Options:
--help Show this message and exit.
Test Command
The following section lists the insight test commands.
Main Test Command
The following command shows how to access help for the insight test command.
insight test --help
Usage: insight test [OPTIONS] COMMAND [ARGS]...
Test connectivity to external system.
EXAMPLES:
# Test connection to SIEM
insight test fluentd --host <fluentd_address> --port <fluentd_port>
or
insight test syslog --host <syslog_address> --port <syslog_port>
Options:
--help Show this message and exit.
Commands:
fluentd Test connectivity to external Fluentd server.
syslog Test connectivity to external Syslog server.
Test Fluentd Command
The following command shows how to access help for the insight test fluentd command.
insight test fluentd --help
Usage: insight test fluentd [OPTIONS]
Test connectivity to external Fluentd server.
EXAMPLES:
# Test connection
insight test fluentd --host <fluentd_address> --port <fluentd_port>
Options:
--host TEXT External Fluentd server address [required]
--port INTEGER External Fluentd server port [required]
--timeout INTEGER Time allowed for the test [default: 5]
--help Show this message and exit.
Test Syslog Command
The following command shows how to access help for the insight test syslog command.
insight test syslog --help
Usage: insight test syslog [OPTIONS]
Test connectivity to external Syslog server.
EXAMPLES:
# Test connection
insight test syslog --host <syslog_address> --port <syslog_port>
Options:
--host TEXT Syslog server address [required]
--port INTEGER Syslog server port [required]
--timeout INTEGER Time allowed for the test [default: 5]
--help Show this message and exit.
Update Command
The following section lists the insight update commands. The pods take some time to initialize and stabilize, about 15 minutes, after running this command. Avoid updating any more configurations till the pds are ready. Verify the status of the pods using the kubectl get pods -n pty-insightcommand.
Main Update Command
The following command shows how to access help for the insight update command.
insight update --help
Usage: insight update [OPTIONS] COMMAND [ARGS]...
Update log forwarding configurations.
EXAMPLES:
# Update log forwarding configurations to external SIEM
insight update fluentd --host <fluentd_address> --port <fluentd_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
or
insight update syslog --host <syslog_address> --port <syslog_port> --ca_content "<ca.crt_content>" --cert_content "<client.crt_content>" --key_content "<client.key_content>"
Options:
--help Show this message and exit.
Commands:
fluentd Update log forwarding for external Fluentd server.
syslog Update log forwarding for external Syslog server.
Update Fluentd Command
The following command shows how to access help for the insight update fluentd command.
insight update fluentd --help
Usage: insight update fluentd [OPTIONS]
Update log forwarding for external Fluentd server.
EXAMPLES:
# Update configurations for external Fluentd server
insight update fluentd --host <fluentd_address> --port <fluentd_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>"
# Update configurations for external Fluentd server (with troubleshooting
logs)
insight update fluentd --host <fluentd_address> --port <fluentd_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>" --troubleshooting_log True
Options:
--host TEXT External Fluentd server address [required]
--port INTEGER External Fluentd server port [required]
--ca_content TEXT Content of the CA certificate [required]
--cert_content TEXT Content of the client certificate [required]
--key_content TEXT Content of the client private key [required]
--troubleshooting_log BOOLEAN Enable troubleshooting log forward
--help Show this message and exit.
Update Syslog Command
The following command shows how to access help for the insight update syslog command.
insight update syslog --help
Usage: insight update syslog [OPTIONS]
Update log forwarding for external Syslog server.
EXAMPLES:
# Update configurations for external Syslog server
insight update syslog --host <syslog_address> --port <syslog_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>"
# Update configurations for external Syslog server (with troubleshooting
logs)
insight update syslog --host <syslog_address> --port <syslog_port>
--ca_content "<ca.crt_content>" --cert_content "<client.crt_content>"
--key_content "<client.key_content>" --troubleshooting_log True
Options:
--host TEXT Syslog server address [required]
--port INTEGER Syslog server port [required]
--ca_content TEXT Content of the CA certificate [required]
--cert_content TEXT Content of the client certificate [required]
--key_content TEXT Content of the client private key [required]
--troubleshooting_log BOOLEAN Enable troubleshooting log forward
--help Show this message and exit.
6.2.1 - Sending logs to an external security information and event management (SIEM)
Information to forward the logs generated to the Audit Store and SIEM.
This is an optional step.
The Protegrity infrastructure provides a robust setup for logging and analyzing the logs generated. It might be possible that an existing infrastructure is available for collating and analyzing logs.
In the default setup, the logs are sent from the protectors directly to the Audit Store using the Log Forwarder on the protector. Use the configuration provided in this section to send the logs to the Audit Store and the external SIEM.
Prerequisites
Ensure that the following prerequisites are met:
The external SIEM is accessible.
The required ports are open on the external SIEM.
The certificates for accessing the external SIEM are available.
Prepare the CA.pem, client.pem, and client.key certificate content using the following steps:
Navigate to the directory where the certificates from the SIEM are stored.
Run the following command to obtain the CA certificate file content.
awk '{printf "%s\\n", $0}' <CA_certificate_file>
Example:
awk '{printf "%s\\n", $0}' CA.pem
Run the following command to obtain the client certificate content.
The pods take some time to initialize and stabilize after running this command. Verify the status of the pods using the kubectl get pods -n pty-insightcommand. Avoid updating any more configurations till the pods are ready.
Configuring the syslog that receives the logs
The logs forwarded to the SIEM are captured by syslog on the SIEM. Ensure that the syslog on the SIEM is configured to send the logs to the required location, such as, a file or another system. For more information about the forwarding logs to various systems, refer to the rsyslog documentation.
Updating the log forwarding configuration
The command to update the logs forwarding settings to the syslog server.
The pods take some time to initialize and stabilize after running this command. Verify the status of the pods using the kubectl get pods -n pty-insightcommand. Avoid updating any more configurations till the pods are ready.
Removing the log forwarding settings
The command stops external SIEM log forwarding, removes the associated configuration, and deletes the certificate-related secrets.
insight delete syslog
The pods take some time to initialize and stabilize after running this command. Verify the status of the pods using the kubectl get pods -n pty-insightcommand. Avoid updating any more configurations till the pods are ready.
fluentd commands
The commands provided here are used for sending logs to the Audit Store, retaining the default storage location, and an external fluentd SIEM.
Viewing the current configuration
The command to view the log forwarding configurations.
insight list fluentd
Verifying connectivity
The command to verify that the external fluentd SIEM is accessible.
insight test fluentd --host <fluentd_address> --port <fluentd_port>
Example:
insight test fluentd --host 192.168.1.100 --port 24284
Forwarding logs to the fluentd server
The command to forward logs to the fluentd server.
The pods take some time to initialize and stabilize after running this command. Verify the status of the pods using the kubectl get pods -n pty-insightcommand. Avoid updating any more configurations till the pods are ready.
Configuring the fluentd that receives the logs
The logs forwarded to the SIEM are captured by fluentd on the SIEM. Ensure that the fluentd on the SIEM is configured to send the logs to the required location, such as, a file or another system. The steps provided here store the logs to a file. For more information about the forwarding logs to various systems, refer to the Fluentd documentation.
To configure the external fluentd:
Log in to the external fluentd.
Create a directory for storing the logs.
mkdir fluentd
Update the required permissions for the directory.
Open the output configuration using a text edition. The file might be in one of the following locations.
/etc/fluent/
/etc/td-agent/conf.d/
/fluentd/etc/
Optional: Update the code to forward the protector logs to the existing location.
Locate the match tag in the file.
Add the logdata flulog code to the tag to forward the protector logs.
<match logdata flulog>
Add a match tag with the configuration to the required location. This example sends the logs to a file on the external SIEM. A sample code is provided here. Customize and use the code for your system.
<match kubernetes.**>
@type copy
<store>
@type file
@log_level info
# MUST include ${tag}
path /fluentd/log/out/audit.${tag}
append true
<format>
@type json
</format>
# MUST include tag because we used ${tag} above
<buffer tag,time>
@type file
path /fluentd/log/buffer/file_out
timekey 1m
timekey_wait 10s
flush_mode interval
flush_interval 10s
flush_thread_count 2
retry_forever true
retry_type periodic
retry_wait 5s
</buffer>
</store>
# keep your existing label routing behavior (optional but usually intended)
</match>
Save and close the file.
Restart the fluentd service.
Updating the log forwarding configuration
The command to update the logs forwarding settings to the syslog server.
The pods take some time to initialize and stabilize after running this command. Verify the status of the pods using the kubectl get pods -n pty-insightcommand. Avoid updating any more configurations till the pods are ready.
Removing the log forwarding settings
The command stops external SIEM log forwarding, removes the associated configuration, and deletes the certificate-related secrets.
insight delete fluentd
The pods take some time to initialize and stabilize after running this command. Verify the status of the pods using the kubectl get pods -n pty-insightcommand. Avoid updating any more configurations till the pods are ready.
6.3 - Policy Management Command Line Interface (CLI) Reference
Policy Management CLI documentation.
Important: The Policy Management CLI will work only after you have installed the workbench.
Main Pim Command
The following command shows to access the help for the pim commands.
pim --help
Usage: pim [OPTIONS] COMMAND [ARGS]...
Policy Information Management commands.
Options:
--help Show this message and exit.
Commands:
create Create a resource.
delete Delete a resource.
get Display one or many resources.
invoke Invoke resource by operation defined by the API.
set Update fields of a resource.
Invoke Commands
The following section lists the invoke commands.
Main Invoke Command
The following command shows how to access help for the invoke command.
pim invoke --help
Usage: pim invoke [OPTIONS] COMMAND [ARGS]...
Invoke resource by operation defined by the API.
Options:
--help Show this message and exit.
Commands:
datastores Commands for deploying datastore resources.
init Bootstrap PIM - Initialize the Policy Information system.
roles Commands for synchronizing role resources.
sources Commands for testing source resources.
Invoke Datastores
The following command shows how to access help for the invoke datastores command. It also provides examples on how to deploy datastore resources.
pim invoke datastores --help
Usage: pim invoke datastores [OPTIONS] COMMAND [ARGS]...
Commands for deploying datastore resources.
Options:
--help Show this message and exit.
Commands:
deploy Deploy policies and/or trusted applications to a specific datastore.
Invoke Datastores Types
The following commands show how to access help for the invoke datastores <type> command.
Invoke Datastores Deploy
The following command shows how to access help for the invoke datastores deploy command. It also provides examples on how to deploy policies or trusted applications or both to a specific datastore.
pim invoke datastores deploy --help
Usage: pim invoke datastores deploy [OPTIONS] DATASTORE_UID
Deploy policies and/or trusted applications to a specific datastore.
EXAMPLES:
# Deploy single policy to datastore
pim invoke datastores deploy 15 --policies 1
# Deploy multiple policies to datastore
pim invoke datastores deploy 15 --policies 1 --policies 2 --policies 3
# Deploy trusted applications to datastore
pim invoke datastores deploy 15 --applications 1 --applications 2
# Deploy both policies and applications together
pim invoke datastores deploy "<datastore-uid>" --policies 1 --policies 2 --applications 1 --applications 2
# Clear all deployments (deploy empty configuration)
pim invoke datastores deploy 42
WORKFLOW:
# Step 1: Verify datastore exists and is accessible
pim get datastores datastore <datastore-uid>
# Step 2: List available policies and applications
pim get policies policy
pim get applications application
# Step 3: Deploy to datastore
pim invoke datastores deploy <datastore-uid> --policies <policy-uid> --applications <app-uid>
Options:
--policies TEXT UIDs of policies to deploy (can be specified multiple
times).
--applications TEXT UIDs of trusted applications to deploy (can be
specified multiple times).
--help Show this message and exit.
Invoke Init
The following command shows how to access help for the invoke init command. It also provides examples on how to initialize the Policy Information Management system.
pim invoke init --help
Usage: pim invoke init [OPTIONS]
Bootstrap PIM - Initialize the Policy Information Management system.
EXAMPLES:
# Initialize PIM system for first-time setup
pim invoke init
Options:
--help Show this message and exit.
Invoke Roles
The following command shows how to access help for the invoke roles command. It also provides examples on how to synchronize role resources.
pim invoke roles --help
Usage: pim invoke roles [OPTIONS] COMMAND [ARGS]...
Commands for synchronizing role resources.
Options:
--help Show this message and exit.
Commands:
sync Synchronize all group members for a role with external identity sources.
Roles Types
The following commands show how to access help for the invoke roles <type> command.
Invoke Roles Sync
The following command shows how to access help for the invoke roles sync command. It also provides examples on how to synchronize all group members for a role.
pim invoke roles sync --help
Usage: pim invoke roles sync [OPTIONS] ROLE_UID
Synchronize all group members for a role with external identity sources.
EXAMPLES:
# Synchronize role members with LDAP/AD source
pim invoke roles sync 15
Options:
--help Show this message and exit.
Invoke Sources
The following command shows how to access help for the invoke sources command. It also provides examples on how to test source resources.
pim invoke sources --help
Usage: pim invoke sources [OPTIONS] COMMAND [ARGS]...
Commands for testing source resources.
Options:
--help Show this message and exit.
Commands:
test Tests the connection and functionality of a source.
Invoke Sources Types
The following commands show how to access help for the invoke sources <type> command.
Invoke Sources Test
The following command shows how to access help for the invoke sources test command. It also provides examples on how to test the connection to a member source.
pim invoke sources test --help
Usage: pim invoke sources test [OPTIONS] UID
Tests the connection and functionality of a source.
EXAMPLES:
# Basic connectivity test
pim invoke sources test 15
Options:
--help Show this message and exit.
Create Commands
The following section lists the create commands.
Main Create Command
The following command shows how to access help for the create command.
pim create --help
Usage: pim create [OPTIONS] COMMAND [ARGS]...
Create a resource.
Options:
--help Show this message and exit.
Commands:
alphabets Creates a new alphabet.
applications Creates a new application.
dataelements Creates a new data element of a specific type.
datastores Commands for creating datastore resources.
deploy Deploys policies and/or trusted applications to a datastore.
masks Creates a new mask with specified masking pattern and configuration.
policies Creates a new policy or rule.
roles Creates a new role or adds members to a role.
sources Creates a new source.
Create Alphabets
The following command shows how to access help for the create alphabets command. It also provides examples on how to create an alphabet.
pim create alphabets --help
Usage: pim create alphabets [OPTIONS]
Creates a new alphabet.
EXAMPLES:
# Create alphabet combining existing alphabets (use numeric UIDs from 'pim get alphabets')
pim create alphabets --label "LatinExtended" --alphabets "1,2"
# Create alphabet with Unicode ranges (Basic Latin + punctuation)
pim create alphabets --label "ASCIIPrintable" --ranges '[{"from": "0020", "to": "007E"}]'
# Create alphabet with specific code points (more than 10 examples)
pim create alphabets --label "SpecialChars" --code-points "00A9,00AE,2122,2603,2615,20AC,00A3,00A5,00B5,00B6,2020,2021,2030,2665,2660"
# Create complex alphabet with multiple options (use numeric UIDs)
pim create alphabets --label "CompleteSet" --alphabets "1,3,5" --ranges '[{"from": "0100", "to": "017F"}, {"from": "1E00", "to": "1EFF"}]' --code-points "20AC,00A3,00A5"
# Create mathematical symbols alphabet
pim create alphabets --label "MathSymbols" --ranges '[{"from": "2200", "to": "22FF"}, {"from": "2190", "to": "21FF"}]'
Options:
--label TEXT The label for the custom alphabet. [required]
--alphabets TEXT Comma-separated list of alphabet UIDs.
--ranges TEXT JSON string of code point ranges. For example, '[{"from":
"0020", "to": "007E"}]'.
--code-points TEXT Comma-separated list of code points.
--help Show this message and exit.
Create Applications
The following command shows how to access help for the create applications command. It also provides examples on how to create a trusted application.
pim create applications --help
Usage:pimcreateapplications[OPTIONS]Createsanewapplication.EXAMPLES:# Create a basic application with required fieldspimcreateapplications--name"WebApp"--application-name"mywebapp"--application-user"webuser"# Create application with descriptionpimcreateapplications--name"DatabaseApp"--description"Main database application"--application-name"dbapp"--application-user"dbuser"Options:--nameTEXTNameoftheapplication.[required]--descriptionTEXTDescriptionoftheapplication.--application-nameTEXTTheapplicationnameortheapplicationloadingtheAPIjarfile.[required]--application-userTEXTTheapplicationuserortheOSuser.[required]--helpShowthismessageandexit.
Create Dataelements
The following command shows how to access help for the create dataelements command. It also provides examples on how to create a data element.
pim create dataelements --help
Usage: pim create dataelements [OPTIONS] COMMAND [ARGS]...
Creates a new data element of a specific type.
AVAILABLE PROTECTION TYPES:
# Encryption Methods:
- aes128-cbc-enc # AES-128 CBC encryption
- aes128-cusp-enc # AES-128 CUSP encryption
- aes256-cbc-enc # AES-256 CBC encryption
- aes256-cusp-enc # AES-256 CUSP encryption
- triple-des-cbc-enc # 3DES CBC encryption
- triple-des-cusp-enc # 3DES CUSP encryption
- sha1-hmac-enc # SHA1 HMAC encryption (deprecated)
- sha256-hmac-enc # SHA256 HMAC encryption
- no-enc # No encryption (clear text)
# Tokenization Methods:
- token numeric # Numeric tokens
- token alphabetic # Alphabetic tokens
- token alpha-numeric # Alphanumeric tokens
- token printable # Printable character tokens
- token unicode # Unicode tokens
- token credit-card # Credit card specific tokens
- token email # Email specific tokens
# Format Preserving Encryption (FPE):
- fpe numeric # Numeric FPE
- fpe alphabetic # Alphabetic FPE
- fpe alpha-numeric # Alphanumeric FPE
# Special Protection Types:
- masking # Data masking using NoEnc
- monitor # Data monitoring using NoEnc
Options:
--help Show this message and exit.
Commands:
aes128-cbc-enc Creates a new AES-128-CBC-ENC data element.
aes128-cusp-enc Creates a new AES-128-CUSP-ENC data element.
aes256-cbc-enc Creates a new AES-256-CBC-ENC data element.
aes256-cusp-enc Creates a new AES-256-CUSP-ENC data element.
fpe Creates a new FPE (Format Preserving Encryption)...
masking Creates a new masking data element using NoEnc...
monitor Creates a new monitoring data element using NoEnc...
no-enc Creates a new No-Enc data element.
sha1-hmac-enc Creates a new SHA1-HMAC-ENC data element...
sha256-hmac-enc Creates a new SHA256-HMAC-ENC data element.
token Creates a new token data element of a specific type.
triple-des-cbc-enc Creates a new 3DES-CBC-ENC data element.
triple-des-cusp-enc Creates a new 3DES-CUSP-ENC data element.
Create Dataelements Types
The following commands show how to access help for the create dataelements <type> command. It also provides examples on how to create a data element of a specific type.
Create Dataelements aes128 cbc enc
The following command shows how to access help for the create dataelements aes128-cbc-enc command. It also provides examples on how to create a AES-128-CBC-ENC data element.
pim create dataelements aes128-cbc-enc --help
Usage: pim create dataelements aes128-cbc-enc [OPTIONS]
Creates a new AES-128-CBC-ENC data element.
EXAMPLES:
# Create basic AES-128 encryption data element
pim create dataelements aes128-cbc-enc --name "BasicEncryption" --description "Basic data encryption"
# Create with all security features enabled
pim create dataelements aes128-cbc-enc --name "FullSecurityEnc" --description "Full security encryption" --iv-type "SYSTEM_APPEND" --checksum-type "CRC32" --cipher-format "INSERT_KEYID_V1"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--iv-type [NONE|SYSTEM_APPEND] Initialization Vector type.
--checksum-type [NONE|CRC32] Checksum type.
--cipher-format [NONE|INSERT_KEYID_V1] Cipher format.
--help Show this message and exit.
Create Dataelements aes128 cusp enc
The following command shows how to access help for the create dataelements aes128-cusp-enc command. It also provides examples on how to create a AES-128-CUSP-ENC data element.
pim create dataelements aes128-cusp-enc --help
Usage: pim create dataelements aes128-cusp-enc [OPTIONS]
Creates a new AES-128-CUSP-ENC data element. EXAMPLES:
# Create with key rotation support
pim create dataelements aes128-cusp-enc --name "RotatingCUSP" --description "CUSP with key rotation" --cipher-format "INSERT_KEYID_V1"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--iv-type [NONE|SYSTEM_APPEND] Initialization Vector type.
--checksum-type [NONE|CRC32] Checksum type.
--cipher-format [NONE|INSERT_KEYID_V1] Cipher format.
--help Show this message and exit.
Create Dataelements aes256 cbc enc
The following command shows how to access help for the create dataelements aes256-cbc-enc command. It also provides examples on how to create a AES-256-CBC-ENC data element.
pim create dataelements aes256-cbc-enc --help
Usage: pim create dataelements aes256-cbc-enc [OPTIONS]
Creates a new AES-256-CBC-ENC data element.
EXAMPLES:
# Create with system-generated IV and CRC32 checksum
pim create dataelements aes256-cbc-enc --name "CreditCardEnc" --description "Credit card encryption" --iv-type "SYSTEM_APPEND" --checksum-type "CRC32"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--iv-type [NONE|SYSTEM_APPEND] Initialization Vector type.
--checksum-type [NONE|CRC32] Checksum type.
--cipher-format [NONE|INSERT_KEYID_V1] Cipher format.
--help Show this message and exit.
Create Dataelements aes256 cusp enc
The following command shows how to access help for the create dataelements aes256-cusp-enc command. It also provides examples on how to create a AES-256-CUSP-ENC data element.
pim create dataelements aes256-cusp-enc --help
Usage: pim create dataelements aes256-cusp-enc [OPTIONS]
Creates a new AES-256-CUSP-ENC data element.
EXAMPLES:
# Create basic AES-256 CUSP encryption
pim create dataelements aes256-cusp-enc --name "HighSecurityEnc" --description "High security data encryption"
# Create with key ID insertion for key management
pim create dataelements aes256-cusp-enc --name "EnterpriseEnc" --description "Enterprise encryption with key tracking" --cipher-format "INSERT_KEYID_V1"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--iv-type [NONE|SYSTEM_APPEND] Initialization Vector type.
--checksum-type [NONE|CRC32] Checksum type.
--cipher-format [NONE|INSERT_KEYID_V1] Cipher format.
--help Show this message and exit.
Create Dataelements triple des cbc enc
The following command shows how to access help for the create dataelements triple-des-cbc-enc command. It also provides examples on how to create a 3DES-CBC-ENC data element.
pim create dataelements triple-des-cbc-enc --help
Usage: pim create dataelements triple-des-cbc-enc [OPTIONS]
Creates a new 3DES-CBC-ENC data element.
EXAMPLES:
# Create basic 3DES-CBC encryption
pim create dataelements triple-des-cbc-enc --name "Legacy3DESEnc" --description "Legacy 3DES encryption for compatibility"
# Create with key ID insertion for key management
pim create dataelements triple-des-cbc-enc --name "Managed3DES" --description "3DES with key tracking" --cipher-format "INSERT_KEYID_V1"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--iv-type [NONE|SYSTEM_APPEND] Initialization Vector type.
--checksum-type [NONE|CRC32] Checksum type.
--cipher-format [NONE|INSERT_KEYID_V1]
Cipher format.
--help Show this message and exit.
Create Dataelements triple des cusp enc
The following command shows how to access help for the create dataelements triple-des-cusp-enc command. It also provides examples on how to create a 3DES-CUSP-ENC data element.
Usage: pim create dataelements triple-des-cusp-enc [OPTIONS]
Creates a new 3DES-CUSP-ENC data element.
EXAMPLES:
# Create with system-generated IV and integrity checking
pim create dataelements triple-des-cusp-enc --name "Secure3DESCusp" --description "3DES CUSP with enhanced security" --iv-type "SYSTEM_APPEND" --checksum-type "CRC32"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--iv-type [NONE|SYSTEM_APPEND] Initialization Vector type.
--checksum-type [NONE|CRC32] Checksum type.
--cipher-format [NONE|INSERT_KEYID_V1]
Cipher format.
--help Show this message and exit.
Create Dataelements fpe
The following command shows how to access help for the create dataelements fpe command. It also provides examples on how to create a Format Preserving Encryption (FPE) data element.
pim create dataelements fpe --help
Usage: pim create dataelements fpe [OPTIONS] COMMAND [ARGS]...
Creates a new FPE (Format Preserving Encryption) data element of a specific
type.
AVAILABLE FPE TYPES:
- numeric # Numeric data (0-9)
- alphabetic # Alphabetic data (a-z, A-Z)
- alpha-numeric # Alphanumeric data (0-9, a-z, A-Z)
- unicode-basic-latin-alphabetic # Unicode Basic Latin alphabetic
- unicode-basic-latin-alpha-numeric # Unicode Basic Latin alphanumeric
Options:
--help Show this message and exit.
Commands:
alpha-numeric Creates a new Alpha Numeric FPE data element.
alphabetic Creates a new Alphabetic FPE data element.
numeric Creates a new Numeric FPE data element.
unicode-basic-latin-alpha-numeric Creates a new Unicode Basic Latin Alpha Numeric (Format Preserving Encryption) FPE data element.
unicode-basic-latin-alphabetic Creates a new Unicode Basic Latin Alphabetic FPE data element.
Create Dataelements fpe alpha numeric
The following command shows how to access help for the create dataelements fpe alpha numeric command. It also provides examples on how to create an alpha numeric (FPE) data element.
pim create dataelements fpe alpha-numeric --help
Usage: pim create dataelements fpe alpha-numeric [OPTIONS]
Creates a new Alpha Numeric FPE data element.
EXAMPLES:
# Create basic alphanumeric FPE for user IDs
pim create dataelements fpe alpha-numeric --name "UserIDFPE" --description "User ID alphanumeric format-preserving encryption"
# Create for product codes with flexible length handling
pim create dataelements fpe alpha-numeric --name "ProductCodeFPE" --description "Product code alphanumeric FPE" --from-left 2 --min-length 5 --allow-short "NOINPUTVALUE"
# Create for mixed case identifiers
pim create dataelements fpe alpha-numeric --name "MixedCaseIDFPE" --description "Mixed case identifier encryption" --from-left 1 --from-right 2 --min-length 7
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--plain-text-encoding TEXT Kept for backwards compatibility, will be
ignored if sent in. Removed in later
releases.
--from-left INTEGER Number of characters to retain in clear from
the left.
--from-right INTEGER Number of characters to retain in clear from
the right.
--min-length INTEGER The minimum supported input length is 2
bytes and is configurable up to 10 bytes.
--tweak-mode [EXT_API|EXT_INPUT]
The tweak input is derived from either the
API (EXT_API) or the input message
(EXT_INPUT).
--allow-short [NOWITHERROR|NOINPUTVALUE]
Specifies whether the short data must be
supported or not.
--help Show this message and exit.
Create Dataelements fpe alphabetic
The following command shows how to access help for the create dataelements fpe alphabetic command. It also provides examples on how to create an alphabetic (FPE) data element.
pim create dataelements fpe alphabetic --help
Usage: pim create dataelements fpe alphabetic [OPTIONS]
Creates a new Alphabetic FPE data element.
EXAMPLES:
# Create with partial clear text (preserve first 2 and last 2 chars)
pim create dataelements fpe alphabetic --name "PartialAlphaFPE" --description "Partial alphabetic FPE with clear boundaries" --from-left 2 --from-right 2
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--plain-text-encoding TEXT Kept for backwards compatibility, will be
ignored if sent in. Removed in later
releases.
--from-left INTEGER Number of characters to retain in clear from
the left.
--from-right INTEGER Number of characters to retain in clear from
the right.
--min-length INTEGER The minimum supported input length is 2
bytes and is configurable up to 10 bytes.
--allow-short [NOWITHERROR|NOINPUTVALUE]
Specifies whether the short data must be
supported or not.
--tweak-mode [EXT_API|EXT_INPUT]
The tweak input is derived from either the
API (EXT_API) or the input message
(EXT_INPUT).
--help Show this message and exit.
Create Dataelements fpe numeric
The following command shows how to access help for the create dataelements fpe numeric command. It also provides examples on how to create a numeric (FPE) data element.
pim create dataelements fpe numeric --help
Usage: pim create dataelements fpe numeric [OPTIONS]
Creates a new Numeric FPE data element.
EXAMPLES:
# Create basic numeric FPE for account numbers
pim create dataelements fpe numeric --name "AccountFPE" --description "Account number format-preserving encryption" --min-length 6
# Create FPE with partial masking (show first 4 digits)
pim create dataelements fpe numeric --name "PartialFPE" --description "Partial numeric FPE" --min-length 8 --from-left 4
# Create credit card FPE with BIN preservation
pim create dataelements fpe numeric --name "CreditCardFPE" --description "Credit card FPE with BIN visible" --min-length 8 --from-left 6 --from-right 4 --special-numeric-handling "CCN"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--plain-text-encoding TEXT Kept for backwards compatibility, will be
ignored if sent in. Removed in later
releases.
--from-left INTEGER Number of characters to retain in clear from
the left.
--from-right INTEGER Number of characters to retain in clear from
the right.
--min-length INTEGER The minimum supported input length is 2
bytes and is configurable up to 10 bytes.
The default minimum supported input length
for Credit Card Number (CCN) is 8 bytes and
is configurable up to 10 bytes.
--tweak-mode [EXT_API|EXT_INPUT]
The tweak input is derived from either the
API (EXT_API) or the input message
(EXT_INPUT).
--allow-short [NOWITHERROR|NOINPUTVALUE]
Specifies whether the short data must be
supported or not.
--special-numeric-handling [NONE|CCN]
The Format Preserving Encryption (FPE) for
Credit Card Number (CCN) is handled by
configuring numeric data type as the
plaintext alphabet.
--help Show this message and exit.
Create Dataelements fpe unicode basic latin alpha numeric
The following command shows how to access help for the create dataelements fpe unicode-basic-latin-alpha-numeric command. It also provides examples on how to create a unicode basic latin alpha numeric (FPE) data element.
Usage: pim create dataelements fpe unicode-basic-latin-alpha-numeric
[OPTIONS]
Creates a new Unicode Basic Latin Alpha Numeric (Format Preserving
Encryption) FPE data element.
EXAMPLES:
# Create basic Unicode Latin alphanumeric FPE
pim create dataelements fpe unicode-basic-latin-alpha-numeric --name "UnicodeLatinFPE" --description "Unicode Latin alphanumeric format-preserving encryption"
# Create with partial clear text for international IDs
pim create dataelements fpe unicode-basic-latin-alpha-numeric --name "IntlIDFPE" --description "International ID with clear prefix,suffix" --from-left 2 --from-right 2 --min-length 6
# Create for international user IDs with flexible length
pim create dataelements fpe unicode-basic-latin-alpha-numeric --name "GlobalUserIDFPE" --description "Global user ID format-preserving encryption" --min-length 4 --allow-short "NOINPUTVALUE"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--plain-text-encoding TEXT Kept for backwards compatibility, will be
ignored if sent in. Removed in later
releases.
--from-left INTEGER Number of characters to retain in clear from
the left.
--from-right INTEGER Number of characters to retain in clear from
the right.
--min-length INTEGER The minimum supported input length is 2
bytes and is configurable up to 10 bytes.
--tweak-mode [EXT_API|EXT_INPUT]
The tweak input is derived from either the
API (EXT_API) or the input message
(EXT_INPUT).
--allow-short [NOWITHERROR|NOINPUTVALUE]
Specifies whether the short data must be
supported or not.
--help Show this message and exit.
Create Dataelements fpe unicode basic latin alpha alphabetic
The following command shows how to access help for the create dataelements fpe unicode-basic-latin-alphabetic command. It also provides examples on how to create a unicode basic latin alphabetic (FPE) data element.
Usage: pim create dataelements fpe unicode-basic-latin-alphabetic
[OPTIONS]
Creates a new Unicode Basic Latin Alphabetic FPE data element.
EXAMPLES:
# Create basic Unicode Basic Latin alphabetic FPE
pim create dataelements fpe unicode-basic-latin-alphabetic --name "UnicodeAlphaFPE" --description "Unicode Basic Latin alphabetic FPE"
# Create for European customer names
pim create dataelements fpe unicode-basic-latin-alphabetic --name "EuropeanNameFPE" --description "European customer name FPE" --from-left 1 --min-length 3 --allow-short "NOWITHERROR"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--plain-text-encoding TEXT Kept for backwards compatibility, will be
ignored if sent in. Removed in later
releases.
--from-left INTEGER Number of characters to retain in clear from
the left.
--from-right INTEGER Number of characters to retain in clear from
the right.
--min-length INTEGER The minimum supported input length is 2
bytes and is configurable up to 10 bytes.
--tweak-mode [EXT_API|EXT_INPUT]
The tweak input is derived from either the
API (EXT_API) or the input message
(EXT_INPUT).
--allow-short [NOWITHERROR|NOINPUTVALUE]
Specifies whether the short data must be
supported or not.
--help Show this message and exit.
Create Dataelements masking
The following command shows how to access help for the create dataelements masking command. It also provides examples on how to create a masking data element using no encryption with masking enabled.
pim create dataelements masking --help
Usage: pim create dataelements masking [OPTIONS]
Creates a new masking data element using NoEnc with masking enabled.
EXAMPLES:
# Create basic data masking with a specific mask
pim create dataelements masking --name "SSNMasking" --description "Social Security Number masking" --mask-uid "1"
# Create email masking for development environment
pim create dataelements masking --name "EmailMasking" --description "Email masking for dev environment" --mask-uid "2"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--mask-uid TEXT The UID of the mask to apply for masking data.
[required]
--help Show this message and exit.
Create Dataelements monitor
The following command shows how to access help for the create dataelements monitor command. It also provides examples on how to create a monitoring data element using NoEnc with monitoring enabled.
pim create dataelements monitor --help
Usage: pim create dataelements monitor [OPTIONS]
Creates a new monitoring data element using no encryption with monitoring enabled.
EXAMPLES:
# Create basic monitoring for sensitive database fields
pim create dataelements monitor --name "CustomerDataMonitor" --description "Monitor customer data access"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--help Show this message and exit.
Create Dataelements no enc
The following command shows how to access help for the create dataelements no-enc command. It also provides examples on how to create a no encryption data element.
pim create dataelements no-enc --help
Usage: pim create dataelements no-enc [OPTIONS]
Creates a new No-Enc data element.
EXAMPLES:
# Create basic no-encryption element for testing
pim create dataelements no-enc --name "TestNoEnc" --description "Test data element with no encryption"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--help Show this message and exit.
Create Dataelements sha1 hmac enc
The following command shows how to access help for the create dataelements sha1-hmac-enc command. It also provides examples on how to create a SHA1-HMAC-ENC data element.
Note: The SHA1-HMAC-ENC data element is deprecated.
pim create dataelements sha1-hmac-enc --help
Usage: pim create dataelements sha1-hmac-enc [OPTIONS]
Creates a new SHA1-HMAC-ENC data element (deprecated).
EXAMPLES:
# Create basic SHA1-HMAC encryption (legacy support)
pim create dataelements sha1-hmac-enc --name "LegacyHashEnc" --description "SHA1 HMAC for legacy system compatibility"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--help Show this message and exit.
Create Dataelements sha256 hmac enc
The following command shows how to access help for the create dataelements sha256-hmac-enc command. It also provides examples on how to create a SHA256-HMAC-ENC data element.
pim create dataelements sha256-hmac-enc --help
Usage: pim create dataelements sha256-hmac-enc [OPTIONS]
Creates a new SHA256-HMAC-ENC data element.
EXAMPLES:
# Create basic SHA256-HMAC encryption
pim create dataelements sha256-hmac-enc --name "SecureHashEnc" --description "Strong SHA256 HMAC encryption"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--help Show this message and exit.
Create Dataelements token
The following command shows how to access help for the create dataelements token command. It also provides examples on how to create a token data element.
pim create dataelements token --help
Usage: pim create dataelements token [OPTIONS] COMMAND [ARGS]...
Creates a new token data element of a specific type.
AVAILABLE TOKEN TYPES:
- numeric # Numeric data tokenization (0-9)
- alphabetic # Alphabetic data tokenization (a-z, A-Z)
- alpha-numeric # Alphanumeric tokenization (0-9, a-z, A-Z)
- printable # Printable ASCII characters
- unicode # Unicode character tokenization
- unicode-base64 # Base64 encoded Unicode tokens
- unicode-gen2 # Generation 2 Unicode tokens with custom alphabets
- binary # Binary data tokenization
- lower-ascii # Lowercase ASCII tokenization
- upper-alphabetic # Uppercase alphabetic tokens
- upper-alpha-numeric # Uppercase alphanumeric tokens
# Specialized Token Types:
- credit-card # Credit card number tokenization
- email # Email address tokenization
- integer # Integer value tokenization
- decimal # Decimal number tokenization
- date-yyyymmdd # Date in YYYY-MM-DD format
- date-ddmmyyyy # Date in DD-MM-YYYY format
- date-mmddyyyy # Date in MM-DD-YYYY format
- date-time # Date and time tokenization
COMMON OPTIONS:
--tokenizer # Lookup table type (SLT_1_3, SLT_2_3, SLT_1_6, SLT_2_6)
--from-left # Characters to keep in clear from left
--from-right # Characters to keep in clear from right
--length-preserving # Maintain original data length
--allow-short # Handle short input data (YES, NO, ERROR)
Options:
--help Show this message and exit.
Commands:
alpha-numeric Creates a new Alpha Numeric Token data element.
alphabetic Creates a new Alphabetic Token data element.
binary Creates a new Binary Token data element.
credit-card Creates a new Credit Card Token data element.
date-ddmmyyyy Creates a new Date DDMMYYYY Token data element.
date-mmddyyyy Creates a new Date MMDDYYYY Token data element.
date-time Creates a new Date Time Token data element.
date-yyyymmdd Creates a new Date YYYYMMDD Token data element.
decimal Creates a new Decimal Token data element.
email Creates a new Email Token data element.
integer Creates a new Integer Token data element.
lower-ascii Creates a new Lower ASCII Token data element.
numeric Creates a new Numeric Token data element.
printable Creates a new Printable Token data element.
unicode Creates a new Unicode Token data element.
unicode-base64 Creates a new Unicode Base64 Token data element.
unicode-gen2 Creates a new Unicode Gen2 Token data element.
upper-alpha-numeric Creates a new Upper Alpha Numeric Token data element.
upper-alphabetic Creates a new Upper Alphabetic Token data element.
Create Dataelements token alpha numeric
The following command shows how to access help for the create dataelements token alpa-numeric command. It also provides examples on how to create an alpha-numeric token data element.
Usage: pim create dataelements token alpha-numeric [OPTIONS]
Creates a new Alpha Numeric Token data element.
EXAMPLES: # Create for reference codes pim create dataelements token
alpha-numeric --name "RefCodeToken" --description "Reference code
alphanumeric tokenization" --tokenizer "SLT_1_3" --from-left 2 --allow-short
NOWITHERROR
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3|SLT_1_6|SLT_2_6]
The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token alphabetic
The following command shows how to access help for the create dataelements token alpabetic command. It also provides examples on how to create an alphabetic token data element.
pim create dataelements token alphabetic --help
Usage: pim create dataelements token alphabetic [OPTIONS]
Creates a new Alphabetic Token data element.
EXAMPLES:
# Create length-preserving alphabetic token
pim create dataelements token alphabetic --name "ExactLengthAlpha" --description "Length-preserving alphabetic token" --tokenizer "SLT_2_3" --length-preserving
# Create for name tokenization with short value support
pim create dataelements token alphabetic --name "NameToken" --description "Name tokenization with short support" --tokenizer "SLT_2_3" --allow-short YES --length-preserving
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3] The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token binary
The following command shows how to access help for the create dataelements token binary command. It also provides examples on how to create a binary token data element.
pim create dataelements token binary --help
Usage: pim create dataelements token binary [OPTIONS]
Creates a new Binary Token data element.
EXAMPLES:
# Create basic binary tokenization
pim create dataelements token binary --name "BinaryToken" --description "Binary data tokenization" --tokenizer "SLT_1_3"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--tokenizer [SLT_1_3|SLT_2_3] The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--help Show this message and exit.
Create Dataelements token credit card
The following command shows how to access help for the create dataelements token credit-card command. It also provides examples on how to create a credit card token data element.
pim create dataelements token credit-card --help
Usage: pim create dataelements token credit-card [OPTIONS]
Creates a new Credit Card Token data element.
EXAMPLES:
# Create basic credit card tokenization
pim create dataelements token credit-card --name "CCTokenBasic" --description "Basic credit card tokenization" --tokenizer "SLT_1_6"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3|SLT_1_6|SLT_2_6]
The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--invalid-card-type Token values will not begin with digits that
real credit card numbers begin with.
--invalid-luhn-digit Validate Luhn checksum (requires valid
credit cards as input).
--alphabetic-indicator Include one alphabetic character in the
token.
--alphabetic-indicator-position INTEGER
Position for the alphabetic indicator
(required when alphabetic-indicator is
enabled).
--help Show this message and exit.
Create Dataelements token date ddmmyyyy
The following command shows how to access help for the create dataelements token date-ddmmyyyy command. It also provides examples on how to create a DDMMYYYY date token data element.
Usage: pim create dataelements token date-ddmmyyyy [OPTIONS]
Creates a new Date DDMMYYYY Token data element.
EXAMPLES:
# Create basic DDMMYYYY date tokenization
pim create dataelements token date-ddmmyyyy --name "DateDDMMYYYY" --description "European date format DD-MM-YYYY tokenization" --tokenizer "SLT_1_3"
# Create for compliance reporting dates
pim create dataelements token date-ddmmyyyy --name "ComplianceDate" --description "Compliance reporting DD-MM-YYYY dates" --tokenizer "SLT_2_3"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3|SLT_1_6|SLT_2_6]
The lookup tables to be generated.
[required]
--help Show this message and exit.
Create Dataelements token date mmddyyyy
The following command shows how to access help for the create dataelements token date-mmddyyyy command. It also provides examples on how to create a MMDDYYYY date token data element.
Usage: pim create dataelements token date-mmddyyyy [OPTIONS]
Creates a new Date MMDDYYYY Token data element.
EXAMPLES:
# Create for financial reporting dates
pim create dataelements token date-mmddyyyy --name "FinancialReportDate" --description "Financial reporting MM-DD-YYYY format" --tokenizer "SLT_2_3"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3|SLT_1_6|SLT_2_6]
The lookup tables to be generated.
[required]
--help Show this message and exit.
Create Dataelements token date time
The following command shows how to access help for the create dataelements token date-time command. It also provides examples on how to create a date-time token data element.
pim create dataelements token date-time --help
Usage: pim create dataelements token date-time [OPTIONS]
Creates a new Date Time Token data element.
EXAMPLES:
# Create basic date-time tokenization
pim create dataelements token date-time --name "DateTimeToken" --description "Basic date-time tokenization" --tokenizer "SLT_8_DATETIME"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_8_DATETIME] The lookup tables to be generated.
[required]
--tokenize-time Whether to tokenize time (HH:MM:SS).
--distinguishable-date Whether date tokens should be
distinguishable from real dates.
--date-in-clear [NONE|YEAR|MONTH]
Which date parts to keep in clear.
--help Show this message and exit.
Create Dataelements token date yyyymmdd
The following command shows how to access help for the create dataelements token date-yyyymmdd command. It also provides examples on how to create a YYYYMMDD date token data element.
Usage: pim create dataelements token date-yyyymmdd [OPTIONS]
Creates a new Date YYYYMMDD Token data element.
EXAMPLES:
# Create basic YYYYMMDD date tokenization
pim create dataelements token date-yyyymmdd --name "DateYYYYMMDD" --description "Date tokenization in YYYY-MM-DD format" --tokenizer "SLT_1_3"
# Create for event date tracking
pim create dataelements token date-yyyymmdd --name "EventDateToken" --description "Event date in YYYY-MM-DD format" --tokenizer "SLT_2_3"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3|SLT_1_6|SLT_2_6]
The lookup tables to be generated.
[required]
--help Show this message and exit.
Create Dataelements token decimal
The following command shows how to access help for the create dataelements token decimal command. It also provides examples on how to create a decimal token data element.
pim create dataelements token decimal --help
Usage: pim create dataelements token decimal [OPTIONS]
Creates a new Decimal Token data element.
EXAMPLES:
# Create basic decimal tokenization for amounts
pim create dataelements token decimal --name "DecimalToken" --description "Financial decimal amount tokenization" --tokenizer "SLT_6_DECIMAL" --max-length 15
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data element.
--tokenizer [SLT_6_DECIMAL] The lookup tables to be generated. [required]
--min-length INTEGER Minimum length of the token element that can be
protected.
--max-length INTEGER Maximum length of the token element that can be
protected (max 38). [required]
--help Show this message and exit.
Create Dataelements token email
The following command shows how to access help for the create dataelements token email command. It also provides examples on how to create a email token data element.
pim create dataelements token email --help
Usage: pim create dataelements token email [OPTIONS]
Creates a new Email Token data element.
EXAMPLES:
# Create basic email tokenization
pim create dataelements token email --name "EmailTokenBasic" --description "Basic email tokenization" --tokenizer "SLT_1_3" --allow-short NOWITHERROR
# Create email tokenization with error on short input
pim create dataelements token email --name "EmailTokenError" --description "Email tokenization with short input errors" --tokenizer "SLT_1_3" --length-preserving --allow-short NOWITHERROR
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3] The lookup tables to be generated.
[required]
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token integer
The following command shows how to access help for the create dataelements token integer command. It also provides examples on how to create a integer token data element.
pim create dataelements token integer --help
Usage: pim create dataelements token integer [OPTIONS]
Creates a new Integer Token data element.
EXAMPLES:
# Create basic integer tokenization (default 4-byte)
pim create dataelements token integer --name "IntegerToken" --description "Basic integer tokenization" --tokenizer "SLT_1_3"
# Create short integer tokenization for small numbers
pim create dataelements token integer --name "ShortIntegerToken" --description "Short integer (2-byte) tokenization" --tokenizer "SLT_1_3" --integer-size "SHORT"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3] The lookup tables to be generated.
[required]
--integer-size [SHORT|INT|LONG]
Integer size: 2 bytes (SHORT), 4 bytes
(INT), or 8 bytes (LONG).
--help Show this message and exit.
Create Dataelements token lower ascii
The following command shows how to access help for the create dataelements token lower-ascii command. It also provides examples on how to create a lower-ascii token data element.
pim create dataelements token lower-ascii --help
Usage: pim create dataelements token lower-ascii [OPTIONS]
Creates a new Lower ASCII Token data element.
EXAMPLES:
# Create strict ASCII tokenization (error on short input)
pim create dataelements token lower-ascii --name "StrictAsciiToken" --description "Strict ASCII tokenization" --tokenizer "SLT_1_3" --allow-short "NOWITHERROR"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3] The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token numeric
The following command shows how to access help for the create dataelements token numeric command. It also provides examples on how to create a numeric token data element.
pim create dataelements token numeric --help
Usage: pim create dataelements token numeric [OPTIONS]
Creates a new Numeric Token data element.
EXAMPLES:
# Create basic numeric token for SSN
pim create dataelements token numeric --name "SSNToken" --description "Social Security Number tokenization" --tokenizer "SLT_1_6" --length-preserving
# Create high-security token for financial data
pim create dataelements token numeric --name "FinancialToken" --description "Financial account tokenization" --tokenizer "SLT_2_6" --length-preserving --allow-short "NOWITHERROR"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3|SLT_1_6|SLT_2_6]
The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token printable
The following command shows how to access help for the create dataelements token printable command. It also provides examples on how to create a printable token data element.
pim create dataelements token printable --help
Usage: pim create dataelements token printable [OPTIONS]
Creates a new Printable Token data element.
EXAMPLES:
# Create length-preserving printable token
pim create dataelements token printable --name "ExactLengthPrintable" --description "Length-preserving printable tokenization" --tokenizer "SLT_1_3" --length-preserving
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3] The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token unicode
The following command shows how to access help for the create dataelements token unicode command. It also provides examples on how to create a Unicode token data element.
pim create dataelements token unicode --help
Usage: pim create dataelements token unicode [OPTIONS]
Creates a new Unicode Token data element.
EXAMPLES:
# Create with short value support for names
pim create dataelements token unicode --name "IntlNameToken" --description "International name tokenization" --tokenizer "SLT_2_3" --allow-short "YES"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3] The lookup tables to be generated.
[required]
--allow-short [NOWITHERROR|YES|NOINPUTVALUE]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token unicode base64
The following command shows how to access help for the create dataelements token unicode-base64 command. It also provides examples on how to create a Unicode Base64 token data element.
Usage: pim create dataelements token unicode-base64 [OPTIONS]
Creates a new Unicode Base64 Token data element.
EXAMPLES:
# Create basic Unicode Base64 tokenization
pim create dataelements token unicode-base64 --name "UnicodeBase64Token" --description "Base64 encoded Unicode tokenization" --tokenizer "SLT_1_3"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3|SLT_1_6|SLT_2_6]
The lookup tables to be generated.
[required]
--help Show this message and exit.
Create Dataelements token unicode gen2
The following command shows how to access help for the create dataelements token unicode-gen2 command. It also provides examples on how to create a Unicode Gen2 token data element.
pim create dataelements token unicode-gen2 --help
Usage: pim create dataelements token unicode-gen2 [OPTIONS]
Creates a new Unicode Gen2 Token data element.
EXAMPLES:
# Create basic Unicode Gen2 token with custom alphabet
pim create dataelements token unicode-gen2 --name "UnicodeGen2Token" --description "Unicode Gen2 with custom alphabet" --tokenizer "SLT_1_3" --alphabet-uid "1"
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_X_1] The lookup tables to be generated.
[required]
--alphabet-uid TEXT The UID of the alphabet to use for
tokenization. [required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--default-encoding TEXT Default encoding (kept for backwards
compatibility).
--help Show this message and exit.
Create Dataelements token upper alpha numeric
The following command shows how to access help for the create dataelements token upper-alpha-numeric command. It also provides examples on how to create an upper alpha-numeic token data element.
Usage: pim create dataelements token upper-alpha-numeric
[OPTIONS]
Creates a new Upper Alpha Numeric Token data element.
EXAMPLES:
# Create for product codes
pim create dataelements token upper-alpha-numeric --name "ProductCodeToken" --description "Product code uppercase tokenization" --tokenizer "SLT_1_3" --from-left 2 --length-preserving
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3] The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Dataelements token upper alphabetic
he following command shows how to access help for the create dataelements token upper-alphabetic command. It also provides examples on how to create an upper alphabetic token data element.
Usage: pim create dataelements token upper-alphabetic [OPTIONS]
Creates a new Upper Alphabetic Token data element.
EXAMPLES:
# Create for organization names with short support
pim create dataelements token upper-alphabetic --name "OrgNameToken" --description "Organization name tokenization" --tokenizer "SLT_2_3" --allow-short "NOINPUTVALUE" --length-preserving
Options:
--name TEXT The name for the data element. [required]
--description TEXT An optional description for the data
element.
--tokenizer [SLT_1_3|SLT_2_3] The lookup tables to be generated.
[required]
--from-left INTEGER Number of characters to keep in clear from
the left.
--from-right INTEGER Number of characters to keep in clear from
the right.
--length-preserving Specifies whether the output must be of the
same length as the input.
--allow-short [YES|NOINPUTVALUE|NOWITHERROR]
Allow short tokens.
--help Show this message and exit.
Create Datastores
The following command shows how to access help for the create datastores command. It also provides examples on how to create a datastore resource.
The following commands show how to access help for the create datastores <type> command. It also provides examples on how to manage datastore resources.
Create Datastores Datastore
The following command shows how to access help for the create datastores datastore command. It also provides examples on how to create a datastore.
pim create datastores datastore --help
Usage: pim create datastores datastore [OPTIONS]
Creates a new datastore with the specified name and configuration.
Datastores represent physical or logical storage systems that host protected
data. They define where data protection policies are applied and provide the
foundation for implementing encryption, tokenization, and access controls.
EXAMPLES:
# Create a simple datastore for development
pim create datastores datastore --name "dev-database" --description "Development PostgreSQL database"
# Create production datastore with detailed description
pim create datastores datastore --name "prod-customer-db" --description "Production customer data warehouse with PII protection"
# Create datastore and set as default
pim create datastores datastore --name "primary-db" --description "Primary application database" --default
WORKFLOW:
# Step 1: Plan your datastore configuration
# - Choose descriptive name for identification
# - Decide if this should be the default datastore
# Step 2: Create the datastore
pim create datastores datastore --name <name> --description <description> [--default]
# Step 3: Configure IP ranges and access controls
pim create datastores range <datastore-uid> --from-ip <start> --to <end>
# Step 4: Set up encryption keys if needed
pim create datastores key <datastore-uid> --name <key-name>
Options:
--name TEXT Name of the datastore. [required]
--description TEXT Description for the datastore.
--default Set this datastore as the default.
--help Show this message and exit.
Create Datastores Key
The following command shows how to access help for the create datastores key command. It also provides examples on how to export a datastore key.
pim create datastores key --help
Usage:pimcreatedatastoreskey[OPTIONS]DATASTORE_UIDCreatesandexportsadatastorekeyforsecuredataoperations.EXAMPLES:# Create RSA export key for datastorepimcreatedatastoreskey15--algorithm"RSA-OAEP-512"--description"export key"--pem"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQ...\n-----END PUBLIC KEY-----"WORKFLOW:# Step 1: Generate a key pair (outside of PIM)opensslgenrsa-outprivate_key.pem2048opensslrsa-inprivate_key.pem-pubout-outpublic_key.pem# Step 2: Prepare the PEM content (escape newlines for command line)awk'NF {sub(//,"");printf"%s\n",$0;}' public_key.pem# Step 3: Create the export key in PIMpimcreatedatastoreskey<datastore-uid>--algorithm<algorithm>--description<description>--pem<pem-content># Step 4: Verify the key was createdpimgetdatastoreskeys<datastore-uid>Options:--algorithm[RSA-OAEP-256|RSA-OAEP-512]Algorithmforthekey.[required]--descriptionTEXTDescriptionofthekey.--pemTEXTPEMformattedpublickey.[required]--helpShowthismessageandexit.
Create Datastores Range
The following command shows how to access help for the create datastores range command. It also provides examples on how to add a range of IP addresses to a datastore.
pim create datastores range --help
Usage: pim create datastores range [OPTIONS] DATASTORE_UID
Adds an IP address range to a datastore for network access control.
IP ranges define which network addresses are allowed to access the
datastore. This provides network-level security by restricting datastore
access to specific IP addresses or CIDR blocks.
EXAMPLES:
# Add single IP address access
pim create datastores range 15 --from "192.168.1.100" --to "192.168.1.100"
# Add corporate network access range
pim create datastores range <datastore-uid> --from "10.0.0.1" --to "10.0.255.255"
WORKFLOW:
# Step 1: Get datastore UID
pim get datastores datastore
# Step 2: Plan your IP range requirements
# - Identify source networks that need access
# - Define start and end IP addresses
# Step 3: Create the IP range
pim create datastores range <datastore-uid> --from <start-ip> --to <end-ip>
# Step 4: Verify the range was created
pim get datastores ranges <datastore-uid>
Options:
--from TEXT Start IP address of the range. [required]
--to TEXT End IP address of the range. [required]
--help Show this message and exit.
Create Deploy
The following command shows how to access help for the create deploy command. It also provides examples on how to deploy policies or trusted applications or both to a datastore.
pim create deploy --help
Usage: pim create deploy [OPTIONS]
Deploys policies and/or trusted applications to a data store.
Creates a deployment that pushes data protection policies and trusted
application configurations to the specified datastore.
EXAMPLES:
# Deploy single policy to a datastore
pim create deploy --data-store-uid 15 --policy-uids 1
# Deploy multiple policies to a datastore
pim create deploy --data-store-uid 15 --policy-uids 1 --policy-uids 2 --policy-uids 3
# Deploy trusted applications to grant access
pim create deploy --data-store-uid 15 --trusted-application-uids 1 --trusted-application-uids 2
# Deploy both policies and applications together
pim create deploy --data-store-uid 15 --policy-uids 1 --policy-uids 2 --trusted-application-uids 1 --trusted-application-uids 2
WORKFLOW:
# Step 1: Verify datastore exists and is accessible
pim get datastores datastore <data-store-uid>
# Step 2: List available policies and applications
pim get policies policy
pim get applications application
# Step 3: Deploy to a datastore
pim create deploy --data-store-uid <datastore-uid> --policy-uids <policy-uid> --trusted-application-uids <app-uid>
# Step 4: Verify deployment was successful
pim get deploy
Options:
--data-store-uid TEXT UID of the data store to deploy. [required]
--policy-uids TEXT UIDs of the policies to deploy.
--trusted-application-uids TEXT UIDs of the trusted applications to deploy.
--help Show this message and exit.
Create Masks
The following command shows how to access help for the create masks command. It also provides examples on how to create a mask.
pim create masks --help
Usage: pim create masks [OPTIONS]
Creates a new mask with specified masking pattern and configuration.
EXAMPLES:
# Create mask for credit card numbers (show last 4 digits)
pim create masks --name "credit-card-mask" --description "Mask credit card showing last 4 digits" --from-left 0 --from-right 4 --character "*"
MASKING PATTERNS:
Credit Card Masking (****-****-****-1234):
--from-left 0 --from-right 4 --character "*"
Email Masking (j***@example.com):
--from-left 1 --from-right 0 --character "*"
Full Masking (***********):
--from-left 0 --from-right 0 --character "*" --masked
Options:
--name TEXT The name for the mask. [required]
--description TEXT An optional description for the mask.
--from-left INTEGER Number of characters to be masked or kept in clear
from the left. [required]
--from-right INTEGER Number of characters to be masked or kept in clear
from the right. [required]
--masked Specifies whether the left and right characters should
be masked or kept in clear.
--character TEXT Specifies the mask character (*,#,-,0,1,2,3,4,5,6,7,8,
or 9). [required]
--help Show this message and exit.
Create Policies
The following command shows how to access help for the create policies command. It also provides examples on how to create a policy.
pim create policies --help
Usage: pim create policies [OPTIONS] COMMAND [ARGS]...
Creates a new policy or rule.
Options:
--help Show this message and exit.
Commands:
policy Creates a new data protection policy with specified access permissions.
rules Creates multiple rules and adds them to a policy in bulk.
Create Policies Types
The following commands show how to access help for the create policies <type> command. It also provides examples on how to manage policy resources.
Create Policies Policy
The following command shows how to access help for the create policies policy command. It also provides examples on how to create a policy.
Important: Ensure that you mandatorily add a description while creating a policy. If you do not add the description, then the pim get policies command fails.
pim create policies policy --help
Usage: pim create policies policy [OPTIONS]
Creates a new data protection policy with specified access permissions.
EXAMPLES:
# Create basic policy with all protection operations enabled
pim create policies policy --name "full-protection-policy" --description "Complete data protection with all operations" --protect --re-protect --un-protect
# Create read-only policy (no protection operations)
pim create policies policy --name "read-only-policy" --description "Read-only access without protection operations"
Options:
--name TEXT Name of the policy. [required]
--description TEXT Description of the policy. [required]
--protect Allow protect operation.
--re-protect Allow re-protect operation.
--un-protect Allow un-protect operation.
--help Show this message and exit.
Create Policies Rules
The following command shows how to access help for the create policies rules command. It also provides examples on how to create multiple rules and them to a policy.
pim create policies rules --help
Usage: pim create policies rules [OPTIONS] POLICY_UID
Creates multiple rules and adds them to a policy in bulk.
Rules define the mapping between roles and data elements with specific
protection methods and access permissions. Each rule specifies how a role
can access a data element, what masking to apply, and which protection
operations are allowed.
RULE FORMAT: role_uid,data_element_uid[,mask][,no_access_operation][,protect
][,re_protect][,un_protect]
EXAMPLES:
# Create rules for different roles accessing PII data elements
pim create policies rules 15 --rule "1,3,1,NULL_VALUE,true,true,true" --rule "3,3,1,PROTECTED_VALUE,false,false,false" --rule "4,2,,NULL_VALUE,true,false,false"
WORKFLOW:
# Step 1: Verify policy exists and review its configuration
pim get policies <policy-uid>
# Step 2: Identify required roles and data elements
pim get applications application # for roles
pim get data_elements data_element # for data elements
pim get masks # for available masks
# Step 3: Create rules in bulk
pim create policies rules <policy-uid> --rule "..." --rule "..." --rule "..."
# Step 4: Verify rules were created successfully
pim get policies <policy-uid> --rules
PARAMETER DESCRIPTIONS:
role_uid (Required): UID of the role/application that will access data
- References trusted applications or user roles
- Must exist in the system before creating rules
- Determines who can perform operations on data elements
data_element_uid (Required): UID of the data element
- References specific data fields or columns
- Must exist before creating rules
- Defines what data is being protected
mask (Optional): UID of mask to apply for data obfuscation
- Empty/omitted: No masking applied
- Must reference existing mask configuration
- Controls how data appears when accessed
no_access_operation (Optional, Default: NULL_VALUE):
- NULL_VALUE: Return null when access denied
- PROTECTED_VALUE: Return masked/protected format
- EXCEPTION: Throw exception when access denied
protect (Optional, Default: false): Allow data protection operations
- true: Role can encrypt/tokenize/mask data
- false: Role cannot perform protection operations
re_protect (Optional, Default: false): Allow data re-protection
- true: Role can change protection methods/keys
- false: Role cannot re-protect data
un_protect (Optional, Default: false): Allow data un-protection
- true: Role can decrypt/detokenize/unmask data
- false: Role cannot remove protection
Examples: --rule "role1,de1,mask1,NULL_VALUE,true,false,false" --rule
"role2,de2,,EXCEPTION,false,true,true" --rule "role3,de3"
Options:
--rule TEXT Rule specification in format: "role_uid,data_element_uid[,mask]
[,no_access_operation][,protect][,re_protect][,un_protect]".
Can be specified multiple times. [required]
--help Show this message and exit.
Create Roles
The following command shows how to access help for the create roles command. It also provides examples on how to create a role.
pim create roles --help
Usage: pim create roles [OPTIONS] COMMAND [ARGS]...
Creates a new role or adds members to a role.
Options:
--help Show this message and exit.
Commands:
members Adds members to a role in bulk.
role Creates a new role with specified configuration and access mode.
Create Roles Types
The following commands show how to access help for the create roles <type> command. It also provides examples on how to manage roles.
Create Roles Members
The following command shows how to access help for the create roles members command. It also provides examples on how to add members to a role.
pim create roles members --help
Usage:pimcreaterolesmembers[OPTIONS]ROLE_UIDAddsmemberstoaroleinbulk.Memberscanbeindividualusersorgroupsfromvariousidentitysources.Thiscommandallowsaddingmultiplemembersatoncewithpropervalidationanderrorhandlingforeachmemberspecification.MEMBERFORMAT:name,source,sync_id,typeORname,source,type(sync_idoptional)EXAMPLES:# Add individual users from LDAPpimcreaterolesmembers15--member"john.doe,1,12345,USER"--member"jane.smith,1,67890,USER"Examples:--member"john.doe,ldap,12345,USER"--member"admin_group,ldap,67890,GROUP"--member"jane.smith,ad,USER"(sync_idomitted)Options:--memberTEXTMemberspecificationinformat:"name,source,sync_id,type"or"name,source,type".Canbespecifiedmultipletimes.Wherenameisthemembername(required,min_length=1),sourceisthesourceofthemember(required),sync_idisthesynchronizationID(optional),andtypeisthemembertype(required:USERorGROUP).--helpShowthismessageandexit.
Create Roles Role
The following command shows how to access help for the create roles role command. It also provides examples on how to create a role.
pim create roles role --help
Usage: pim create roles role [OPTIONS]
Creates a new role with specified configuration and access mode.
EXAMPLES:
# Create semiautomatic role for project team
pim create roles role --name "project-alpha-team" --description "Project Alpha mixed access" --mode "SEMIAUTOMATIC"
Options:
--name TEXT Name of the role. [required]
--description TEXT Description of the role.
--mode [MANUAL|SEMIAUTOMATIC|AUTOMATIC] Role mode. [required]
--allow-all Allow access to all users for this role.
--help Show this message and exit.
Create Sources
The following command shows how to access help for the create sources command. It also provides examples on how to create a member source.
pim create sources --help
Usage: pim create sources [OPTIONS] COMMAND [ARGS]...
Creates a new source.
Options:
--help Show this message and exit.
Commands:
ad Creates a new Active Directory source for Windows domain integration.
azure Creates a new AZURE AD source for Microsoft cloud identity integration.
database Creates a new DATABASE source for relational database user repositories.
file Creates a new FILE source for static user and group management.
ldap Creates a new LDAP source for directory-based authentication and user management.
posix Creates a new POSIX source for Unix/Linux system account integration.
Create Sources Types
The following commands show how to access help for the create source <type> command. It also provides examples on how to create a member source of a specific type.
Create Source Ad
The following command shows how to access help for the create source ad command. It also provides examples on how to create an active directory member source.
pim create sources ad --help
Usage: pim create sources ad [OPTIONS]
Creates a new Active Directory source for Windows domain integration.
EXAMPLES:
Note: The following commands use line continuation (\) for readability.
In practice, run each command as a single line or use your shell's
line continuation syntax
# Create basic AD source with domain controller
pim create sources ad --name "corporate-ad" --description "Corporate Active Directory" \
--host "dc1.company.com" --port 389 \
--user-name "service@company.com" --pass-word "password123" \
--base-dn "dc=company,dc=com"
Options:
--name TEXT Name of the source. [required]
--description TEXT Description of the source.
--user-name TEXT Authentication user.
--pass-word TEXT Authentication password.
--host TEXT The Fully Qualified Domain Name (FQDN) or IP address of
the directory server.
--port INTEGER The network port on the directory server where the
service is listening.
--tls The TLS protocol is enabled to create a secure
communication to the directory server.
--base-dn TEXT The Base DN for the server to search for users.
--recursive Enables recursive search for active directory or Azure
AD.
--ldaps Use LDAPS instead of startTLS.
--help Show this message and exit.
Create Source Azure
The following command shows how to access help for the create source azure command. It also provides examples on how to create an Azure member source.
pim create sources azure --help
Usage:pimcreatesourcesazure[OPTIONS]CreatesanewAZUREADsourceforMicrosoftcloudidentityintegration.EXAMPLES:Note:Thefollowingcommandsuselinecontinuation(\)forreadability.Inpractice,runeachcommandasasinglelineoruseyourshell'slinecontinuationsyntax.# Create basic Azure AD source for corporate tenantpimcreatesourcesazure--name"corporate-azure"--description"Corporate Azure AD" \
--client-id"12345678-1234-1234-1234-123456789012" \
--tenant-id"87654321-4321-4321-4321-210987654321" \
--environment"PUBLIC"# Create Azure AD source with service principal authenticationpimcreatesourcesazure--name"sp-azure"--description"Service Principal Azure AD" \
--user-name"service-principal@company.onmicrosoft.com" \
--pass-word"sp-secret-key" \
--client-id"app-registration-id" \
--tenant-id"company-tenant-id" \
--environment"PUBLIC"--recursive# Create Azure Government cloud sourcepimcreatesourcesazure--name"gov-azure"--description"Azure Government Cloud" \
--client-id"gov-app-id" \
--tenant-id"gov-tenant-id" \
--environment"USGOVERNMENT" \
--user-attribute"userPrincipalName" \
--group-attribute"displayName"# Create Azure China cloud sourcepimcreatesourcesazure--name"china-azure"--description"Azure China Cloud" \
--client-id"china-app-id" \
--tenant-id"china-tenant-id" \
--environment"CHINA" \
--recursive# Create Azure AD with custom attributespimcreatesourcesazure--name"custom-azure"--description"Custom Azure AD Configuration" \
--client-id"custom-app-id" \
--tenant-id"custom-tenant-id" \
--environment"PUBLIC" \
--user-attribute"mail" \
--group-attribute"displayName" \
--group-members-attribute"members" \
--recursive# Create multi-tenant Azure AD sourcepimcreatesourcesazure--name"partner-azure"--description"Partner Tenant Azure AD" \
--client-id"partner-app-id" \
--tenant-id"partner-tenant-id" \
--environment"PUBLIC" \
--user-name"guest@partner.onmicrosoft.com" \
--pass-word"guest-credentials"Options:--nameTEXTNameofthesource.[required]--descriptionTEXTDescriptionofthesource.--user-nameTEXTAuthenticationuser.--pass-wordTEXTAuthenticationpassword.--recursiveEnablesrecursivesearchforactivedirectoryorAzureAD.--user-attributeTEXTTheRelativeDistinguishedName(RDN)attributeoftheuserdistinguishedname.--group-attributeTEXTTheRelativeDistinguishedName(RDN)attributeofthegroupdistinguishedname.--group-members-attributeTEXTTheattributethatenumeratesmembersofthegroup.--client-idTEXTTheclientidforAZUREAD.--tenant-idTEXTThetenantidfortheAZUREAD.--environment[CHINA|CANARY|PUBLIC|USGOVERNMENT|USGOVERNMENTL5]TheAZUREADenvironmentthatshouldbeused.--helpShowthismessageandexit.
Create Source Database
The following command shows how to access help for the create source database command. It also provides examples on how to create a database member source.
pim create sources database --help
Usage: pim create sources database [OPTIONS]
Creates a new DATABASE source for relational database user repositories.
EXAMPLES:
Note: The following commands use line continuation (\) for readability.
In practice, run each command as a single line or use your shell's
line continuation syntax
# Create Oracle database source with DSN
pim create sources database --name "oracle-hr" --description "Oracle HR Database" \
--user-name "pim_service" --pass-word "oracle123" \
--host "oracle.company.com" --port 1521 \
--dsn "XE" --vendor "ORACLE"
Options:
--name TEXT Name of the source. [required]
--description TEXT Description of the source.
--user-name TEXT Authentication user.
--pass-word TEXT Authentication password.
--host TEXT The Fully Qualified Domain Name (FQDN) or IP
address of the database server.
--port INTEGER The network port on the directory server
where the service is listening.
--dsn TEXT The Data Source Name (DSN) for ODBC
connection.
--vendor [TERADATA|ORACLE|DATABASE|SQLSERVER|DB2|POSTGRESQLX]
The vendor of the ODBC driver.
--help Show this message and exit.
Create Source File
The following command shows how to access help for the create source file command. It also provides examples on how to create a file member source.
pim create sources file --help
Usage: pim create sources file [OPTIONS]
Creates a new FILE source for static user and group management.
EXAMPLES:
# Create basic file source with user list
pim create sources file --name "dev-users" --description "environment users" --user-file exampleusers.txt --group-file examplegroups.txt
Options:
--name TEXT Name of the source. [required]
--description TEXT Description of the source.
--user-file TEXT A sample file that contains a list of individual
members.
--group-file TEXT A sample file that contains groups of members.
--help Show this message and exit.
Create Source Ldap
The following command shows how to access help for the create source ldap command. It also provides examples on how to create an LDAP member source.
The following command shows how to access help for the delete command.
pim delete --help
Usage: pim delete [OPTIONS] COMMAND [ARGS]...
Delete a resource.
Options:
--help Show this message and exit.
Commands:
alphabets Deletes a specific alphabet by UID.
applications Deletes a specific application by UID.
dataelements Deletes a specific data element by UID.
datastores Commands for deleting datastore resources.
masks Deletes a specific mask by its UID.
policies Deletes a policy, a rule from a policy, or a data element from a policy.
roles Commands for deleting role resources.
sources Permanently deletes a source from the system.
Delete Alphabets
The following command shows how to access help for the delete alphabets command. It also provides examples on how to delete an alphabet.
pim delete alphabets --help
Usage: pim delete alphabets [OPTIONS] UID
Deletes a specific alphabet by UID.
WORKFLOW:
# Step 1: First, list all alphabets to find the UID you want to delete
pim get alphabets
# Step 2: Copy the UID from the list and use it to delete the alphabet
pim delete alphabets <uid-from-list>
EXAMPLES:
# Complete workflow example:
# 1. List all alphabets to see available UIDs
pim get alphabets
# 2. Delete a specific alphabet using UID from the list above
pim delete alphabets 14
Options:
--help Show this message and exit.
Delete Applications
The following command shows how to access help for the delete applications command. It also provides examples on how to delete a trusted application.
pim delete applications --help
Usage: pim delete applications [OPTIONS] UID
Deletes a specific application by UID.
WORKFLOW:
# Step 1: First, list all applications to find the UID you want to delete
pim get applications
# Step 2: Copy the UID from the list and use it to delete the application
pim delete applications <uid-from-list>
EXAMPLES:
# 1. List all applications to see available UIDs
pim get applications
# 2. Delete a specific application using numeric UID from the list above
pim delete applications 42
Options:
--help Show this message and exit.
Delete Dataelements
The following command shows how to access help for the delete dataelements command. It also provides examples on how to delete a dataelement.
pim delete dataelements --help
Usage: pim delete dataelements [OPTIONS] UID
Deletes a specific data element by UID.
WORKFLOW:
# Step 1: First, list all data elements to find the UID you want to delete
pim get dataelements
# Step 2: Copy the UID from the list and use it to delete the data element
pim delete dataelements <uid-from-list>
EXAMPLES:
# Complete workflow example: # 1. List all data elements to see available
UIDs pim get dataelements
# 2. Delete a specific data element using numeric UID from the list above
pim delete dataelements 42
Options:
--help Show this message and exit.
Delete Datastores
The following command shows how to access help for the delete datastores command. It also provides examples on how to delete a datastore.
The following commands show how to access help for the delete datastores <type> command. It also provides examples on how to delete a datastore of a specific type.
Delete Datastores Datastore
The following command shows how to access help for the delete datastores datastore command. It also provides examples on how to delete a datastore by the UID.
pim delete datastores datastore --help
Usage: pim delete datastores datastore [OPTIONS] UID
Deletes a datastore by UID.
EXAMPLES:
# Delete datastore by numeric UID
pim delete datastores datastore 15
Options:
--help Show this message and exit.
Delete Datastores Key
The following command shows how to access help for the delete datastores key command. It also provides examples on how to delete a key from a datastore.
pim delete datastores key --help
Usage:pimdeletedatastoreskey[OPTIONS]DATASTORE_UIDKEY_UIDDeletesanexportkeyfromadatastore.EXAMPLES:# Remove specific export key from datastorepimdeletedatastoreskey12WORKFLOW:# Step 1: List current keys to identify the key UIDpimgetdatastoreskeys<datastore-uid># Step 2: Verify which processes use this key# - Check backup and migration schedules# - Verify no active export operations# Step 3: Delete the keypimdeletedatastoreskey<datastore-uid><key-uid># Step 4: Verify deletionpimgetdatastoreskeys<datastore-uid>Options:--helpShowthismessageandexit.
Delete Datastores Range
The following command shows how to access help for the delete datastores range command. It also provides examples on how to delete a range of IP addresses from a datastore.
pim delete datastores range --help
Usage: pim delete datastores range [OPTIONS] DATASTORE_UID RANGE_UID
Deletes an IP address range from a datastore.
EXAMPLES:
# Remove specific IP range from datastore
pim delete datastores range 15 1
WORKFLOW:
# Step 1: List current ranges to identify the range UID
pim get datastores ranges <datastore-uid>
# Step 2: Verify which systems use this range
# - Check with network administrators
# - Verify no active connections from this range
# Step 3: Delete the range
pim delete datastores range <datastore-uid> <range-uid>
# Step 4: Verify deletion
pim get datastores ranges <datastore-uid>
Options:
--help Show this message and exit.
Delete Masks
The following command shows how to access help for the delete masks command. It also provides examples on how to delete a mask.
pim delete masks --help
Usage: pim delete masks [OPTIONS] UID
Deletes a specific mask by its UID.
EXAMPLES:
# Delete mask by UID
pim delete masks 15
Options:
--help Show this message and exit.
Delete Policies
The following command shows how to access help for the delete policies command. It also provides examples on how to delete a policy, a rule from a policy, or a data element from a policy.
pim delete policies --help
Usage: pim delete policies [OPTIONS] UID
Deletes a policy, a rule from a policy, or a data element from a policy.
EXAMPLES:
# Delete entire policy (removes all rules and deployments)
pim delete policies 15
# Remove specific rule from policy
pim delete policies 15 --rule-uid 23
# Remove all rules for specific data element from policy
pim delete policies 42 --data-element-uid 67
Options:
--rule-uid TEXT UID of the rule to remove.
--data-element-uid TEXT UID of the data element to remove from a policy.
--help Show this message and exit.
Delete Roles
The following command shows how to access help for the delete roles command. It also provides examples on how to delete a role.
pim delete roles --help
Usage: pim delete roles [OPTIONS] COMMAND [ARGS]...
Commands for deleting role resources.
Options:
--help Show this message and exit.
Commands:
members Removes a specific member from a role.
role Permanently deletes a role from the system.
Delete Roles Types
The following commands show how to access help for the delete roles <type> command.
Delete Roles Members
The following command shows how to access help for the delete roles members command. It also provides examples on how to remove a member from a role.
pim delete roles members --help
Usage: pim delete roles members [OPTIONS] ROLE_UID MEMBER_UID
Removes a specific member from a role.
EXAMPLES:
# Remove specific user from role
pim delete roles members 15 42
pim delete roles members <role_uuid> <member_uuid>
Options:
--help Show this message and exit.
Delete Roles Role
The following command shows how to access help for the delete roles role command. It also provides examples on how to remove a role by the UID.
pim delete roles role --help
Usage: pim delete roles role [OPTIONS] UID
Permanently deletes a role from the system.
EXAMPLES:
# Remove specific role
pim delete roles role 15
Options:
--help Show this message and exit.
Note: Deleting a default role (directory_administrator, directory_viewer, security_administrator, and security_viewer) using pim delete roles role is not supported. This command applies only to custom roles created by users.
Delete Sources
The following command shows how to access help for the delete source command. It also provides examples on how to delete a member source by the UID.
pim delete sources --help
Usage: pim delete sources [OPTIONS] UID
Permanently deletes a source from the system.
EXAMPLES:
# Interactive source deletion with confirmation
pim delete sources 15
Options:
--help Show this message and exit.
Get Commands
The following section lists the get commands.
Main Get Command
The following command shows how to access help for the get command.
pim get --help
Usage: pim get [OPTIONS] COMMAND [ARGS]...
Display one or many resources.
Options:
--help Show this message and exit.
Commands:
alphabets Gets a specific alphabet by UID, or lists all alphabets if no UID is provided.
applications Gets a specific application by UID, or lists all applications if no UID is provided.
dataelements Gets a specific data element by UID, or lists all data elements if no UID is provided.
datastores Commands for getting datastore resources.
deploy List deployment history across all datastores.
health Displays the server health information and status.
log Gets the current log level configuration.
masks Gets a specific mask by UID, or lists all masks if no UID is provided.
policies Gets a specific policy by UID, lists all policies, or lists rules of a policy.
ready Displays the server readiness information and operational status.
roles Commands for getting role resources.
sources Gets source information by UID, lists all sources, or lists source members.
version Displays the server version information.
Get Alphabets
The following command shows how to access help for the get alphabets command. It also provides examples on how to retrieve all the alphabets or a specific alphabet.
pim get alphabets --help
Usage: pim get alphabets [OPTIONS] [UID]
Gets a specific alphabet by UID, or lists all alphabets if no UID is
provided.
EXAMPLES:
# List all available alphabets
pim get alphabets
# Get details for a specific alphabet by UID
pim get alphabets 29
Options:
--help Show this message and exit.
Get Applications
The following command shows how to access help for the get applications command. It also provides examples on how to retrieve all trusted applications or a specific trusted application.
pim get applications --help
Usage: pim get applications [OPTIONS] [UID]
Gets a specific application by UID, or lists all applications if no UID is
provided.
EXAMPLES:
# List all available applications
pim get applications
# Get details for a specific application by UID
pim get applications 1
Options:
--help Show this message and exit.
Get Dataelements
The following command shows how to access help for the get dataelements command. It also provides examples on how to retrieve all the data elements or a specific data element.
pim get dataelements --help
Usage: pim get dataelements [OPTIONS] [UID]
Gets a specific data element by UID, or lists all data elements if no UID is
provided.
EXAMPLES:
# List all available data elements pim get dataelements
# Get details for a specific data element by UID pim get dataelements 15
Options:
--help Show this message and exit.
Get Datastores
The following command shows how to access help for the get datastores command. It also provides examples on how to retrieve the datastore resources.
pim get datastores --help
Usage: pim get datastores [OPTIONS] COMMAND [ARGS]...
Commands for getting datastore resources.
Options:
--help Show this message and exit.
Commands:
datastore Gets a specific datastore by UID, or lists all datastores if no UID is provided.
keys Gets a specific key by UID, or lists all keys for a datastore.
ranges Gets a specific range by UID, or lists all ranges for a datastore.
Get Datastores Types
The following commands show how to access help for the get datastores <type> command. It also provides examples on how to retrieve specific datastores.
Get Datastores Datastore
The following command shows how to access help for the get datastores datastore command. It also provides examples on how to retrieve all datastores or a specific datastore.
pim get datastores datastore --help
Usage: pim get datastores datastore [OPTIONS] [UID]
Gets a specific datastore by UID, or lists all datastores if no UID is
provided.
Datastores represent the physical or logical storage systems where protected
data is stored. They contain policies, applications, and IP ranges that
define access control.
EXAMPLES:
# List all available datastores
pim get datastores datastore
# Get details for a specific datastore by UID
pim get datastores datastore 15
Options:
--help Show this message and exit.
Get Datastores Keys
The following command shows how to access help for the get datastores key command. It also provides examples on how to retrieve all keys for a datastore or a specific key.
pim get datastores keys --help
Usage:pimgetdatastoreskeys[OPTIONS]DATASTORE_UIDGetsaspecifickeybyUID,orlistsallkeysforadatastore.Datastorekeysmanageencryptionandaccesscredentialsforsecuredataoperations.Keyscanbeexportkeysfordatamigrationoroperationalkeysforongoingprotectionservices.Keymanagementiscriticalfordatasecurity.EXAMPLES:# List all keys for a specific datastorepimgetdatastoreskeys<datastore-uid># Get details for a specific key within a datastorepimgetdatastoreskeys15--key-uid<key-uid>WORKFLOW:# Step 1: List all datastores to find the datastore UIDpimgetdatastoresdatastore# Step 2: List keys for the specific datastorepimgetdatastoreskeys<datastore-uid># Step 3: Get specific key details if neededpimgetdatastoreskeys<datastore-uid>--key-uid<key-uid>Options:--key-uidTEXTUIDofthespecifickeytoget.--helpShowthismessageandexit.
Get Datastores Ranges
The following command shows how to access help for the get datastores ranges command. It also provides examples on how to retrieve all the IP address range for a datastore or a specific range.
pim get datastores ranges --help
Usage: pim get datastores ranges [OPTIONS] DATASTORE_UID
Gets a specific range by UID, or lists all ranges for a datastore.
IP ranges define which network addresses are allowed to access the
datastore. Ranges provide network-level security by restricting datastore
access to specific IP addresses or CIDR blocks.
EXAMPLES:
# List all IP ranges for a specific datastore
pim get datastores ranges 15
# Get details for a specific range within a datastore
pim get datastores ranges 15 --range-uid 1
WORKFLOW:
# Step 1: List all datastores to find the datastore UID
pim get datastores datastore
# Step 2: List ranges for the specific datastore
pim get datastores ranges <datastore-uid>
# Step 3: Get specific range details if needed
pim get datastores ranges <datastore-uid> --range-uid <range-uid>
Options:
--range-uid TEXT UID of the range to get.
--help Show this message and exit.
Get Deploy
The following command shows how to access help for the get deploy command. It also provides examples on how to list the deployment history.
pim get deploy --help
Usage: pim get deploy [OPTIONS]
List deployment history across all datastores.
EXAMPLES:
# List all deployment history
pim get deploy
Options:
--help Show this message and exit.
Get Health
The following command shows how to access help for the get health command. It also provides examples on how to display the server health information.
pim get health --help
Usage: pim get health [OPTIONS]
Displays the server health information and status.
EXAMPLES:
# Check current server health status
pim get health
Options:
--help Show this message and exit.
Get Log
The following command shows how to access help for the get log command. It also provides examples on how to retrieve the current log level.
pim get log --help
Usage: pim get log [OPTIONS]
Gets the current log level configuration.
EXAMPLES:
# Check current log level setting
pim get log
Options:
--help Show this message and exit.
Get Masks
The following command shows how to access help for the get masks command. It also provides examples on how to retrieve all masks or a specific mask.
pim get masks --help
Usage: pim get masks [OPTIONS] [UID]
Gets a specific mask by UID, or lists all masks if no UID is provided.
EXAMPLES:
# List all available masks
pim get masks
# Get details for a specific mask by UID
pim get masks 15
Options:
--help Show this message and exit.
Get Policies
The following command shows how to access help for the get policies command. It also provides examples on how to retrieve all policies, a specific policy, or all rules of a policy.
pim get policies --help
Usage: pim get policies [OPTIONS] [UID]
Gets a specific policy by UID, lists all policies, or lists rules of a
policy.
EXAMPLES:
# List all available policies
pim get policies
# Get details for a specific policy by UID
pim get policies 15
# List all rules within a specific policy
pim get policies 15 --rules
Options:
--rules List rules of the policy.
--help Show this message and exit.
Get Ready
The following command shows how to access help for the get ready command. It also provides examples on how to display the server readiness information.
pim get ready --help
Usage: pim get ready [OPTIONS]
Displays the server readiness information and operational status.
EXAMPLES:
# Check if server is ready for requests
pim get ready
Options:
--help Show this message and exit.
Get Roles
The following command shows how to access help for the get roles command. It also provides examples on how to retrieve the resources for a role.
pim get roles --help
Usage: pim get roles [OPTIONS] COMMAND [ARGS]...
Commands for getting role resources.
Options:
--help Show this message and exit.
Commands:
members Lists all members of a specific role.
role Gets a specific role by UID, or lists all roles if no UID is provided.
users Lists users of a specific member in a role.
Get Roles Types
The following commands show how to access help for the get roles <type> command.
Get Roles Members
The following command shows how to access help for the get roles members command. It also provides examples on how to list all members of a role.
pim get roles members --help
Usage: pim get roles members [OPTIONS] ROLE_UID
Lists all members of a specific role.
EXAMPLES:
# List all members of a specific role
pim get roles members 15
Options:
--help Show this message and exit.
Get Roles Role
The following command shows how to access help for the get roles role command. It also provides examples on how to retrieve all roles or a specific role.
pim get roles role --help
Usage: pim get roles role [OPTIONS] [UID]
Gets a specific role by UID, or lists all roles if no UID is provided.
EXAMPLES:
# List all available roles
pim get roles role
# Get details for a specific role by UID
pim get roles role 15
Options:
--help Show this message and exit.
Get Roles Users
The following command shows how to access help for the get roles users command. It also provides examples on how to retrieve users of a specific member in a role.
pim get roles users --help
Usage: pim get roles users [OPTIONS] ROLE_UID MEMBER_UID
Lists users of a specific member in a role.
EXAMPLES:
# List users in a specific group member of a role
pim get roles users 15 23
pim get roles users "<role-uuid>" "<member-uuid>"
Options:
--help Show this message and exit.
Get Sources
The following command shows how to access help for the get sources command. It also provides examples on how to retrieve all source, a specific source, or members of a source.
pim get sources --help
Usage: pim get sources [OPTIONS] [UID]
Gets source information by UID, lists all sources, or lists source members.
EXAMPLES:
# List all configured sources
pim get sources
# Get detailed information about a specific source
pim get sources 15
# List all members of a specific source
pim get sources 23 --members
Options:
--members List members of the source.
--help Show this message and exit.
Get Version
The following command shows how to access help for the get version command. It also provides examples on how to display the version information of the server.
pim get version --help
Usage: pim get version [OPTIONS]
Displays the server version information.
EXAMPLES:
# Display server version information
pim get version
Options:
--help Show this message and exit.
Set Commands
The following section lists the set commands.
Main Set Command
The following command shows how to access help for the set command.
pim set --help
Usage: pim set [OPTIONS] COMMAND [ARGS]...
Update fields of a resource.
Options:
--help Show this message and exit.
Commands:
log Sets the log level for the PIM server.
Set Log
The following command shows how to access help for the set log command. It also provides examples on how to set the log level.
pim set log --help
Usage: pim set log [OPTIONS] {ERROR|WARN|INFO|DEBUG|TRACE}
Sets the log level for the PIM server.
Higher levels include all lower levels (TRACE includes DEBUG, INFO, WARN,
ERROR).
EXAMPLES:
# Enable debug logging for troubleshooting
pim set log DEBUG
Options:
--help Show this message and exit.
6.3.1 - Using the Policy Management Command Line Interface (CLI)
Explains the usage of the Policy Management CLI with some generic samples.
The following table provides section references that explain usage of some of the Policy Management CLI. It includes an example workflow to work with the Policy Management functions. If you want to view all the Policy Management CLI, then refer to the section Policy Management Command Line Interface (CLI) Reference.
This section explains how you can initialize Policy Management to create the keys-related data and the policy repository.
pim invoke init
The following output appears:
✅ PIM successfully initialized (bootstrapped).
Creating a Manual Role
This section explains how you can create a manual role that accepts all the users.
pim create roles role --name "project-alpha-team" --description "Project Alpha all access" --mode "MANUAL" --allow-all
The following output appears:
NAME DESCRIPTION MODE ALLOWALL UID
project-alpha-team Project Alpha all access RoleMode.MANUAL True 1
The command creates a role named project-alpha-team that has the UID as 1.
Creating Data Elements
This section explains how you can create a data element.
pim create dataelements aes128-cbc-enc --name "BasicEncryption" --description "Basic data encryption"
The following output appears:
UID NAME DESCRIPTION IVTYPE CHECKSUMTYPE CIPHERFORMAT
1 BasicEncryption Basic data encryption IvType.NONE ChecksumType.NONE CipherFormat.NONE
The command creates an AES-128-CBC-ENC encryption data element named BasicEncryption that has the UID as 1.
Creating Policy
This section explains how you can create a policy.
pim create policies policy --name "full-protection-policy" --description "Complete data protection with all operations" --protect --re-protect --un-protect
The following output appears:
NAME DESCRIPTION ACCESS UID
full-protection-policy Complete data protection with all operations {'protect': True, 'reProtect': True, 'unProtect': True} 1
The command creates a policy named full-protection-policy that has the UID as 1.
Adding Roles and Data Elements to a Policy
This section explains how you can add roles and data elements to a policy.
NAME DESCRIPTION DEFAULT UID
primary-db Primary application database True 1
The command creates a default data store named primary-db that has the UID as 1.
Deploying a Specific Data Store
This section explains how you can deploy policies and trusted applications linked to a specific data store. The specifications provided for the specific data store are applied and becomes the end-result.
pim invoke datastores deploy 1 --policies 1
The following output appears:
Successfully deployed to datastore '1':
Policies: 1
The command deploys the policy with the UID 1 to the data store with the UID 1.
Getting the Deployment Information
This section explains how you can check the complete deployment information. This service returns the list of the data stores with the connected policies and trusted applications.
pim get deploy
The following output appears:
UID POLICIES APPLICATIONS
1 ['1'] []
The command retrieves the deployment information. It displays the UID of the data store and the policy that has been deployed.
7 - Troubleshooting
Accessing the PPC CLI
Permission denied (publickey): Ensure you’re using the correct private key that matches the authorized_keys in the pod
Connection refused: Verify the load balancer IP and hosts file configuration
Key format issues: Ensure your private key is in the correct format (OpenSSH format for Linux/macOS, .ppk for PuTTY)
Failure of init-resiliency script
Issue: When running the init_resiliency.sh script on a fresh RHEL 10.1 system as the root user, some required tools, such as, AWS CLI, kubectl, or Helm are not detected during setup.
The following error appears:
Cause: On RHEL systems, the default environment configuration for the root user does not include certain standard installation directories such as /usr/local/bin in the system path. As a result, tools that are installed successfully might not be immediately available to the script during execution.
Resolution: Before running the bootstrap or resiliency scripts as the root user on RHEL, ensure that /usr/local/bin (and the AWS CLI binary path, if applicable) is included in the $PATH. Alternatively, run the script using a non-root user (such as ec2-user) where /usr/local/bin is already part of the default PATH.
Certificate Authority (CA) is not backed up leading to protector disruption
Issue: CA certificates are not backed up during cluster migration, causing SSL certificate errors for protectors trying to communicate with the new cluster.
Description: When the CA that Envoy uses is not migrated to the new cluster, protectors cannot establish secure connections. The connection fails with SSL certificate errors like “unable to get local issuer certificate”. This disrupts protector functionality and requires manual intervention to restore communication.
Workaround:
Workaround 1: Custom CA is preserved before restore. This preserved CA is replaced with the default CA in the new restored cluster.
This ensures protectors continue to trust the cluster without any changes.
Workaround 2: Run the GetCertificates command on each protector after restore.
cd /opt/protegrity/rpagent/bin/
./GetCertificates -u <username> -p <password>
This command downloads new CA‑signed certificates which results in restoring secure communication with the cluster.
Important: This approach is functional but not user‑friendly and should be avoided in production by preserving the custom CA across restores.
When upgrading PPC from v1.0.0 to v 1.1.0, Stage 01 shows unexpected IAM policy replacement
Issue: During PPC upgrade from v1.0.0 to v1.1.0, Stage 01 01_iam_roles displays an unexpected destroy and then create replacement for aws_iam_policy.eks_backup_recovery_utility_policy and its role-policy attachment, with the plan showing Plan: 4 to add, 0 to change, 2 to destroy.
Description: The PPC v1.0.0 created the IAM policy with a trailing space in the description field. AWS IAM treats description as an immutable attribute, and any change to it forces a full resource replacement (destroy + create). The PPC v1.1.0 removes the trailing space, which triggers the replacement. The following plan output is expected:
# aws_iam_policy.eks_backup_recovery_utility_policy must be replaced
-/+ resource "aws_iam_policy" "eks_backup_recovery_utility_policy" {
~ description = "IAM policy used by backup service to access S3 bucket " -> "IAM policy used by backup service to access S3 bucket" # forces replacement
}
Resolution: No action is required. This is expected and one-time behavior. The policy ARN changes as the policy is briefly recreated, and the role-policy attachment is disconnected for approximately 200ms. There is no functional impact because Stage 01 runs before any application pods that depend on this policy are started. By Stage 05, the policy is already recreated and attached. Subsequent upgrade runs show no changes.
8 - Replacing the default Certificate Authority (CA) with a Custom CA in PPC
In a PPC deployment, Envoy and other internal components rely on a CA to establish trusted TLS communication.
By default, PPC uses an internally generated CA. PPC supports replacing the default CA with a custom CA that can be preserved and reused across cluster restore or migration.
Prerequisites
Before you begin, ensure that:
You have access to the PPC Kubernetes cluster (kubectl configured).
Openssl is installed.
Cert-manager is installed.
The eclipse-issuer ClusterIssuer exists.
You have permission to create secrets in the cert-manager namespace.
Perform the following steps:
Custom CA certificates are available.
a. Users already have existing CA certificates.
To retrieve custom CA certificate and key from custom-ca-secret secret, run the following commands:
Note: This changes cert-manager to issue all new certificates using the custom CA.
After patching the ClusterIssuer, existing certificates must be re-issued using the new CA. Use one of the following approaches:
Approach 1: Trigger renewal via cmctl(Recommended)
cmctl is the official cert-manager CLI and provides the most reliable way to trigger certificate renewal. The script below checks if cmctl is installed and downloads it automatically if not.
#!/bin/bash
# Install cmctl if not presentif ! command -v cmctl &>/dev/null;thenecho"cmctl not found, downloading..." curl -L https://github.com/cert-manager/cmctl/releases/latest/download/cmctl_linux_amd64 \
-o /usr/local/bin/cmctl
chmod +x /usr/local/bin/cmctl
echo"cmctl installed successfully"fi# Renew all certificates using eclipse-issuerkubectl get certificates --all-namespaces -o json |\
jq -r '.items[] | select(.spec.issuerRef.name=="eclipse-issuer") | "\(.metadata.namespace) \(.metadata.name)"'|\
whileread -r ns cert_name;doecho"Renewing certificate: $cert_name in namespace: $ns" cmctl renew "$cert_name" -n "$ns"done
Approach 2: Trigger renewal via kubectl (status patch)
Use this approach if cmctl cannot be installed. Requires kubectl 1.24+.
Note: Due to cert-manager’s reconcile loop, some certificates may not renew on the first attempt. Re-run the script if any certificates remain unrenewed.
9 - Updating Registry Credentials for AKS/EKS Clusters
Steps to update registry pull secret credentials in PPC without reinstalling the cluster.
Protegrity Provisioned Cluster (PPC) uses image pull secrets to authenticate against the container registry, such as Harbor, when pulling images. When registry passwords are rotated, credentials expire, or the registry endpoint changes, the pull secrets must be updated across all namespaces in the cluster.
This procedure updates the harbor-secret image pull secret across all required namespaces using OpenTofu (tofu) -replace flags. This process does not require a reinstall of the full cluster.
Note: Existing running pods are unaffected by this operation. Only new image pulls use the rotated secret, for example, new pods, scaling events, and node replacements. If existing pods need to use the new credentials immediately, restart the affected deployments after applying the settings.
When to Use This Procedure
The following table outlines common scenarios and the frequency for updating registry credentials in PPC:
Use Case
Trigger
Frequency
Scheduled password rotation
Policy/compliance schedule.
Quarterly
Security incident response
Credential compromise or leak.
Ad-hoc
Registry migration
Infrastructure change. For example, Artifactory to Harbor.
Rare
Multi-cluster credential management
Operational rollout across environments.
Ongoing
Service account token expiry
Automatic token expiration. For example, ECR or ACR.
Hours/days
User/team offboarding
HR process - account disabled.
Ad-hoc
Upgrade/patch deployment failures
Expired credentials blocking image pulls.
As needed
Audit and compliance
SOC2, ISO 27001, FedRAMP, HIPAA requirements.
Annual
Prerequisites
Before you begin, ensure that the following requirements are met:
You have access to the PPC Kubernetes cluster, kubectl is configured.
OpenTofu (tofu) is installed.
You have the new registry username and password.
You have permission to manage secrets across namespaces in the cluster.
The PPC directory is available at /eclipse-init/iac/.
Target Namespaces
The harbor-secret is managed in the following namespaces:
Namespace
pty-admin
api-gateway
pty-loginui
cert-manager
karpenter
default
pty-backup-recovery
email-service
cli
reloader
pty-insight
Procedure
This procedure must be run once per cloud, that is, AWS for EKS and Azure for AKS. Complete all steps for one cloud before proceeding to the next.
Follow these steps for each cloud environment:
Export the credentials for the new registry as environment variables.
Set the Kubernetes context to prevent accidentally writing secrets to the wrong cluster:
CLOUD=aws # or: azureKCTX=<your-cluster-context-name>
kubectl config use-context "$KCTX"kubectl config current-context # must match the intended cluster
Note: Operating on the wrong cluster will update secrets in the incorrect environment.
Navigate to the iac directory.
cd iac/azure/cluster/modules/05_helm_releases
Plan the credential update that targets only the harbor-secret resources across all namespaces.
NAMESPACES=(pty-admin api-gateway pty-loginui cert-manager karpenter default \
pty-backup-recovery email-service cli reloader pty-insight)REPLACE_ARGS=()for ns in "${NAMESPACES[@]}";doREPLACE_ARGS+=(-replace="module.helm_releases.module.common.kubernetes_secret_v1.harbor_secret[\"$ns\"]")donetofu plan "${REPLACE_ARGS[@]}" -out="rotate-${CLOUD}.tfplan"
Review the plan. Expected output:
Plan: 11 to add, 0 to change, 11 to destroy.
Or equivalently, 11 to replace.
The plan must affect only harbor_secret resources. If any other resources appear in the plan, stop immediately and delete the plan file.
rm "rotate-${CLOUD}.tfplan"
Note: Investigate the unexpected changes before retrying.
Apply the plan.
tofu apply "rotate-${CLOUD}.tfplan"
After successfully applying the plan, clean up the plan file. Use the command below:
rm "rotate-${CLOUD}.tfplan"
Note: The lifecycle.ignore_changes = [data] directive on the secret resource is bypassed by -replace because the resource is destroyed and recreated, not updated in place.
Verify the update. Confirm that all harbor-secret resources were recreated with current timestamps.
for ns in pty-admin api-gateway pty-loginui cert-manager karpenter default \
pty-backup-recovery email-service cli reloader pty-insight;do kubectl -n "$ns" get secret harbor-secret \
-o jsonpath='{.metadata.namespace}{"\t"}{.metadata.creationTimestamp}{"\n"}'done
All timestamps must reflect the time of the apply operation.
Reset the context variables, then repeat from step 4 for the next cloud.
CLOUD=azure
KCTX=<your-azure-context-name>
Optional Post-Update Step: Rolling Deployments
If the running pods need to use the new credentials immediately, rather than waiting for the next pod restart, roll the affected deployments.