Using custom keys and certificates for deploying IBM Telco Network Cloud Manager - Orchestration
The resources of IBM® Telco Network Cloud Manager - Orchestration are protected by an authentication layer in place on the gateway, that is, Ishtar. To gain access to any of these protected resources, an authorization process takes place. As a minimum, this authorization requires providing some valid client credentials (client ID and secret) which are normally deemed as sufficient security.
- By default, the Vault service is used as a certificate authority for generating and managing certificates and keys in IBM Telco Network Cloud Manager - Orchestration.
- During initialization of the Vault service, a root and intermediate certificate authority are
set up and
root.cerandintermediate.cercertificate files are generated and stored in a Kubernetes secret namedalm-certs. - The job
alm-configuratorgenerates internal signed certificates for all services and adds them to Java™ keystore file (keystore.p12), which is available in the Kubernetes secretalm-keystore. - The Nimrod(User Interface) and Ishtar(API Gateway) components have a security layer that is enabled and which protects their APIs.
- Ishtar acts as an Oauth2 provider and can provide tokens (JWT format) which enable authorization against the protected APIs. To authenticate, it is necessary to provide a secret in a token request to Ishtar for the Ishtar clientId (Admin).
- JWT access tokens that are given out by Ishtar contain a list of roles that the user has. The token is signed by using the jwtSigningKey to avoid tampering, which is a private key.
- Nimrod requires its own client (NimrodClient) to communicate with backend APIs through Ishtar. When the user logs in through the UI, the username and password (from LDAP) are combined with Nimrod's client credentials to make a token request against Ishtar. A token is then supplied, which the UI can use to make backend calls until its expiry.
- Doki also requires its own client (DokiClient). This is so that it can provide access control against the backend calls, which are made while running behavior scenarios.
- Generally, the Admin clientId is used and it enables access to APIs in a protected way.
- client-credentials-bootstrap.yml is a yaml file that holds details of each
of the clientCredentials and is made available to Ishtar through a Kubernetes secret and passed at
installation time. The default name for this secret is
alm-credentials-default.
These specific keys and certificates are provided in the form of Kubernetes secrets and made
available to the system. By default, the secrets alm-certs and
alm-keystore are automatically generated during the deployment.
Using custom keys and certificates
It is also possible to supply certificates from an existing certificate authority to be used with IBM Telco Network Cloud Manager - Orchestration.
Two options are available for using custom certificates:
- Use an external Root certificate authority. In this case, only an intermediate CA is set up in
Vault. The internal service certificates are generated in IBM Telco Network Cloud Manager -
Orchestration by the
alm-configuratorjob at installation time. For more information, see Option 1: Using an existing Root Certificate Authority - Generate internal certificates. - No root or intermediate certificate authority is set up in Vault and all internal certificates for the services must be supplied. For more information, see Option 2: Using an existing Root Certificate Authority - No certificates generated.
In either case, you need to change the vault.certAuthority section in the
tnco cr YAML configuration file you are using to create the instance. Sample IBM Telco Network Cloud Manager -
Orchestration custom resources are available in the
cr directory of the package. The following list shows the default values for Vault.
Some of these values are referenced in the following procedures.
vault:
certAuthority:
setupRootCA: true
generateCertificates: true
rootCAName: "TNCO-Internal-Root-CA"
rootLeaseTime: "87600h"
intermediateCAName: "TNCO-Internal-Intermediate-CA"
intermediateLeaseTime: "43800h"
certTTL: "43800h" # used for internal and external roles
extTopLevelDomain: "alm"
externalCASecret: "external-ca"
Option 1: Using an existing Root Certificate Authority - Generate internal certificates
Use an external Root Certificate Authority. In this case, only an intermediate certificate authority is set up in Vault. Certificates are generated for all services.
Ensure to set vault.certAuthority.setupRootCA to false in the
Custom Resource Definition file for the IBM Telco Network Cloud Manager -
Orchestration operator installation.
To support this option, the following files must be provided at installation time in a
Kubernetes secret called external-ca (name is configurable in cr by:
vault.certAuthority.externalCASecret):
| File | Description |
|---|---|
root.cer |
Public certificate for the external root CA |
intermediate.cer |
Signed (by root CA) certificate for intermediate CA |
intermediate.key |
Private key for intermediate CA |
To add files to a secret, run:
oc create secret generic external-ca \
--from-file=root.cer \
--from-file=intermediate.cer \
--from-file=intermediate.key
Follow the installation procedure as normal, for more information, see Installing IBM Telco Network Cloud Manager - Orchestration.
Option 2: Using an existing Root Certificate Authority - No certificates generated
In this case, all internal certificates for all services must be supplied. No Root or Intermediate certificate authority is set up in the vault service.
Ensure to set the following property values to false in the Custom Resource
Definition file for the IBM Telco Network Cloud Manager -
Orchestration operator
installation:
vault.certAuthority.setupRootCAvault.certAuthority.generateCertificates
To support this option, the following file must be provided at installation time in a Kubernetes
secret called external-ca (name is configurable in cr by:
vault.certAuthority.externalCASecret):
| File | Description |
|---|---|
root.cer |
Public certificate for the external root CA |
To add these to a secret, run:
oc create secret generic external-ca \
--from-file=root.cer
In addition to the root certificate, a Java keystore that
is named keystore.p12 must be created containing certificates for all of the
internal services. This keystore along with its password must be stored in the Kubernetes secret
alm-keystore.
An example script is provided in the TNC-O archive package:
scripts/certs/createSecrets.sh. This example script uses openssl
and keytool and can be used to generate the certificates and secret
alm-keystore. You are also free to use any other tool.
Certificates must be generated and placed in the keystore for the following services with the
same corresponding alias name: apollo brent conductor daytona doki galileo ishtar nimrod
relay talledega watchtower.
If the keystore.p12 file is prepared elsewhere without the script, then to
create up the alm-keystore secret, run:
oc create secret generic alm-keystore \
--from-file keystore.p12 \
--from-literal=keystorePassword=<keystord_password>
Follow the installation procedure as normal, for more information, see Installing IBM Telco Network Cloud Manager - Orchestration.