Deploying Sentinel LDK Cloud Portal

This section describes how to deploy Sentinel LDK Cloud Portal on a server (referred to in this section as the cloud portal server).

Sentinel LDK Cloud Portal is deployed as a Docker image on the cloud portal server.

This section is only relevant for vendors who are working with Sentinel LDK-EMS and who want to use Sentinel LDK Cloud Portal to manage cloud licensing.

In this section:

>High-Level Architecture

>Requirements for Deploying Sentinel LDK Cloud Portal

>Deployment Via Docker Compose

>Deployment in Google Cloud Platform

High-Level Architecture

The following diagram provides a high-level overview of the architecture for Sentinel LDK Cloud Portal.

Requirements for Deploying Sentinel LDK Cloud Portal

The following are the requirements for Sentinel LDK Cloud Portal:

>Sentinel LDK license server (referred to as the license server) must exist.

Sentinel LDK Run-time Environment 10.11 or later must be installed on the license server. Thales recommends that you deploy the Sentinel LDK Run-time Environment Docker image from Docker Hub (https://hub.docker.com/r/thalesgroupsm/sentinel_ldk_rte).

The license server and the cloud portal server must be deployed in the same environment (for example, both in GCP or both in AWS).

>Sentinel LDK-EMS server 10.0 or later (hosted by the vendor or by Thales)

>MySQL database server (version 8.0 or later)

>You must be working with Docker version 20 or later.

NOTE   The CloudPortal service is released as a Docker image. HTTPS support should be configured in the proxy server or the load balancer.

Before Setting Up the Cloud Portal Server

1.Install MySQL on a machine that will serve as the database server for the cloud portal database, or you can use cloud MySQL directly.

Note the following:

If the database user has full access to the database, the database and tables will be created by Sentinel Cloud Portal automatically.

If the database user only has read/write rights to update the data in tables, but no right to create the database and tables, the deployment user should create the database and tables for Sentinel LDK Cloud Portal manually. Use the SQL script file to perform initialization.

2.Configure the cloud portal server.

On the cloud portal server, configure the parameters described below.

Environment Variable Notes
CPS_BACKEND_DB_HOST The host machine where MySQL is located.
CPS_BACKEND_DB_USER User name for the MySQL account to use to connect to the database.
CPS_BACKEND_DB_PASSWORD Password for the above MySQL account.
CPS_BACKEND_DB_NAME Name of the MySQL database to create.
CPS_SWAGGER_ENABLED

Whether the Sentinel LDK Cloud Portal REST API should be enabled. Possible values are:

>true

>false (Default)

LMS_HOST The host machine where LMS is located.
LMS_PASSWORD

Password for the above LMS instance.

Note: By default, there is no user name for the LMS user account. Sentinel LDK Cloud Portal does not support the use of an LMS user account for which a user name has been defined.

LMS_PORT LMS port for the above LMS instance.

3.Deploy the Docker image for Sentinel LDK Cloud Portal.

a.You can get the latest docker imager from Docker Hub: https://hub.docker.com/u/thalesgroupsm/sentinel_ldk_cloudportal

b. Use the following command on the cloud portal server:

docker run thalesgroupsm/sentinel_ldk_cloudportal:10.0.1

Deployment Via Docker Compose

This procedure demonstrates how you can use Docker Compose to set up the cloud portal server. Note that the following docker-compose example already contains an integrated cloud licensing server and MySQL server.

1.Download your vendor library using Sentinel LDK Master Wizard.

Copy your vendor library to the same folder that contains docker-compose.yml.

For example, for vendor ID 37517, copy haspvlib_x86_64_37517.so to the folder.

2.Set up the docker-compose.yml file with contents similar to the following:

version: '3.3'

services:
  cps_lms_db:
    image: mysql:8.0
    container_name: cps_lms_db
    command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]
    volumes:
      - lms_db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root!
      MYSQL_DATABASE: lms 
      MYSQL_USER: lms
      MYSQL_PASSWORD: Password1!
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
      interval: 10s
      retries: 3

  cps_backend_db:
    container_name: cps_backend_db 
    image: mysql:8.0
    volumes:
      - cps_backend_db_data:/var/lib/mysql 
    restart: always
    command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_DATABASE: cloudportaldb
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
      interval: 10s
      retries: 3

  cps_lms:
    depends_on:
      - cps_lms_db
    container_name: cps_lms
    image: thalesgroupsm/sentinel_ldk_rte:10.11
    restart: always
    volumes:
      - type: bind
        source: ./hasplm.ini
        target: /etc/hasplm/hasplm.ini
      - type: bind
        source: ./haspvlib_x86_64_37517.so
        target: /var/hasplm/haspvlib_x86_64_37517.so
    environment:
      HASPLM_DATABASE: mysql
      HASPLM_DATABASE_MYSQL_HOST: cps_lms_db 
      HASPLM_DATABASE_MYSQL_USER: root
      HASPLM_DATABASE_MYSQL_PASSWORD: root!
      HASPLM_DATABASE_MYSQL_PORT: 3306
    healthcheck:
      test: ["CMD", "curl", "-X GET", "http://127.0.0.1:1947/sentinel/ldk/v1/healthz"] 
      interval: 50s
      timeout: 10s
      retries: 3
    hostname: cps_lms
    ports:
      - "80:1947"

  cps_backend:
    container_name: cps_backend
    depends_on:
      - cps_lms
      - cps_backend_db
      - cps_lms_db
    image: thalesgroupsm/sentinel_ldk_cloudportal:10.0.1
    ports:
      - "8080:8181"
    restart: always
    environment:
      CPS_BACKEND_DB_HOST: cps_backend_db
      CPS_BACKEND_DB_USER: root 
      CPS_BACKEND_DB_PASSWORD: admin
      CPS_BACKEND_DB_NAME: cloudportaldb
      CPS_SWAGGER_ENABLED: true
      LMS_HOST: cps_lms
      LMS_PASSWORD: admin:Aa123456
      LMS_PORT: 80
    healthcheck:
      test: ["CMD", "curl", "-X GET", "http://127.0.0.1:8181/cps/api/v1/healthz"] 
      interval: 50s
      timeout: 10s
      retries: 3

