Issue Resolution Core operator secret usage
Find out about the secure operation of the Issue Resolution Core
operator.
Secrets owned by the Issue Resolution Core operator
The Issue Resolution Core
operator's secrets are created automatically when IBM Cloud Pak® for AIOps is installed. Alternatively, you can manually create some or all of these secrets before IBM Cloud Pak for AIOps is installed,
with values of your own choosing. If these secrets exist before IBM Cloud Pak for AIOps is installed, then they are not modified (although new properties might be added).
The following table describes the secrets that the Issue Resolution Core
operator owns. These secrets contain credentials, encryption keys, and other secrets. Some values can be changed after installation, which might necessitate
restarting pods that have access to these secrets, or require additional steps to run. Details are provided in the table.
Secret | Property | Type | Purpose | Rotation | Example commands |
---|---|---|---|---|---|
aiops-ir-core-cem-users-secret |
clientid |
hex15 | OAuth client ID | Change the secret. aiops-akora-ui , aiops-ir-core-cem-users , aiops-ir-core-esarchiving , aiops-ir-core-ncodl-api , aiops-ir-core-rba-rbs and aiops-ir-core-usercfg will restart automatically. |
oc set data secret aiops-ir-core-cem-users-secret --from-literal=clientid=$(openssl rand --hex 15) |
aiops-ir-core-cem-users-secret |
clientsecret |
hex15 | OAuth client secret | Change the secret. aiops-akora-ui , aiops-ir-core-cem-users , aiops-ir-core-esarchiving , aiops-ir-core-ncodl-api , aiops-ir-core-rba-rbs and aiops-ir-core-usercfg will restart automatically. |
oc set data secret aiops-ir-core-cem-users-secret --from-literal=clientsecret=$(openssl rand --hex 15) |
aiops-ir-core-cem-users-secret |
oidcclientid |
hex15 | Not used in AIOps | This secret can be changed without effect. | |
aiops-ir-core-cem-users-secret |
oidcclientsecret |
hex15 | Not used in AIOps | This secret can be changed without effect. | |
aiops-ir-core-cem-users-secret |
password |
hex15 | Basic auth for https://aiops-ir-core-cem-users:6002 |
Change the secret. aiops-akora-ui , aiops-ir-core-cem-users , aiops-ir-core-esarchiving , aiops-ir-core-ncodl-api , aiops-ir-core-rba-rbs and aiops-ir-core-usercfg will restart automatically. |
oc set data secret aiops-ir-core-cem-users-secret --from-literal=password=$(openssl rand --hex 15) |
aiops-ir-core-cem-users-secret |
username |
hex15 | Basic auth for https://aiops-ir-core-cem-users:6002 |
Change the secret. aiops-akora-ui , aiops-ir-core-cem-users , aiops-ir-core-esarchiving , aiops-ir-core-ncodl-api , aiops-ir-core-rba-rbs and aiops-ir-core-usercfg will restart automatically. |
oc set data secret aiops-ir-core-cem-users-secret --from-literal=username=$(openssl rand --hex 15) |
aiops-ir-core-couchdb |
admin_password |
hex15 | Basic auth for https://aiops-ir-core-couchdb-api |
Change the secret and restart c-example-couchdbcluster-m |
oc set data secret aiops-ir-core-couchdb --from-literal=admin_password=$(openssl rand --hex 15) && oc delete pod -l app.kubernetes.io/component=couchdb |
aiops-ir-core-couchdb |
couchdb_auth_secret |
hex15 | Internal CouchDB use | Change the secret and restart c-example-couchdbcluster-m |
oc set data secret aiops-ir-core-couchdb --from-literal=couchdb_auth_secret=$(openssl rand --hex 15) && oc delete pod -l app.kubernetes.io/component=couchdb |
aiops-ir-core-couchdb |
csrf_secret |
hex15 | Internal CouchDB use | Change the secret and restart c-example-couchdbcluster-m |
oc set data secret aiops-ir-core-couchdb --from-literal=csrf_secret=$(openssl rand --hex 15) && oc delete pod -l app.kubernetes.io/component=couchdb |
aiops-ir-core-couchdb |
erlang_cookie |
hex15 | Internal CouchDB use | Change the secret and restart c-example-couchdbcluster-m |
oc set data secret aiops-ir-core-couchdb --from-literal=erlang_cookie=$(openssl rand --hex 15) && oc delete pod -l app.kubernetes.io/component=couchdb |
aiops-ir-core-couchdb |
ibm_password |
hex15 | Internal CouchDB use | Change the secret and restart c-example-couchdbcluster-m |
oc set data secret aiops-ir-core-couchdb --from-literal=ibm_password=$(openssl rand --hex 15) && oc delete pod -l app.kubernetes.io/component=couchdb |
aiops-ir-core-model-secret |
hkeyname |
ts | Identifier for hkeyvalue value |
See Key rotation. | |
aiops-ir-core-model-secret |
hkeyvalue |
hex16 | HMAC key for sensitive data in CouchDB | See Key rotation. | |
aiops-ir-core-model-secret |
oldhkeys |
hex16 | Previous HMAC keys for sensitive data in CouchDB | See Key rotation. | |
aiops-ir-core-model-secret |
keyname |
ts | Identifier for keyvalue value |
See Key rotation. | |
aiops-ir-core-model-secret |
keyvalue |
hex32 | Encryption key for sensitive data in CouchDB | See Key rotation. | |
aiops-ir-core-model-secret |
oldkeys |
hex32 | Previous encryption keys for sensitive data in CouchDB | See Key rotation. | |
aiops-ir-core-ncodl-api-secret |
password |
hex15 | Basic auth for https://aiops-ir-core-ncodl-api:10011 |
Change the secret. - Restart cp4waiops-metricsprocessor .- aiops-ir-core-ncodl-api restarts automatically. |
oc set data secret aiops-ir-core-ncodl-api-secret --from-literal=password=$(openssl rand -hex 15) && oc delete pod -l connector.aiops.ibm.com/name=cp4waiops-metricsprocessor |
aiops-ir-core-ncodl-api-secret |
username |
hex15 | Basic auth for https://aiops-ir-core-ncodl-api:10011 |
Change the secret. - Restart cp4waiops-metricsprocessor .- aiops-ir-core-ncodl-api restarts automatically. |
oc set data secret aiops-ir-core-ncodl-api-secret --from-literal=username=$(openssl rand -hex 15) && oc delete pod -l connector.aiops.ibm.com/name=cp4waiops-metricsprocessor |
aiops-ir-core-ncodl-std-secret |
password |
hex15 | Basic auth for https://aiops-ir-core-ncodl-std:10011 |
Change the secret. -Restart aimanager-aio-ai-platform-api-server , aimanager-aio-change-risk , aimanager-aio-chatops-orchestrator , aimanager-aio-chatops-slack-integrator , aimanager-aio-chatops-teams-integrator ,
aimanager-aio-controller , aimanager-aio-cr-api , aimanager-aio-log-anomaly-detector , aimanager-aio-log-anomaly-feedback-learning , aimanager-aio-oob-recommended-actions ,
aimanager-aio-similar-incidents-service .- aiops-ir-analytics-probablecause , aiops-ir-core-api , aiops-ir-core-ncodl-api , aiops-ir-core-ncodl-if , aiops-ir-core-ncodl-jobmgr ,
aiops-ir-core-ncodl-std , and aiops-ir-core-rba-as restart automatically. |
oc set data secret aiops-ir-core-ncodl-std-secret --from-literal=password=$(openssl rand -hex 15) && oc delete pod -l app.kubernetes.io/component=ai-platform-api-server && oc delete pod -l app.kubernetes.io/component=change-risk && oc delete pod -l app.kubernetes.io/component=chatops-orchestrator && oc delete pod -l app.kubernetes.io/component=chatops-slack-integrator && oc delete pod -l app.kubernetes.io/component=chatops-teams-integrator && oc delete pod -l app.kubernetes.io/component=controller,app.kubernetes.io/name=aio && oc delete pod -l app.kubernetes.io/component=cr-api && oc delete pod -l app.kubernetes.io/component=log-anomaly-detector && oc delete pod -l app.kubernetes.io/component=log-anomaly-feedback-learning && oc delete pod -l app.kubernetes.io/component=oob-recommended-actions && oc delete pod -l app.kubernetes.io/component=similar-incidents-service |
aiops-ir-core-ncodl-std-secret |
username |
fixed | Basic auth for https://aiops-ir-core-ncodl-std:10011 |
The username is system . Do not change, included for future flexibility. |
|
aiops-ir-core-omni-secret |
OMNIBUS_PROBE_PASSWORD |
hex15 | Probe password for ObjectServer | See ObjectServer passwords. | |
aiops-ir-core-omni-secret |
OMNIBUS_ROOT_PASSWORD |
hex15 | Root password for ObjectServer | See ObjectServer passwords. | |
aiops-ir-core-postgresql |
caCertificate |
x509 | Root CA certificate for PostgreSQL | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql |
dbname |
fixed | Name of event database in PostgreSQL | The database name is aiops_irb . This secret must not be changed and is included for future flexibility. |
|
aiops-ir-core-postgresql |
host |
hostname | Service name of PostgreSQL cluster | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql |
password |
hex15 | Password for PostgreSQL event runtime user | Change the secret. - aiops-ir-core-ncodl-jobmgr and aiops-ir-core-ncodl-std restart automatically. |
oc set data secret aiops-ir-core-postgresql --from-literal=password=$(openssl rand -hex 15) |
aiops-ir-core-postgresql |
port |
port | Port for PostgreSQL cluster service | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql |
schema |
fixed | Name of event schema in PostgreSQL | The schema name is aiops_irb . This secret must not be changed and is included for future flexibility. |
|
aiops-ir-core-postgresql |
username |
fixed | Name of PostgreSQL event runtime user | The username is aiops_irb . This secret must not be changed and is included for future flexibility. |
|
aiops-ir-core-postgresql-admin |
caCertificate |
x509 | Root CA certificate for PostgreSQL | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-admin |
dbname |
fixed | Name of event database in PostgreSQL | The database name is aiops_irb . This secret must not be changed and is included for future flexibility. |
|
aiops-ir-core-postgresql-admin |
host |
hostname | Service name of PostgreSQL cluster | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-admin |
password |
hex15 | Password for PostgreSQL event admin user | Change the secret. No pod restarts are required. | oc set data secret aiops-ir-core-postgresql-admin --from-literal=password=$(openssl rand -hex 15) |
aiops-ir-core-postgresql-admin |
port |
port | Port for PostgreSQL cluster service | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-admin |
schema |
fixed | Name of event schema in PostgreSQL | The schema name is aiops_irb , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-postgresql-admin |
username |
fixed | Name of PostgreSQL event admin user | The username is aiops_irb_admin , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-postgresql-uc |
caCertificate |
x509 | Root CA certificate for PostgreSQL | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-uc |
dbname |
fixed | Name of event database in PostgreSQL | The database name is aiops_irbuc , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-postgresql-uc |
host |
hostname | Service name of PostgreSQL cluster | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-uc |
password |
hex15 | Password for PostgreSQL event runtime user | Change the secret. - aiops-ir-core-usercfg restarts automatically. |
oc set data secret aiops-ir-core-postgresql-uc --from-literal=password=$(openssl rand -hex 15) |
aiops-ir-core-postgresql-uc |
port |
port | Port for PostgreSQL cluster service | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-uc |
schema |
fixed | Name of event schema in PostgreSQL | The schema name is aiops_irbuc , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-postgresql-uc |
username |
fixed | Name of PostgreSQL event runtime user | The username is aiops_irbuc , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-postgresql-uc-admin |
caCertificate |
x509 | Root CA certificate for PostgreSQL | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-uc-admin |
dbname |
fixed | Name of event database in PostgreSQL | The database name is aiops_irbuc , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-postgresql-uc-admin |
host |
hostname | Service name of PostgreSQL cluster | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-uc-admin |
password |
hex15 | Password for PostgreSQL event admin user | Change the secret. No pod restarts are required. | oc set data secret aiops-ir-core-postgresql-uc-admin --from-literal=password=$(openssl rand -hex 15) |
aiops-ir-core-postgresql-uc-admin |
port |
port | Port for PostgreSQL cluster service | This value must be copied from <instance>-edb-secret . |
|
aiops-ir-core-postgresql-uc-admin |
schema |
fixed | Name of event schema in PostgreSQL | The schema name is aiops_irbuc , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-postgresql-uc-admin |
username |
fixed | Name of PostgreSQL event admin user | The username is aiops_irbuc_admin , and must not be changed. It is included for future flexibility. |
|
aiops-ir-core-rba-devops-secret |
password |
hex15 | Basic auth for https://aiops-ir-core-rba-as:3080 and https://aiops-ir-core-rba-rbs:3005 |
Change the secret. - Restart cp4waiops-metricsprocessor .- aiops-ir-core-rba-as and aiops-ir-core-rba-rbs restart automatically. |
oc set data secret aiops-ir-core-rba-devops-secret --from-literal=password=$(openssl rand -hex 15) && oc delete pod -l connector.aiops.ibm.com/name=cp4waiops-metricsprocessor |
aiops-ir-core-rba-devops-secret |
username |
hex15 | Basic auth for https://aiops-ir-core-rba-as:3080 and https://aiops-ir-core-rba-rbs:3005 |
Change the secret. - Restart cp4waiops-metricsprocessor .- aiops-ir-core-rba-as and aiops-ir-core-rba-rbs restart automatically. |
oc set data secret aiops-ir-core-rba-devops-secret --from-literal=username=$(openssl rand -hex 15) && oc delete pod -l connector.aiops.ibm.com/name=cp4waiops-metricsprocessor |
aiops-ir-core-rba-jwt-secret |
secret |
hex15 | Key used to sign runbook JSON Web Tokens | Change the secret. - Restart aiops-akora-ui , aiops-ir-core-rba-as , aiops-ir-core-rba-rbs , connector-orchestrator . |
oc set data secret aiops-ir-core-rba-jwt-secret --from-literal=secret=$(openssl rand -hex 15) && oc delete pod -l app.kubernetes.io/component=aiops-aiops-akora-ui && oc delete pod -l app.kubernetes.io/component=rba-as && oc delete pod -l app.kubernetes.io/component=rba-rbs && oc delete pod -l app=connector-orchestrator |
aiops-ir-core-usercfg-creds |
password | hex15 | Basic auth for https://aiops-ir-core-usercfg:10011 |
Change the secret. aiops-ir-core-ncodl-api and aiops-ir-core-usercfg will restart automatically. |
oc set data secret aiops-ir-core-usercfg-creds --from-literal=password=$(openssl rand --hex 15) |
aiops-ir-core-usercfg-creds |
username | hex15 | Basic auth for https://aiops-ir-core-usercfg:10011 |
Change the secret. aiops-ir-core-ncodl-api and aiops-ir-core-usercfg will restart automatically. |
oc set data secret aiops-ir-core-usercfg-creds --from-literal=username=$(openssl rand --hex 15) |
Where <instance>
is the name of your IBM Cloud Pak for AIOps instance, for example ibm-cp-aiops
.
The Type
for each secret in the table has one of the following entries:
- hex15, hex16, hex32 - 15, 16, or 32-byte number encoded in hexadecimal (30, 32 or 64 hex digits).
- ts - timestamp value that is used as an identifier for another value. The timestamp is not significant and alternative strings can be used. Some restrictions on the characters might exist. ASCII alphanumeric characters are recommended.
- fixed - do not change this value. The value is included in a secret for future flexibility.
- x509 - an X.509 certificate
- hostname - the DNS hostname of a service.
- port - a TCP port number
Secrets that are used by the Issue Resolution Core operator
The following table describes secrets that are owned by another operator but that are used by the Issue Resolution Core operator. The table shows the Issue Resolution Core components that need to be restarted if these secrets are rotated.
Secret | Owner | Purpose | Automatically restarted |
---|---|---|---|
aiops-topology-cassandra-auth-secret |
asm-operator |
Cassandra contact details | aiops-ir-core-archiving , aiops-ir-core-esarchiving |
<instance>-couchdb-secret |
ibm-aiops-orchestrator |
CouchDB contact details | aiops-ir-core-cem-users , aiops-ir-core-rba-as , aiops-ir-core-rba-rbs |
<instance>-es-admin-user-connection-secret |
ibm-aiops-orchestrator |
Elasticsearch contact details | aiops-ir-core-datarouting , aiops-ir-core-ncodl-api |
<instance>-kafka-secret |
ibm-aiops-orchestrator |
Kafka contact details | aiops-ir-core-api , aiops-ir-core-archiving , aiops-ir-core-datarouting , aiops-ir-core-esarchiving , aiops-ir-core-ncodl-if , aiops-ir-core-ncodl-jobmgr , aiops-ir-core-ncodl-std ,
aiops-ir-core-rba-rbs |
<instance>-redis-secret |
ibm-aiops-orchestrator |
Redis contact details | aiops-ir-core-cem-users , aiops-ir-core-esarchiving , aiops-ir-core-rba-rbs |
internal-nginx-svc-tls |
ibm-zen-operator |
Trusted CA for Zen | aiops-ir-core-cem-users |
internal-tls |
ibm-zen-operator |
Trusted CA for Zen | aiops-ir-core-cem-users |
zen-service-broker-secret |
ibm-zen-operator |
Token for accessing Zen API | aiops-ir-core-cem-users |
Where <instance>
is the name of your IBM Cloud Pak for AIOps instance, for example ibm-cp-aiops
.
Key rotation
Warning: The secret aiops-ir-core-model-secret
contains an encryption key and a HMAC key that is used to protect sensitive data that is stored in CouchDB. Care must be taken when rotating these keys since data
that is protected with previous keys cannot be recovered if the keys are lost.
Replacement values for keyvalue
must be 16 bytes and in hexadecimal format (32 digits). Replacement values for hkeyvalue
must be 32 bytes and in hexadecimal format (64 digits).
Each key has an associated identifier. Encrypted data is stored along with the identifier of the key that was used to protect it. The identifier must be changed when and only when the key is changed. When the operator creates a new key, it
uses the current time as the identifier (for example 2022-06-13T10:58:10Z
). This is a convention but other string formats may be used. If another format is used, there might be some restrictions on the characters that can be
used. ASCII alphanumeric characters are recommended.
When rotating keys, all old (key, identifier) pairs must be stored in the oldhkeys
and oldkeys
properties so that data that is protected with the old keys can be used. The current key is always used when data is stored
or modified. The following examples show the use of the old keys' properties.
-
Secret created by the operator.
{ "hkeyname": "2022-06-13T10:58:10Z", "hkeyvalue": "2905c99e41fd6594de9e8632382da185eec94cea545cbd96082552274a454d2b", "keyname": "2022-06-13T10:58:10Z", "keyvalue": "5cc068f45904c0ff998213941684790e" }
-
Secret after the first rotation.
The identifiers
myfirsthkey
andmyfirstkey
were used. Time based could have been used.{ "hkeyname": "myfirsthkey", "hkeyvalue": "7539eb64abdae09a500659ca0593140babd00046b175c3a83e3ed28f8d79daca", "oldhkeys": "{\"keys\":[{\"name\":\"2022-06-13T10:58:10Z\",\"value\":\"2905c99e41fd6594de9e8632382da185eec94cea545cbd96082552274a454d2b\"}]}", "keyname": "myfirstkey", "keyvalue": "211812c9750778c0175bca4a11cc1e3b", "oldkeys": "{\"keys\":[{\"name\":\"2022-06-13T10:58:10Z\",\"value\":\"5cc068f45904c0ff998213941684790e\"}]}" }
-
Secret after the second rotation.
The identifiers
mysecondhkey
andmysecondkey
were used. Time based could have been used.{ "hkeyname": "mysecondhkey", "hkeyvalue": "07a290a68d6ff7eb45b7febbfd8c5079da5ee40c068f2e1bb87293c22c39b712", "oldhkeys": "{\"keys\":[{\"name\":\"2022-06-13T10:58:10Z\",\"value\":\"2905c99e41fd6594de9e8632382da185eec94cea545cbd96082552274a454d2b\"},{\"name\":\"myfirsthkey\",\"value\":\"7539eb64abdae09a500659ca0593140babd00046b175c3a83e3ed28f8d79daca\"}]}", "keyname": "mysecondkey", "keyvalue": "f01b36adba59c50841a1444cee8eb09e", "oldkeys": "{\"keys\":[{\"name\":\"2022-06-13T10:58:10Z\",\"value\":\"5cc068f45904c0ff998213941684790e\"},{\"name\":\"myfirstkey\",\"value\":\"211812c9750778c0175bca4a11cc1e3b\"}]}" }
If the
oldhkeys
andoldkeys
properties exist, they must hold the JSON representation of an object with a single property (the name does not matter, this example usedkeys
) that has an array of objects. Each of the inner objects has aname
and avalue
property holding the identifier and value of a previous key.oc delete pod -l app.kubernetes.io/component=rba-as && oc delete pod -l app.kubernetes.io/component=rba-rbs
ObjectServer passwords
Use the following steps to change the ObjectServer password. Ensure that you retain a copy of the original password until these steps are complete.
-
Run the following command to obtain the current passwords from the
aiops-ir-core-omni-secret
secret.For example:
oc get secret aiops-ir-core-omni-secret -o json | jq -r '.data.OMNIBUS_PROBE_PASSWORD|@base64d'` oc get secret aiops-ir-core-omni-secret -o json | jq -r '.data.OMNIBUS_ROOT_PASSWORD|@base64d'`
-
Open a session on the primary ObjectServer pod.
oc rsh aiops-ir-core-ncoprimary-0
-
Log in to the OMNIbus query tool
nco_sql
, and supply the root password when prompted.$NCHOME/omnibus/bin/nco_sql -u root -s AGG_P_C
-
If you want to change the root password, enter the following command.
alter user 'root' set password '<NEWPASSWORD>'; go
Where
<NEWPASSWORD>
is the password that you want to set. -
If you also want to change the probe password, enter the following command.
alter user 'probe' set password '<PROBE_PASSWORD>'; go
Where
<PROBE_PASSWORD>
is the password that you want to set. -
Test the new root password by entering
quit
to leave the SQL prompt, and then log in again and supply the new root password when prompted.$NCHOME/omnibus/bin/nco_sql -u root -s AGG_P_C
-
Exit the
oc rsh
session. -
Wait for 60 seconds to ensure that the password updates have been transferred to the backup ObjectServer.
-
Remote shell into the backup ObjectServer, and test the new root password.
oc rsh -c objserv aiops-ir-core-ncobackup-0`
-
Log in to the OMNIbus query tool
nco_sql
, and supply the root password when prompted.$NCHOME/omnibus/bin/nco_sql -u root -s AGG_B_C
-
Exit the
oc rsh
session. -
Update the
aiops-ir-core-omni-secret
with one or more new passwords.For example,
oc set data secret aiops-ir-core-omni-secret --from-literal=OMNIBUS_PROBE_PASSWORD=<PROBE_PASSWORD> oc set data secret aiops-ir-core-omni-secret --from-literal=OMNIBUS_ROOT_PASSWORD=<NEWPASSWORD>
Where
<NEWPASSWORD>
is the new root password<PROBE_PASSWORD>
is the new probe password
-
If you changed the root password, run the following command to restart
aiops-ir-core-ncodl-if
oc delete pod -l app.kubernetes.io/component=ncodl-if