Upgrading PingIntelligence
After upgrading Elasticsearch, upgrade PingIntelligence 5.1 to 5.2 and switch to RHEL 8.
Before you begin
Stop all PingIntelligence 5.1 components before starting the upgrade.
About this task
To upgrade PingIntelligence:
Steps
-
Upgrade API Security Enforcer (ASE) from 5.1.1 to 5.1.3 in the corresponding RHEL 7.9 instance.
There is no 5.2 RHEL 8 build for ASE.
-
Make sure that ASE is stopped.
-
Make a backup of the existing ASE base folder.
-
Copy the ASE 5.1.3 build.
-
Untar the new build.
-
Update the
ase.confandabs.confwith the required details, such as port, ASE mode, and API Behavioral Security (ABS) IP, by referring to backed-upconffiles. -
Add the actual passwords for the following passwords:
config/ase.conf: sender_password, keystore_password config/abs.conf: access_key, secret_key config/cluster.conf: cluster_secret_key
-
Copy
ase.crtfrom the backup folder to thease/configdirectory. -
Copy the
PingIntelligence.liclicense file to thease/configdirectory. -
Generate the master key.
/opt/pingidentity/ase/bin/cli.sh generate_obfkey -u admin -p
-
Obfuscate the key.
/opt/pingidentity/ase/bin/cli.sh obfuscate_keys -u admin -p
-
Copy the API JSON files to the
config/apidirectory. -
Start ASE.
/opt/pingidentity/ase/bin/start.sh
-
-
In the already migrated RHEL 8
mongo, add the new DBpi4api_dashboardand grantreadWriteroles for theabsuserfor this DB.Make sure the
pi4api_dashboardcollection does not exist before the 5.2 upgrade. The 5.2 upgrade will remove the data from the following tables, which are under thepi4api_dashboardcollection, if it exists:api_groups api_state user_sessions users
-
Shut down the
mongoprimary and secondary.mongod --shutdown --dbpath data/
-
Start the primary
mongowithout the--authflag.mongod --dbpath ./data/ --logpath ./logs/mongo.log --port 27017 --replSet absrs01 --fork -bind_ip 0.0.0.0
-
Sign on to
mongowithout specifying a user.mongo
-
Run the following commands:
create pi4api_dashboard DB use pi4api_dashboard
Switch to admin db use admin
Execute the command to grant the
readWriterole forabsuserforpi4api_dashboard.db.grantRolesToUser("absuser", ["readWrite",{ role: "readWrite", db: "pi4api_dashboard" }]); -
Shut down the
mongoprimary. -
Restart
mongo(both primary and secondary) with--authenabled and with--tlsMode.mongod --auth --dbpath ./data/ --logpath ./logs/mongo.log --port 27017 --replSet absrs01 --fork --keyFile ./key/mongodb-keyfile -bind_ip 0.0.0.0 --tlsMode requireTLS --tlsCertificateKeyFile ./key/mongodb.pem
-
-
Make the following changes in Kafka:
-
Create the discovery topic.
/home/ec2-user/pingidentity/kafka/bin/kafka-topics.sh --bootstrap-server 172.16.40.244:9091 --create --topic pi4api.queuing.apis --partitions 1 --replication-factor 1 --command-config /home/ec2-user/pingidentity/kafka/config/client.properties
-
Create the access control lists (ACL) for the ABS producer user for the discovery topic.
/home/ec2-user/pingidentity/kafka/bin/kafka-acls.sh --bootstrap-server 172.16.40.244:9091 --add --allow-principal User:abs_producer --operation Create --operation Read --operation Write --topic pi4api.queuing.apis --command-config /home/ec2-user/pingidentity/kafka/config/client.properties
-
Create the ACLs for the ABS consumer user for the discovery topic.
/home/ec2-user/pingidentity/kafka/bin/kafka-acls.sh --bootstrap-server 172.16.40.244:9091 --add --allow-principal User:abs_consumer --operation Read --topic pi4api.queuing.apis --command-config /home/ec2-user/pingidentity/kafka/config/client.properties
-
Create the ACLs for the data engine consumer user.
/home/ec2-user/pingidentity/kafka/bin/kafka-acls.sh --bootstrap-server 172.16.40.244:9091 --add --allow-principal User:pi4api_de_user --operation Create --operation Read --operation Write --topic pi4api.queuing.apis --command-config /home/ec2-user/pingidentity/kafka/config/client.properties
-
Add the ACLs below in Kafka if they have not already been added:
Current ACLs for resource
ResourcePattern(resourceType=TOPIC, name=pi4api.queuing.anomalies, patternType=LITERAL): (principal=Group:pi4api.abs, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.abs, host=, operation=READ, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=WRITE, permissionType=ALLOW) Current ACLs for resourceResourcePattern(resourceType=GROUP, name=pi4api.abs, patternType=LITERAL): (principal=User:abs_consumer, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=DESCRIBE, permissionType=ALLOW) Current ACLs for resourceResourcePattern(resourceType=TOPIC, name=pi4api.queuing.ioas, patternType=LITERAL): (principal=Group:pi4api.abs, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.abs, host=, operation=READ, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=WRITE, permissionType=ALLOW) Current ACLs for resourceResourcePattern(resourceType=TOPIC, name=pi4api.queuing.apis, patternType=LITERAL): (principal=User:abs_producer, host=, operation=READ, permissionType=ALLOW) (principal=Group:pi4api.abs, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.abs, host=, operation=READ, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=WRITE, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=CREATE, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=WRITE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=CREATE, permissionType=ALLOW) Current ACLs for resourceResourcePattern(resourceType=GROUP, name=pi4api.data-engine, patternType=LITERAL): (principal=User:pi4api_de_user, host=, operation=READ, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=DESCRIBE, permissionType=ALLOW) Current ACLs for resourceResourcePattern(resourceType=TOPIC, name=pi4api.queuing.transactions, patternType=LITERAL): (principal=Group:pi4api.abs, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_consumer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.abs, host=, operation=READ, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:pi4api_de_user, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=DESCRIBE, permissionType=ALLOW) (principal=Group:pi4api.data-engine, host=, operation=READ, permissionType=ALLOW) (principal=User:abs_producer, host=, operation=WRITE, permissionType=ALLOW)
-
-
Upgrade the Dashboard from 5.1.0.2 to 5.1.1.
Make sure the
discovered_apisindex does not exist before upgrading the Dashboard from 5.1.0.2. During the 5.2 Dashboard upgrade, all the documents related to this index will be cleaned up.-
Stop the
dataengineandwebgui. -
Make a backup of
dataengine.jks,kafka_truststore.jks, andwebgui.jksfiles, and save them separately. -
Delete the
dataengineandwebguifolders inside the Ping Identity directory. -
Download the Dashboard 5.1.1 build to the Dashboard instance
/home/ec2-userfolder. -
Untar the downloaded build.
Result:
The
dataengineandwebguifolders will be created inside the Ping Identity directory.-
Make the following changes to
dataengine:-
Go to the
dataenginefolder.cd /home/ec2-user/pingidentity/dataengine/config
-
Copy the
dataenine.jks(from the backup) file to thedataengine/configdirectory. -
Copy
kafka_truststore.jks(from the backup) file to thedataengine/configdirectory. -
Update the properties below in
kafka.propertieswith valid entries:pi.kafka.bootstrap-servers=10.96.6.45:9093 pi.kafka.consumer.sslTruststoreLocation=/home/ec2-user/pingidentity/dataengine/config/kafka_truststore.jks pi.kafka.consumer.sslTruststorePassword=changeme pi.kafka.consumer.groupId=pi4api.data-engine pi.kafka.consumer.authentication.username=pi4api_de_user pi.kafka.consumer.authentication.password=changeme
-
Update
dataengine.propertieswith valid entries:pi.dataengine.server.ssl.key-store-password=changeme pi.dataengine.server.ssl.key-alias=<alias-name> pi.dataengine.abs.url=https://10.96.6.82:8080 pi.dataengine.abs.access_key=abs_ak pi.dataengine.abs.secret_key=abs_sk pi.dataengine.elasticsearch.url=https://10.96.6.45:9200 pi.dataengine.elasticsearch.username=elastic pi.dataengine.elasticsearch.password=changeme
-
-
Generate a new master key.
cd /home/ec2-user/dataengine ./bin/cli.sh generate_obfkey
-
Obfuscate keys.
./bin/cli.sh obfuscate_keys
-
Start the
datenegine../bin/start.sh
-
Make the following changes to
webgui:-
Go to the
webguifolder.cd /home/ec2-user/pingidentity/webgui/config
-
Copy the
webgui.jks(from the backup) file to thewebgui/configdirectory. -
Update the properties below in the
webgui.propertiesfile:pi.webgui.server.ssl.key-store-password=changeme pi.webgui.server.ssl.key-alias=<alis-name> pi.webgui.abs.url=https://10.96.6.82:8080 pi.webgui.abs.api-service-url=https://10.96.6.82:8050 pi.webgui.abs.access-key=abs_ak pi.webgui.abs.secret-key=abs_sk pi.webgui.ase.url=https://10.96.6.80:8010 pi.webgui.ase.access-key=ase_ak pi.webgui.ase.secret-key=ase_sk pi.webgui.elasticsearch.url=https://10.96.6.45:9200 pi.webgui.elasticsearch.username=elastic pi.webgui.elasticsearch.password=changeme pi.webgui.datasource.username=sa pi.webgui.datasource.password=changeme pi.webgui.datasource.encryption-password=changeme
-
Generate a new master key.
cd /home/ec2-user/webgui ./bin/cli.sh generate_obfkey
-
Obfuscate keys.
./bin/cli.sh obfuscate_keys
-
Start the
webgui../bin/start.sh
Use only RHEL 8 instances to run the remaining PingIntelligence 5.2 components (ABS, API Publish, machine learning (ML) service, data engine, and web GUI).
-
-
-
Stop all PingIntelligence 5.1 components (ABS, API Publish, Dashboard) before starting the 5.2 upgrade.
-
To upgrade ABS, make sure you have a RHEL 8 instance ready to install the PingIntelligence ABS 5.2 build and then proceed with the following:
-
Install Java 11.0.2 and set
JAVA_HOME. -
Download the PingIntelligence ABS 5.2 build from the PingIntelligence Downloads website.
-
Copy the build to the RHEL 8 instance.
-
Untar the build.
Result:
An
absfolder will be created inside thepingidentityfolder. -
Copy the
PingIntelligence.liclicense file to thepingidentity/abs/configdirectory. -
Copy the
abs.jksfile from the old ABS (RHEL 7, ABS 5.1) to the new RHEL 8 ABSssldirectory./pingidentity/abs/config/ssl/
You can alternatively create a new
abs.jksfile.-
Copy the
kafka.truststore.jksfile from the old ABS (RHEL 7, ABS 5.1) to new RHEL 8 ABS corresponding path./opt/pingidentity/abs/config/kafka.truststore.jks
-
Update the properties below in
Kafka.properties:pi.kafka.bootstrap-servers=10.96.6.196:9093 pi.kafka.sslTruststoreLocation=/opt/pingidentity/abs/config/kafka.truststore.jks pi.kafka.sslTruststorePassword=<actual_password> pi.kafka.consumer.authentication.password=<actual_password> pi.kafka.producer.authentication.password=<actual_password> pi.kafka.producer.min-insync-replicas=1
-
Update the
abs.propertiesfile with the details below:jks_password=<actual_password> Mongo_rs=mongodb://10.96.6.242:27017,10.96.6.201:27017 mongo_username=absuser mongo_password=abs123 mongo_ssl=true email_password=<actual_password>
-
Generate a new ABS master key.
/opt/pingidentity/abs/bin/cli.sh generate_obfkey -u admin -p admin
-
Obfuscate keys.
/opt/pingidentity/abs/bin/cli.sh obfuscate_keys -u admin -p admin
Result:
The following keys will be obfuscated:
config/abs.properties:mongo_password,jks_password, andemail_passwordconfig/kafka.properties:pi.kafka.consumer.authentication.password,pi.kafka.producer.authentication.password, andpi.kafka.sslTruststorePassword -
Start ABS.
/opt/pingidentity/abs/bin/start.sh
-
-
To upgrade API Publish, make sure you have a RHEL 8 instance ready to install the PingIntelligence ABS 5.2 build and then proceed with the following:
-
Install Java 11.0.2 and set
JAVA_HOME. -
Download the PingIntelligence API Publish 5.2 build from the PingIntelligence Downloads website.
-
Copy the build to the RHEL 8 instance.
-
Untar the build.
Result:
An
apipublishfolder will be created inside thepingidentityfolder. -
Copy the
apipublish.jksfile from the old API Publish (RHEL 7, API Publish 5.1) to the new RHEL 8 API Publishssldirectory./pingidentity/apipublish/config/ssl/
You can alternatively create a new
apipublish.jksfile.-
Update the
apipublish.propertiesfile with the details below:pi.apipublish.ssl.key-store-password=api123 pi.apipublish.datasource.mongo_rs=mongodb://10.96.6.242:27017,10.96.6.201:27017 pi.apipublish.datasource.username=absuser pi.apipublish.datasource.password=abs123 pi.apipublish.datasource.mongo_ssl=true
-
Generate a new API Publish master key.
/pingidentity/apipublish/bin/cli.sh generate_obfkey -u admin -p admin
-
Obfuscate keys.
/pingidentity/apipublish/bin/cli.sh obfuscate_keys -u admin -p admin
Result:
The following keys will be obfuscated:
config/apipublish.properties:pi.apipublish.ssl.key-store-passwordandpi.apipublish.datasource.password -
Start API Publish.
../bin/start.sh
-
-
Install the new ML service 5.2 build on the RHEL 8 instance by following the steps in Installing the PingIntelligence machine learning service.
-
To install
dataengine, make sure you have a RHEL 8 instance with 8 core CPU, 16 GB, 1 TB hard disk drive (HDD).-
Download the PingIntelligence 5.2 Dashboard build and extract it in the RHEL 8 instance.
-
Install Java 11.0.2 and set
JAVA_HOME. -
Copy the
data-engine.jksfile from the olddataengineand copy it to the newdataengineRHEL 8 instance indataengine/config directory. -
Add the Mongo certificate to
data-engine.jks.-
In the RHEL 8
mongoprimary node, go tomongo/key/mongo.pemand copy the public key part. -
Store the public key as
mongo.crtindataengine/config. -
Run the following command:
keytool -import -keystore dataengine.jks -storetype JKS -storepass changeme -alias mongo -file mongo.crt -noprompt
-
-
Copy the
kafka.truststore.jksfile to thedataengine/config/directory. -
Update
Kafka.propertieswith the details below:pi.kafka.bootstrap-servers=<Kafka_IP>:9093 pi.kafka.consumer.sslTruststoreLocation=/opt/pingidentity/dataengine/config/kafka_truststore.jks pi.kafka.consumer.sslTruststorePassword=<actual_password> pi.kafka.consumer.authentication.password=<actual_password>
-
Update
Dataengine.propertieswith the details below:pi.dataengine.server.ssl.key-store-password=<actual_password> pi.dataengine.server.ssl.key-alias=<alias-name> # abs properties pi.dataengine.abs.url=https://<ABS_IP>:8080 pi.dataengine.abs.access_key=abs_ak pi.dataengine.abs.secret_key=abs_sk pi.dataengine.elasticsearch.url=https://<elasticsearch_ip>:9200 pi.dataengine.elasticsearch.username=elastic pi.dataengine.elasticsearch.password=<actual_password> pi.dataengine.datasource.url=mongodb://<mongo_ip>:27017 pi.dataengine.datasource.username=absuser pi.dataengine.datasource.password=abs123
-
Generate
dataengine_master.key../bin/cli.sh generate_obfkey
-
Obfuscate keys.
./bin/cli.sh obfuscate_keys
-
Start
dataengine../bin/start.sh
-
-
Install
webgui.-
Copy the
h2-backupfolder (that was copied and saved in Migrating Elasticsearch from RHEL 7.9 to 8 in step 13e) to the RHEL 8 instance under thewebgui/datadirectory. -
Copy
webgui.jksfrom the oldwebguiinstance to the RHEL 8 instancewebgui/configdirectory. -
Add the Mongo certificate to
webgui.jks.-
In the RHEL 8
mongoprimary node, go tomongo/key/mongo.pemand copy the public key part. -
Store the public key as
mongo.crtinwebgui/config. -
Run the following command:
keytool -import -keystore webgui.jks -storetype JKS -storepass changeme -alias mongo -file mongo.crt -noprompt
-
-
Update
webgui.propertieswith the details below:pi.webgui.server.ssl.key-store-password=<actual_password> pi.webgui.server.ssl.key-alias=<alias-name> pi.webgui.abs.url=https://10.96.6.242:8080 pi.webgui.abs.api-service-url=https://10.96.6.242:8050 pi.webgui.abs.access-key=<actual_key> pi.webgui.abs.secret-key=<actual_key> # ase properties pi.webgui.ase.url=https://10.96.6.217:8010 pi.webgui.ase.access-key=<actual_key> pi.webgui.ase.secret-key=<actual_key> # elasticsearch properties pi.webgui.elasticsearch.url=https://10.96.6.19:9200 pi.webgui.elasticsearch.username=elastic pi.webgui.elasticsearch.password=<actual_password> pi.webgui.datasource.url=mongodb://10.96.6.242:27017 pi.webgui.datasource.username=absuser pi.webgui.datasource.password=abs123
-
Generate
dataengine_master.key../bin/cli.sh generate_obfkey
-
Obfuscate keys.
./bin/cli.sh obfuscate_keys
-
Start
webgui../bin/start.sh
-