volumes:
  lms_db_data: {}
  cps_backend_db_data: {}

3.The password for logging in to Sentinel LDK Cloud Portal as the vendor administrator is contained in the hasplm.ini file for Sentinel LDK Cloud Portal. This file is located in the same folder as docker-compose.yml.

The default password Aa123456 is encoded in the adminpassword parameter as seen below:

[SERVER]
adminpassword = 4cn/eL9O60ebqMXfji8OOA==:fNwzohDT4A83ZFm2tVupnw==
listen_also = 1
requestlog = 1
loglocal = 1
logremote = 1
logadmin = 1
errorlog = 1
rotatelogs = 1
pidfile = 1
passacc = 1 
accessfromremote = secure
cloud_portal = 1
accremote = 1
adminremote = 1

[REMOTE]
broadcastsearch = 0

The password should be changed for security reasons as follows:

a.Start Sentinel Admin Control Center (ACC) on a local machine.

b.Change the ACC administrator password to the password that you want for Sentinel LDK Cloud Portal.

c.Open the configuration file (hasplm.ini) for Admin License Manager on the same machine. The pathname of the configuration file is as follows:

For Windows x64: %CommonProgramFiles(x86)%\Aladdin Shared\HASP\hasplm.ini

For Windows x86: %CommonProgramFiles%\Aladdin Shared\HASP\hasplm.ini

d.In hasplm.ini file for the Admin License Manager, copy the line that contains adminpassword. This line contains the encoded form of your password.

e.Paste the line into the hasplm.ini file for Sentinel LDK Cloud Portal, over the existing adminpassword line.

f.In docker-compose.yml, change the following line to contain the new password:

LMS_PASSWORD: admin:Aa123456

4.Run docker compose up.

5.Open the cloud portal web portal by cloud portal service exposed IP:

http://<IP_exposed>:8080

6.Open the LMS web portal by LMS service exposed IP:

(If you want to enable https, you need to configure LMS https first.)

http://<IP_exposed>

To log in to the Sentinel Cloud Vendor Portal, use:

http://<IP_exposed>:8080/admin

To log in to the Sentinel Cloud Customer Portal, use:

http://<IP_exposed>:8080/customer

To view Swagger (if you have enabled Swagger), use:

http://<IP_exposed>:8080/doc

7.Configure Sentinel Admin Control Center on the license server machine to issue a warning against using Admin Control Center to manage client identities. The warning is activated in Sentinel Admin Control Center once Sentinel LDK Cloud Portal has been used at least once to create client identities. For details, see the cloud-portal parameter.

Do either of the following on the license server machine:

Add the following configuration parameter in hasplm.ini:

cloud_portal=1

Set the following environment variable:

HASPLM_CLOUD_PORTAL=1

Deployment in Google Cloud Platform

This section shows how to deploy the cloud portal service to Kubernetes on Google Cloud Platform (GCP).

Before You Begin

>You must have GCP console to use GCP to access your Kubernetes cluster.

>Create a cloud database instance for MySQL 8 on GCP, using the user account created for Cloud Portal database.

Deploying the Docker Image for Sentinel LDK Cloud Portal

NOTE   The steps in this section describe how to deploy Sentinel LDK Cloud Portal docker image on GCP. If you want to expose the Cloud Portal service directly on a cloud platform, consider security enhancements to protect the service deployed on Kubernetes according to your security requirements.

1.Create the Cloud Portal deployment YAML file. The YAML file below shows how to deploy the Cloud Portal docker image, how to implement the LivenessProbe for Cloud Portal service, and the ENV to set the database connection .

Note that the YAML file contains the definitions of the required environment variables (described in Before Setting Up the Cloud Portal Server). Modify these definitions as required.

cloudportal_deployment.yaml

apiVersion: apps/v1 
kind: Deployment 
metadata:
  name: cloudportal-backend 
  labels:
    name: cloudportal-backend
spec:
  replicas: 2 
  selector:
    matchLabels:
      app: cloudportal-backend 
  template:  
    metadata: 
      labels:
        app: cloudportal-backend 
    spec:
      containers:
      - name: cloudportal-backend
        image: thalesgroupsm/sentinel_ldk_cloud_portal:10.0.1
        #should be set "Always" when deployed with kubernetes
        imagePullPolicy: Always
        livenessProbe: 
          httpGet:
            path: /cps/api/v1/healthz 
            port: 8181
          initialDelaySeconds: 30
          timeoutSeconds: 30
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 3 
        resource:
          limits:
            memory: 2Gi
            cpu: 1
          requests:
            memory: 2Gi
            cpu: 0.2
        ports:
          - containerPort: 8181 
        env:
          - name: CPS_BACKEND_DB_HOST
            value: mysql	#host name of the database
          - name: CPS_BACKEND_DB_USER
            value: root	#user name of the database
          - name: CPS_BACKEND_DB_PASSWORD
            value: root!	#password of db user
          - name: CPS_BACKEND_DB_NAME
            value: cloudportaldb	#database name of database
          - name: LMS_HOST
            value: LMSURL	# LMS HOST URL
          - name: LMS_PASSWORD
            value: password	# Password for LMS webportal
          - name: LMS_PORT
            value: "LMS PORT"	# Service port for LMS instance 
      hostname: cloudportalbackend

2.Create the Cloud Portal service YAML file. You must decide the way to expose the Cloud Portal service to external. The cloudportal_svc.yaml file below provides an example of how to expose the Cloud Portal service in LoadBalancer.

cloudportal_svc.yaml

apiVersion: v1 
kind: Service 
metadata:
  name: cloudportal-backend 
  labels:
    app: cloudportal-backend
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8181
    protocol: TCP
  sessionAffinity: ClientIP
  selector:
    app: cloudportal-backend

3.Deploy the Cloud Portal service by running:

kubectl apply -f cloudportal_deployment.yaml -f cloudportal_svc.yaml

Sentinel LDK Cloud Portal can be accessed with the URL: http://<exposed ip by loadbancer>:80

Configuration Updates After Deployment

1.The default username/password of the vendor administrator in Sentinel LDK Cloud Portal is admin/admin. Change the password immediately.

2.After logging in to Sentinel LDK Cloud Portal, configure Outgoing Email Settings.

3.Configure Sentinel LDK-EMS Produce and Push and related parameters as described in the Sentinel LDK-EMS Configuration Guide to connect to the Sentinel LDK Cloud Portal service.