TimesTenレプリケーションおよびTimesTen Client/Serverでは、TimesTenインスタンス間の通信にTransport Layer Security (TLS)の使用をサポートしています。
この章では、Kubernetes環境でTLSを構成して使用する際のプロセスについて説明します。これにより、レプリケートされたTimesTenデータベース間の暗号化されたデータ転送が可能になります。また、Client/Server環境では、TimesTenクライアント・アプリケーションとTimesTenサーバー(TimesTenデータベース)間のデータ転送も暗号化できます。
内容は次のとおりです。
デフォルトでは、TimesTenレプリケーションは、TimesTenデータベース間で暗号化されていないデータを転送します。また、TimesTen Client/Server環境では、デフォルトで、データはアプリケーションとTimesTenデータベース間で暗号化されずに転送されます。
レプリケーションおよびClient/Serverの暗号化は、Transport Layer Security (TLS)を使用することで有効化できます。TimesTenには、TLS用の自己署名証明書を生成するためのttCreateCerts
ユーティリティがあります。TLS証明書とウォレットの詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のTimesTenでの証明書の使用に関する項を参照してください。
ノート: ttCertsCreate ユーティリティを使用するには、JavaがLinux開発ホストにインストールされている必要があります。このユーティリティは、JRE_HOME 、JAVA_HOME およびPATH の設定に従ってJavaを検索します。 |
ttCreateCerts
ユーティリティは、TimesTenインスタンスの/bin
ディレクトリ内にあります。このユーティリティにより、3つのウォレットrootWallet
、clientWallet
およびserverWallet
が作成されます。
Linux開発ホストから、次のステップを実行して証明書を作成します。
インストール環境のbin
ディレクトリに移動し、ttInstanceCreate
ユーティリティを対話形式で実行してインスタンスを作成します。installation_dir
ディレクトリは、TimesTenディストリビューションの解凍時に作成されたものです。TimesTenディストリビューションの解凍手順の詳細は、「TimesTenおよびTimesTenオペレータのダウンロード」を参照してください。
ttCreateCerts
ユーティリティはTimesTenインスタンスから実行されるため、TimesTenインスタンスを作成する必要があります。ttInstanceCreate
ユーティリティの詳細は、Oracle TimesTen In-Memory DatabaseリファレンスのttInstanceCreateを参照してください。
インスタンス・ディレクトリ(この例では/scratch/ttuser/instance_dir
)を作成し、パラメータの-name
と-location
を指定してttInstanceCreate
ユーティリティを実行します。この例では、インスタンスの名前としてinstance1
を使用し、インスタンスの場所として/scratch/ttuser/instance_dir
を使用します。
% mkdir /scratch/ttuser/instance_dir %installation_dir
/tt18.1.4.11.0/bin
/ttInstanceCreate -name instance1 -location /scratch/ttuser/instance_dir Creating instance in /scratch/ttuser/instance_dir/instance1 ... INFO: Mapping files from the installation to /scratch/ttuser/ instance_dir/instance1/install NOTE: The TimesTen daemon startup/shutdown scripts have not been installed. The startup script is located here : '/scratch/ttuser/instance_dir/instance1/startup/tt_instance1' Run the 'setuproot' script : /scratch/ttuser/instance_dir/instance1/bin/setuproot -install This will move the TimesTen startup script into its appropriate location. The 18.1 Release Notes are located here : 'installation_dir
/tt18.1.4.11.0/README.html'
TIMESTEN_HOME
環境変数を設定します。この変数は、ttCertsCreate
ユーティリティの実行前に設定する必要があります。インスタンスのbin
ディレクトリから、ttenv.csh
またはttenv.s
hスクリプトを実行します。
この例では、bash
Bourneタイプのシェルを使用します。(出力のすべては示していません)。
% . /scratch/ttuser/instance_dir/instance1/bin/ttenv.sh LD_LIBRARY_PATH set to ... PATH set to ... CLASSPATH set to TIMESTEN_HOME set to /scratch/ttuser/instance_dir/instance1
インスタンスのbin
ディレクトリから、ttCreateCerts
ユーティリティを実行します。この例では、-verbose
修飾子を使用することで詳細な出力を表示します。ttCreateCerts
ユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のTimesTen用の証明書の生成に関する項を参照してください。
デフォルトのウォレット・ディレクトリは、timesten_home
/conf
です。このtimesten_home
は、TimesTenインスタンスのホーム・ディレクトリです。この例では、このデフォルトのウォレット・ディレクトリを使用します。
% /scratch/ttuser/instance_dir/instance1/bin/ttCreateCerts -verbose Requested Certificates: User Certificates: Subject: CN=server1,C=US Trusted Certificates: Subject: CN=ecRoot,C=US Requested Certificates: User Certificates: Subject: CN=client1,C=US Trusted Certificates: Subject: CN=ecRoot,C=US ttCreateCerts : certificates created in /scratch/ttuser/instance_dir/ instance1/conf
ウォレットの場所と証明書(太字で表示)を確認します。serverWallet
ディレクトリ内のcwallet.sso
は、replicationWallet
メタデータ・ファイルとしてレプリケーション用およびClient/Server環境のサーバー用に指定するファイルです。clientWallet
ディレクトリのcwallet.sso
は、Client/Server環境のクライアント用に使用するファイルです。replicationWallet
およびclientWallet
メタデータ・ファイルの詳細は、「サポートされているメタデータ・ファイル」を参照してください。これらのメタデータ・ファイルの使用方法の詳細は、「レプリケーション用のTLSの構成」および「Client/Server用のTLSの構成」も参照してください。
(該当するcwallet.sso
ファイルについても、太字で表示しています)。
% ls $TIMESTEN_HOME/conf client1.cert root.cert server1.cert snmp.ini sys.ttconnect.ini clientWallet rootWallet serverWallet sys.odbc.ini timesten.conf % ls $TIMESTEN_HOME/conf/*Wallet* /scratch/ttuser/instance_dir/instance1/conf/clientWallet: cwallet.sso cwallet.sso.lck /scratch/ttuser/instance_dir/instance1/conf/rootWallet: cwallet.sso cwallet.sso.lck /scratch/ttuser/instance_dir/instance1/conf/serverWallet: cwallet.sso cwallet.sso.lck
レプリケーションとTimesTen Client/Serverの両方でTLSに使用できる証明書の作成が完了しました。この時点で、レプリケーションとClient/Serverのどちらかに、またはレプリケーションとClient/Serverの両方に、TLSを構成して使用する準備が整いました。
レプリケーション用のTLSを構成すると、レプリケートされたTimesTenデータベース間でセキュアなネットワーク通信を確保できます。詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のTimesTenレプリケーションのTransport Layer Securityに関する項を参照してください。
次の項では、レプリケーション用のTLSを構成して使用する方法について説明します。
レプリケーションのTLSサポートには、/ttconfig/replicationWallet
メタデータ・ファイルが必要です。(/ttconfig
ディレクトリは、TimesTenデータベースのコンテナ内にあります)。このファイルには、TLS証明書の作成時に生成されたcwallet.sso
ファイル(Oracleウォレット)が含まれている必要があります。このファイルは、/scratch/ttuser/instance_dir/instance1/conf/serverWallet
ディレクトリに配置したものです。該当する証明書の作成方法は、「レプリケーションおよびClient/Server用のTLS証明書の作成」を参照してください。このウォレットには、TimesTenデータベースのアクティブ・スタンバイ・ペア間でTLS暗号化を構成するためにTimesTenレプリケーションで使用される資格証明が含まれています。
/ttconfig/replicationWallet
メタデータ・ファイルに加えて、その他のサポートされているメタデータ・ファイルも使用できます。サポートされるメタデータ・ファイルの詳細は、「サポートされるメタデータ・ファイル」を参照してください。
これらのメタデータ・ファイルは、Kubernetesの1つ以上の機能(たとえば、Kubernetes Secret、ConfigMapまたは初期化コンテナ)に含めることができます。これにより、メタデータ・ファイルがTimesTenコンテナの/ttconfig
ディレクトリに確実に移入されます。この/ttconfig
ディレクトリにメタデータ・ファイルを配置する方法についての要件はありません。詳細は、「/ttconfigディレクトリの移入」を参照してください。
次の各項の例では、replicationWallet
メタデータ・ファイルをKubernetes Secretに含める方法を示します。また、db.ini
、adminUser
およびschema.sql
メタデータ・ファイルを作成して、それらのメタデータ・ファイルをConfigMapに含めます。
この項では、repl-tls
Kubernetes Secretを作成します。repl-tls
Secretには、replicationWallet
メタデータ・ファイルを格納します。
Linux開発ホストで、次のことを実行します。
任意のディレクトリから、空のサブディレクトリを作成します。この例では、serverWallet
サブディレクトリを作成します。(今後、この例では、このディレクトリを表す場合にserverWallet
ディレクトリを使用します)。
% mkdir -p serverWallet
前の手順で作成したserverWallet
ディレクトリに、/scratch/ttuser/instance_dir/instance1/conf/serverWallet/cwallet.sso
ファイルをコピーします。このファイルは、ttCreateCerts
ユーティリティを使用してTLS証明書を作成したときに生成されたものです。詳細は、「レプリケーションおよびClient/Server用のTLS証明書の作成」を参照してください。
% cp /scratch/ttuser/instance_dir/instance1/conf/serverWallet/cwallet.sso serverWallet/cwallet.sso
Kubernetes Secretの作成
この例では次のとおりです。
Secretの名前はrepl-tls
です。repl-tls
は適宜の名前に置き換えます(repl-tls
は太字で表示しています)。
TLSレプリケーション用に必要なメタデータ・ファイルの名前は、replicationWallet
(太字で表示)です。
ウォレット・ディレクトリの場所は、serverWallet
です(この例では、太字で表示しています)。別のディレクトリを使用する場合、serverWallet
は使用するディレクトリの名前に置き換えます。
Oracleウォレットの名前は、cwallet.sso
です(太字で表示)。
kubectl
create
コマンドを使用してシークレットを作成します。
% kubectl create secret generic repl-tls --from-file=replicationWallet=serverWallet/cwallet.sso secret/repl-tls created
repl-tls
Kubernetes Secretの作成とデプロイが完了しました。この後、replicationWallet/cwallet.sso
ファイルは、TimesTenコンテナの/ttconfig
ディレクトリから使用できるようにします。また、ファイルはTimesTenコンテナの/tt/home/oracle/replicationWallet
ディレクトリから使用できるようにします。
この項では、repl-tls
ConfigMapを作成します。このConfigMapには、db.ini
、adminUser
およびschema.sql
メタデータ・ファイルが含まれます。
こうしたメタデータ・ファイルはTLSには不要ですが、TimesTenデータベースの追加属性として含まれています。構成ファイルとConfigMap機能の詳細は、「構成メタデータとKubernetes機能の理解」を参照してください。
Linux開発ホストで、次のことを実行します。
選択したディレクトリから、メタデータ・ファイル用に空のサブディレクトリを作成します。この例では、cm_replTLS
サブディレクトリを作成します。(今後、この例では、このディレクトリを表す場合にcm_replTLS
ディレクトリを使用します)。
% mkdir -p cm_replTLS
ConfigMapディレクトリに移動します。
% cd cm_replTLS
このConfigMapディレクトリ(この例ではcm_replTLS
)に、db.ini
ファイルを作成します。このdb.ini
ファイルで、PermSize
接続属性とDatabaseCharacterSet
接続属性を定義します。
vi db.ini
PermSize=200 DatabaseCharacterSet=AL32UTF8
このConfigMapディレクトリ(この例ではcm_replTLS
)に、adminUser
ファイルを作成します。このadminUser
ファイルで、tiger
パスワードを使用してscott
ユーザーを作成します。
vi adminUser
scott/tiger
このConfigMapディレクトリ(この例ではcm_replTLS
)に、schema.sql
ファイルを作成します。このschema.sql
ファイルで、scott
ユーザーのs
順序とemp
表を定義します。オペレータはこれらのオブジェクト定義でデータベースを自動的に初期化します。
vi schema.sql
create sequence scott.s; create table scott.emp ( id number not null primary key, name char(32) );
ConfigMapを作成します。cm_replTLS
ディレクトリ内のファイルは、ConfigMapに含めておくことで、TimesTenコンテナで使用できるようにします。
この例では次のとおりです。
ConfigMapの名前はrepl-tls
です。repl-tls
は適宜の名前に置き換えます(この例では、repl-tls
は太字で表示しています)。
この例では、ConfigMapにコピーするファイルが存在しているディレクトリとしてcm_replTLS
を使用しています。別のディレクトリを使用する場合、cm_replTLS
は目的のディレクトリの名前に置き換えます(この例では、cm_replTLS
は太字で表示しています)。
kubectl
create
コマンドを使用して、ConfigMapを作成します。
% kubectl create configmap repl-tls --from-file=cm_replTLS configmap/repl-tls created
kubectl
describe
コマンドを使用して、ConfigMap (この例ではrepl-tls
)の内容を確認します。
% kubectl describe configmap repl-tls Name: repl-tls Namespace: mynamespace Labels: <none> Annotations: <none> Data ==== adminUser: ---- scott/tiger db.ini: ---- PermSize=200 DatabaseCharacterSet=AL32UTF8 schema.sql: ---- create sequence scott.s; create table scott.emp (id number not null primary key, name char (32)); Events: <none>
repl-tls
ConfigMapの作成とデプロイが完了しました。
この項では、TimesTenClassicオブジェクトを作成します。TimesTenClassicオブジェクトの詳細は、TimesTenClassicオブジェクトの定義および作成およびTimesTenClassicオブジェクト・タイプを参照してください。
次のステップを実行します。
空のYAMLファイルを作成します。任意の名前を選択できますが、TimesTenClassicオブジェクトに使用した名前と同じ名前を使用することもできます。(この例では、repltls
)。YAMLファイルには、TimesTenClassicオブジェクトの定義が格納されています。このYAMLファイルで指定する必要があるフィールド、およびオプションのフィールドの詳細は、TimesTenClassicSpecSpecを参照してください。
この例では、TLSレプリケーションにとって特に重要なフィールドは次のとおりです。
dbSecret
: この例では、replicationWallet
メタデータ・ファイルに対してrepl-tls
という1つのKubernetes Secretを使用します。
replicationCipherSuite
: このフィールドは、レプリケーション用のTLSに必須です。この例では、値はSSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
です。詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のレプリケーション用のTLSの構成に関する項およびこのマニュアルの表11-3「TimesTenClassicSpecSpec」のreplicationCipherSuite
エントリを参照してください。
replicationSSLMandatory
: このフィールドはオプションです。この例では、replicationSSLMandatory
を1に設定します。詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のレプリケーション用のTLSの構成に関する項およびこのマニュアルの表11-3「TimesTenClassicSpecSpec」のreplicationSSLMandatory
エントリを参照してください。
この例には次の項目も含まれます。
name
: repltls
はTimesTenClassicオブジェクトの名前に置き換えます。
storageClassName
: oci
を、TimesTenを保持するためのPersistentVolumesの割当てに使用される記憶域クラスの名前に置き換えます。
storageSize
: 250G
を、各ポッドがTimesTenを保持するために要求する必要がある記憶域の量に置き換えます。ノート: この例では、本番環境を想定していることから、storageSize
には250G
の値を使用しています。デモ用の場合は、50G
の値で対応できます。詳細は、表11-3「TimesTenClassicSpecSpec」のstorageSize
エントリとlogStorageSize
エントリを参照してください。
image
: phx.ocir.io/youraccount
/tt1814110:3
は、イメージ・レジストリの場所(phx.ocir.io
/
youraccount
)とTimesTenが含まれているイメージ(tt1814110:3
)に置き換えます。
imagePullSecret
: sekret
を、KubernetesがTimesTenイメージをフェッチするために使用するイメージ・プル・シークレットに置き換えます。
dbConfigMap
: この例では、db.ini
、adminUser
およびschema.sql
メタデータ・ファイルに対して1つのConfigMap (名前はrepl-tls
)を使用します。
% vi repltls.yaml apiVersion: timesten.oracle.com/v1 kind: TimesTenClassic metadata: name: repltls spec: ttspec: storageClassName: oci storageSize: 250G image: phx.ocir.io/youraccount/tt1814110:3 imagePullSecret: sekret imagePullPolicy: Always dbConfigMap: - repl-tls dbSecret: - repl-tls replicationCipherSuite: SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 replicationSSLMandatory: 1
kubectl
create
コマンドを使用して、YAMLファイル(この例ではrepltls.yaml
)の内容からTimesTenClassicオブジェクトを作成します。これにより、KubernetesクラスタにあるTimesTenデータベースのアクティブ・スタンバイ・ペアをデプロイするプロセスが開始されます。
% kubectl create -f repltls.yaml timestenclassic.timesten.oracle.com/repltls created
KubernetesクラスタにTimesTenClassicオブジェクトを正常に作成しました。TimesTenデータベースをデプロイするプロセスが開始されますが、まだ完了していません。
kubectl
get
コマンドとkubectl
describe
コマンドを使用して、プロビジョニング時にアクティブ・スタンバイ・ペアの進捗状況を監視します。
kubectl
get
コマンドを使用して、STATE
フィールドを確認します。値がInitializing
であることを確認します。アクティブ・スタンバイ・ペアのプロビジョニングが開始しましたが、まだ完了していません。
% kubectl get ttc repltls NAME STATE ACTIVE AGE repltls Initializing None 50s
kubectl
get
コマンドを再度使用して、STATE
フィールドの値が変更されているかどうかを確認します。この例では、この値はNormal
で、データベースのアクティブ・スタンバイ・ペアがプロビジョニングされ、プロセスが完了したことを示しています。
% kubectl get ttc repltls NAME STATE ACTIVE AGE repltls Normal repltls-0 3m45s
kubectl
describe
コマンドを使用して、アクティブ・スタンバイ・ペアのプロビジョニングを詳細に表示します。
repltls
TimesTenClassicオブジェクト定義では、次の項目が正しく設定されていることに注目してください。
repl-tls
Secretは、dbSecret
フィールドで正しく参照されています(太字で表示)。
repl-tls
Configmapは、dbConfigMap
フィールドで正しく参照されています(太字で表示)。
replicationCipherSuite
フィールドは、SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
に正しく設定されています(太字で表示)。
replicationSSLMandatory
フィールドは、1
に正しく設定されています(太字で表示)。
ノート: この例は出力の一部を示しています。
% kubectl describe ttc repltls Name: repltls Namespace: mynamespace Labels: <none> Annotations: <none> API Version: timesten.oracle.com/v1 Kind: TimesTenClassic Metadata: Creation Timestamp: 2020-10-16T18:51:43Z Generation: 1 Resource Version: 75029797 Self Link: /apis/timesten.oracle.com/v1/namespaces/mynamespace/timestenclassics/repltls UID: a2915ef3-0fe0-11eb-8b9a-aaa0151611fe Spec: Ttspec: Db Config Map: repl-tls Db Secret: repl-tls Image: phx.ocir.io/youraccount/tt1814110:3 Image Pull Policy: Always Image Pull Secret: sekret Replication Cipher Suite: SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 Replication SSL Mandatory: 1 Storage Class Name: oci Storage Size: 250G ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- - Create 4m17s ttclassic Secret tta2915ef3-0fe0-11eb-8b9a-aaa0151611fe created - Create 4m17s ttclassic Service repltls created - Create 4m17s ttclassic StatefulSet repltls created - StateChange 3m10s ttclassic Pod repltls-1 Agent Up - StateChange 3m10s ttclassic Pod repltls-1 Release 18.1.4.11.0 - StateChange 3m10s ttclassic Pod repltls-1 Daemon Up - StateChange 2m3s ttclassic Pod repltls-0 Agent Up - StateChange 2m3s ttclassic Pod repltls-0 Release 18.1.4.11.0 - StateChange 2m1s ttclassic Pod repltls-0 Daemon Up - StateChange 68s ttclassic Pod repltls-0 Database Loaded - StateChange 68s ttclassic Pod repltls-0 Database Updatable - StateChange 68s ttclassic Pod repltls-0 CacheAgent Not Running - StateChange 68s ttclassic Pod repltls-0 RepAgent Not Running - StateChange 67s ttclassic Pod repltls-0 RepState IDLE - StateChange 67s ttclassic Pod repltls-0 RepScheme None - StateChange 66s ttclassic Pod repltls-0 RepAgent Running - StateChange 66s ttclassic Pod repltls-0 RepScheme Exists - StateChange 66s ttclassic Pod repltls-0 RepState ACTIVE - StateChange 47s ttclassic Pod repltls-1 Database Loaded - StateChange 47s ttclassic Pod repltls-1 Database Not Updatable - StateChange 47s ttclassic Pod repltls-1 CacheAgent Not Running - StateChange 47s ttclassic Pod repltls-1 RepAgent Not Running - StateChange 47s ttclassic Pod repltls-1 RepScheme Exists - StateChange 47s ttclassic Pod repltls-1 RepState IDLE - StateChange 41s ttclassic Pod repltls-1 RepAgent Running - StateChange 36s ttclassic Pod repltls-1 RepState STANDBY - StateChange 36s ttclassic TimesTenClassic was Initializing, now Normal
TimesTenデータベースのアクティブ・スタンバイ・ペアが(Normal
で示されているように)正常にデプロイされました。レプリケーションにTLSが使用されていることを確認する準備が整いました。
レプリケーションにTLSが使用されていることを確認するには、次のステップを実行します。
アクティブ・ポッド(この例ではrepltls-0
)とスタンバイ・ポッド(この例ではrepltls-1
)を確認します。
% kubectl get pods NAME READY STATUS RESTARTS AGE repltls-0 2/2 Running 0 6m35s repltls-1 2/2 Running 0 6m34s timestenclassic-operator-f84766548-tch7s 1/1 Running 0 28d
オプション: kubectl
exec
-it
コマンドを使用して、アクティブ・ポッド(この例ではrepltls-0
)のシェルを呼び出します。
% kubectl exec -it repltls-0 -c tt -- /usr/bin/su - oracle
オプション: アクティブ・ポッドのシェルから、cwallet.sso
ファイルが/tt/home/oracle/replicationWallet
ディレクトリにあることを確認します。
% ls /tt/home/oracle/replicationWallet cwallet.sso
オプション: アクティブ・ポッドのシェルから、TLSレプリケーション固有の値がtimesten.conf
構成ファイルで正しく指定されていることを確認します。(このファイルは、/tt/home/oracle/instances/instance1/conf
ディレクトリにあります)。
特に、次の点に注目してください。
replication_wallet
は、/tt/home/oracle/replicationWallet
に正しく設定されています(太字で表示)。
replication_cipher_suite
は、SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
に正しく設定されています(太字で表示)。
replication_ssl_mandatory
は、1
に正しく設定されています(太字で表示)。
こうしたtimesten.conf
の属性の詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のレプリケーション用のTLSの構成に関する項を参照してください。
% cat /tt/home/oracle/instances/instance1/conf/timesten.conf admin_uid=333 admin_user=oracle daemon_port=6624 group_name=oracle hostname=repltls-0 instance_guid=48AC5964-56A1-4C66-AB89-5646A2431EA3 instance_name=instance1 replication_cipher_suite=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 replication_ssl_mandatory=1 replication_wallet=/tt/home/oracle/replicationWallet server_port=6625 show_date=1 timesten_release=18.1.4 tns_admin=/ttconfig verbose=1
アクティブ・ポッドのシェルから、-showstatus
-detail
オプションを指定してttRepAdmin
ユーティリティを実行し、レプリケーション・エージェントの送信側と受信側がTLSを使用していることを確認します(太字のSSLで示されています)。このユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttRepAdminに関する項を参照してください。
ノート: この例は、出力の一部を示しています。
% ttRepAdmin -showstatus -detail repltls Replication Agent Status as of: 2020-10-16 19:01:55 DSN : repltls ... TRANSMITTER thread(s) (TRANSMITTER(M):139870727366400): For : REPLTLS (track 0) (SSL) Start/Restart count : 1 Current state : STATE_META_PEER_INFO RECEIVER thread(s) (RECEIVER:139870719887104): For : REPLTLS (track 0) (SSL) Start/Restart count : 1 Current state : STATE_RCVR_READ_NETWORK_LOOP ...
レプリケーション用のTLSが使用されていることの検証が完了しました。
Client/Server用のTLSを構成すると、TimesTenのクライアントとサーバーの間でセキュアなネットワーク通信を確保できます。詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のTimesTen Client/Server用のTransport Layer Securityに関する項を参照してください。
Client/Server用のTLSを使用する場合は、サーバー側とクライアント側の両方に構成要件があります。次の各項では、それらの要件について説明します。
次の各セクションでは、サーバーの構成要件について説明します。各項では、Kubernetesクラスタ内のサーバー用のTLSを構成する方法の例も示します。
Client/ServerのTLSサポートには、/ttconfig/csWallet
メタデータ・ファイルが必要です。(/ttconfig
ディレクトリは、TimesTenデータベースのコンテナ内にあります)。このファイルには、TLS証明書の作成時に生成されたcwallet.sso
ファイル(Oracleウォレット)が含まれている必要があります。このファイルは、サーバーに必要なOracleウォレットです。このファイルは、/scratch/ttuser/instance_dir/instance1/conf/serverWallet
ディレクトリに配置したものです。該当する証明書の作成方法は、「レプリケーションおよびClient/Server用のTLS証明書の作成」を参照してください。このウォレットには、TimesTenデータベースとClient/Serverアプリケーションの間のTLS暗号化を構成するために使用される資格証明を格納します。
さらに、サーバー側の接続属性も設定する必要があります。こうした属性は、db.ini
メタデータ・ファイルで定義できます。TimesTenコンテナの/ttconfig
ディレクトリにdb.ini
ファイルを配置した後で、オペレータはdb.ini
ファイルの内容をTimesTenコンテナに配置されたtimesten_home
/conf/sys.odbc.ini
ファイルにコピーします。(timesten_home
は、TimesTenインスタンス・ディレクトリです。このインスタンス・ディレクトリは、TimesTenコンテナ内の/tt/home/oracle/instances/instance1
です)。
必須のサーバー側属性は、Wallet
、CipherSuites
およびEncryption
です。これらの属性の詳細は、「サーバー側属性用のConfigMapの作成」を参照してください。『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のサーバーの構成に関する項も参照してください。
csWallet
とdb.ini
メタデータ・ファイルに加えて、その他のサポートされているメタデータ・ファイルを使用することもできます。サポートされるメタデータ・ファイルの詳細は、「サポートされるメタデータ・ファイル」を参照してください。
これらのメタデータ・ファイルは、Kubernetesの1つ以上の機能(たとえば、Kubernetes Secret、ConfigMapまたは初期化コンテナ)に含めることができます。これにより、メタデータ・ファイルがTimesTenコンテナの/ttconfig
ディレクトリに確実に移入されます。この/ttconfig
ディレクトリにメタデータ・ファイルを配置する方法についての要件はありません。詳細は、「/ttconfigディレクトリの移入」を参照してください。
次の例では、Kubernetes SecretにcsWallet
メタデータ・ファイルを含めます。また、db.ini
、adminUser
およびschema.sql
メタデータ・ファイルを作成して、それらのメタデータ・ファイルをConfigMapに含めます。
この項では、cs-tls
Kubernetes Secretを作成します。cs-tls
Secretには、csWallet
メタデータ・ファイルを格納します。
Linux開発ホストで、次のことを実行します。
任意のディレクトリから、空のサブディレクトリを作成します。この例では、serverWallet
サブディレクトリを作成します。(今後、この例では、このディレクトリを表す場合にserverWallet
ディレクトリを使用します)。
% mkdir -p serverWallet
前の手順で作成したserverWallet
ディレクトリに、cwallet.sso
ファイルをコピーします。cwallet.sso
ファイルは、ttCreateCerts
ユーティリティを使用してTLS証明書を作成したときに生成されたものです。また、このファイルは、/scratch/ttuser/instance_dir/instance1/conf/serverWallet
ディレクトリに配置しました。詳細は、「レプリケーションおよびClient/Server用のTLS証明書の作成」を参照してください。
% cp /scratch/ttuser/instance_dir/instance1/conf/serverWallet/cwallet.sso serverWallet/cwallet.sso
Kubernetes Secretの作成
この例では次のとおりです。
Secretの名前はcs-tls
です。cs-tls
は適宜の名前に置き換えます(cs-tls
は太字で表示しています)。
Client/Server用のTLSに必要なメタデータ・ファイルの名前は、csWallet
(太字で表示)です。
ウォレット・ディレクトリの場所は、serverWallet
です(この例では、太字で表示しています)。別のディレクトリを使用する場合、serverWallet
は使用するディレクトリの名前に置き換えます。
Oracleウォレットの名前: cwallet.sso
(太字で表示)。
kubectl
create
コマンドを使用してシークレットを作成します。
% kubectl create secret generic cs-tls --from-file=csWallet=serverWallet/cwallet.sso secret/cs-tls created
cs-tls
Kubernetes Secretの作成とデプロイが完了しました。この後、csWallet/cwallet.sso
ファイルは、TimesTenコンテナの/ttconfig
ディレクトリから使用できるようにします。また、ファイルはTimesTenコンテナの/tt/home/oracle/csWallet
ディレクトリから使用できるようにします。
この項では、cs-tls
ConfigMapを作成します。このConfigMapには、db.ini
、adminUser
およびschema.sql
メタデータ・ファイルが含まれます。
Linux開発ホストで、次のことを実行します。
選択したディレクトリから、メタデータ・ファイル用に空のサブディレクトリを作成します。この例では、cm_csTLS
サブディレクトリを作成します。(今後、この例では、このディレクトリを表す場合にcm_csTLS
ディレクトリを使用します)。
% mkdir -p cm_csTLS
ConfigMapディレクトリに移動します。
% cd cm_csTLS
このConfigMapディレクトリ(この例ではcm_csTLS
)にdb.ini
ファイルを作成します。このdb.ini
ファイルでは、Client/Server用のTLSのサーバー側属性を定義します。そうしたサーバー側属性は、TimesTenコンテナのtimesten_home
/conf
ディレクトリにあるsys.odbc.iniファイル
に含めることになります。(timesten_home
は、TimesTenインスタンス・ディレクトリです。このインスタンス・ディレクトリは、TimesTenコンテナ内のtt/home/oracle/instances/instance1
です)。
Client/Server用のTLSに必要なサーバー側属性は次のとおりです。
wallet
:サーバー・ウォレットを格納するTimesTenコンテナ内のディレクトリです。/tt/home/oracle/csWallet
を指定します。
ciphersuites
: 暗号スイートの設定です。有効な値は、SSL_ECDHE_ECDSA_WITH_AES_128_GCM_256
またはSSL_ECDHE_ECDSA_WITH_AES_256_GCM_384
です。または、その両方をカンマで区切って優先する順に並べます。デフォルト設定はありません。TLSを使用する場合は、サーバーとクライアントの設定に1つ以上の共通スイートが含まれている必要があります。この例では、SSL_ECDHE_ECDSA_WITH_AES_128_GCM_256
を指定します。暗号スイートの設定の詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のサーバーの構成に関する項を参照してください。
encryption
: サーバーの暗号化設定です。この例では、required
の設定を指定します。有効な暗号化設定の詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のサーバーの構成に関する項を参照してください。
この例では、PermSize
とDatabaseCharacterSet
の接続属性も指定します。
vi db.ini
PermSize=200 DatabaseCharacterSet=AL32UTF8 wallet=/tt/home/oracle/csWallet ciphersuites=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 encryption=required
このConfigMapディレクトリ(この例ではcm_csTLS
)にadminUser
ファイルを作成します。このadminUser
ファイルで、tiger
パスワードを使用してscott
ユーザーを作成します。
vi adminUser
scott/tiger
このConfigMapディレクトリ(この例ではcm_csTLS
)にschema.sql
ファイルを作成します。このschema.sql
ファイルで、scott
ユーザーのs
順序とemp
表を定義します。オペレータはこれらのオブジェクト定義でデータベースを自動的に初期化します。
vi schema.sql
create sequence scott.s; create table scott.emp ( id number not null primary key, name char(32) );
ConfigMapを作成します。cm_csTLS
ディレクトリ内のファイルは、ConfigMapに含めておくことで、TimesTenコンテナで使用できるようにします。
この例では次のとおりです。
ConfigMapの名前はcs-tls
です。cs-tls
は適宜の名前に置き換えます(この例では、cs-tls
は太字で表示しています)。
この例では、ConfigMapにコピーするファイルが存在しているディレクトリとしてcm_csTLS
を使用しています。別のディレクトリを使用する場合、cm_csTLS
は目的のディレクトリの名前に置き換えます(この例では、cm_csTLS
は太字で表示しています)。
kubectl
create
コマンドを使用して、ConfigMapを作成します。
% kubectl create configmap cs-tls --from-file=cm_csTLS configmap/cs-tls created
kubectl
describe
コマンドを使用して、ConfigMap (この例ではcs-tls
)の内容を確認します。
% kubectl describe configmap cs-tls Name: cs-tls Namespace: mynamespace Labels: <none> Annotations: <none> Data ==== db.ini: ---- PermSize=200 DatabaseCharacterSet=AL32UTF8 wallet=/tt/home/oracle/csWallet ciphersuites=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 encryption=required schema.sql: ---- create sequence scott.s; create table scott.emp (id number not null primary key, name char (32)); adminUser: ---- scott/tiger Events: <none>
cs-tls
ConfigMapの作成とデプロイが完了しました。
この項では、TimesTenClassicオブジェクトを作成します。TimesTenClassicオブジェクトの詳細は、TimesTenClassicオブジェクトの定義および作成およびTimesTenClassicオブジェクト・タイプを参照してください。
次のステップを実行します。
空のYAMLファイルを作成します。任意の名前を選択できますが、TimesTenClassicオブジェクトに使用した名前と同じ名前を使用することもできます。(この例では、cstls
)。YAMLファイルには、TimesTenClassicオブジェクトの定義が格納されています。このYAMLファイルで指定する必要があるフィールド、およびオプションのフィールドの詳細は、TimesTenClassicSpecSpecを参照してください。
この例では、TLS Client/Serverにとって特に重要なフィールドは次のとおりです。
dbSecret
: この例では、csWallet
メタデータ・ファイルに対してcs-tls
という1つのKubernetes Secretを使用します。
dbConfigMap
: この例では、cs-tls
という1つのConfigMapを使用します。db.ini
ファイルは、cs-tls
ConfigMapに含まれます。前に説明したように、db.ini
ファイルには、Client/Server用のTLSのサーバー側属性が含まれています。
この例には次の項目も含まれます。
name
: cstls
はTimesTenClassicオブジェクトの名前に置き換えます。
storageClassName
: oci
を、TimesTenを保持するためのPersistentVolumesの割当てに使用される記憶域クラスの名前に置き換えます。
storageSize
: 250G
を、各ポッドがTimesTenを保持するために要求する必要がある記憶域の量に置き換えます。ノート: この例では、本番環境を想定していることから、storageSize
には250G
の値を使用しています。デモ用の場合は、50G
の値で対応できます。詳細は、表11-3「TimesTenClassicSpecSpec」のstorageSize
エントリとlogStorageSize
エントリを参照してください。
image
: phx.ocir.io/youraccount
/tt1814110:3
は、イメージ・レジストリの場所(phx.ocir.io
/
youraccount
)とTimesTenが含まれているイメージ(tt1814110:3
)に置き換えます。
imagePullSecret
: sekret
を、KubernetesがTimesTenイメージをフェッチするために使用するイメージ・プル・シークレットに置き換えます。
% vi cstls.yaml apiVersion: timesten.oracle.com/v1 kind: TimesTenClassic metadata: name: cstls spec: ttspec: storageClassName: oci storageSize: 250G image: phx.ocir.io/youraccount/tt1814110:3 imagePullSecret: sekret imagePullPolicy: Always dbConfigMap: - cs-tls dbSecret: - cs-tls
kubectl
create
コマンドを使用して、YAMLファイル(この例ではcstls.yaml
)の内容からTimesTenClassicオブジェクトを作成します。これにより、KubernetesクラスタにあるTimesTenデータベースのアクティブ・スタンバイ・ペアをデプロイするプロセスが開始されます。
% kubectl create -f cstls.yaml timestenclassic.timesten.oracle.com/cstls created
KubernetesクラスタにTimesTenClassicオブジェクトを正常に作成しました。TimesTenデータベースをデプロイするプロセスが開始されますが、まだ完了していません。
kubectl
get
コマンドとkubectl
describe
コマンドを使用して、プロビジョニング時にアクティブ・スタンバイ・ペアの進捗状況を監視します。
kubectl
get
コマンドを使用して、STATE
フィールドを確認します。値がInitializing
であることを確認します。アクティブ・スタンバイ・ペアのプロビジョニングが開始しましたが、まだ完了していません。
% kubectl get ttc cstls NAME STATE ACTIVE AGE cstls Initializing None 15s
kubectl
get
コマンドを再度使用して、STATE
フィールドの値が変更されているかどうかを確認します。この例では、この値はNormal
で、データベースのアクティブ・スタンバイ・ペアがプロビジョニングされ、プロセスが完了したことを示しています。
% kubectl get ttc cstls NAME STATE ACTIVE AGE cstls Normal cstls-0 3m30s
kubectl
describe
コマンドを使用して、アクティブ・スタンバイ・ペアのプロビジョニングを詳細に表示します。
cstls
TimesTenClassicオブジェクト定義では、次の項目が正しく設定されていることに注目してください。
cs-tls
Secretは、dbSecret
フィールドで正しく参照されています(太字で表示)。
cs-tls
Configmapは、dbConfigMap
フィールドで正しく参照されています(太字で表示)。
ノート: この例には出力の一部を示しています。
% kubectl describe ttc cstls Name: cstls Namespace: mynamespace Labels: <none> Annotations: <none> API Version: timesten.oracle.com/v1 Kind: TimesTenClassic Metadata: Creation Timestamp: 2020-10-17T19:08:03Z Generation: 1 Resource Version: 75491472 Self Link: /apis/timesten.oracle.com/v1/namespaces/mynamespace/timestenclassics/cstls UID: 150128b3-10ac-11eb-b019-d681454a288b Spec: Ttspec: Db Config Map: cs-tls Db Secret: cs-tls Image: phx.ocir.io/youraccount/tt1814110:3 Image Pull Policy: Always Image Pull Secret: sekret Storage Class Name: oci Storage Size: 250G ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- - Create 4m21s ttclassic Service cstls created - Create 4m21s ttclassic StatefulSet cstls created - Create 4m21s ttclassic Secret tt150128b3-10ac-11eb-b019-d681454a288b created - StateChange 3m5s ttclassic Pod cstls-1 Daemon Up - StateChange 3m5s ttclassic Pod cstls-0 Agent Up - StateChange 3m5s ttclassic Pod cstls-0 Release 18.1.4.11.0 - StateChange 3m5s ttclassic Pod cstls-1 Agent Up - StateChange 3m5s ttclassic Pod cstls-1 Release 18.1.4.11.0 - StateChange 3m5s ttclassic Pod cstls-0 Daemon Up - StateChange 116s ttclassic Pod cstls-0 Database Loaded - StateChange 116s ttclassic Pod cstls-0 Database Updatable - StateChange 116s ttclassic Pod cstls-0 CacheAgent Not Running - StateChange 116s ttclassic Pod cstls-0 RepAgent Not Running - StateChange 116s ttclassic Pod cstls-0 RepState IDLE - StateChange 116s ttclassic Pod cstls-0 RepScheme None - StateChange 115s ttclassic Pod cstls-0 RepAgent Running - StateChange 115s ttclassic Pod cstls-0 RepScheme Exists - StateChange 115s ttclassic Pod cstls-0 RepState ACTIVE - StateChange 96s ttclassic Pod cstls-1 Database Loaded - StateChange 96s ttclassic Pod cstls-1 Database Not Updatable - StateChange 96s ttclassic Pod cstls-1 CacheAgent Not Running - StateChange 96s ttclassic Pod cstls-1 RepAgent Not Running - StateChange 96s ttclassic Pod cstls-1 RepScheme Exists - StateChange 96s ttclassic Pod cstls-1 RepState IDLE - StateChange 90s ttclassic Pod cstls-1 RepAgent Running - StateChange 84s ttclassic Pod cstls-1 RepState STANDBY - StateChange 84s ttclassic TimesTenClassic was Initializing, now Normal
TimesTenデータベースのアクティブ・スタンバイ・ペアが(Normal
で示されているように)正常にデプロイされました。
次の各セクションでは、TLSのクライアント要件について説明します。
ttCreateCerts
ユーティリティを使用してTLS証明書を作成したときに、/scratch/ttuser/instance_dir/instance1/conf/ clientWallet
ディレクトリ内にcwallet.sso
ウォレット・ファイルが生成されました。このファイルは、TimesTenクライアントのインスタンスを実行しているアプリケーション・コンテナにコピーする必要があります。TLS証明書の作成方法は、「レプリケーションおよびClient/Server用のTLS証明書の作成」を参照してください。
この例では、kubectl
cp
コマンドを使用して、Linux開発ホストからTimesTenクライアントのインスタンスを実行しているアプリケーション・コンテナに/scratch/ttuser
/
instance_dir/instance1/conf/clientWallet/cwallet.sso
ファイルをコピーします。
kubectl
exec
-it
コマンドを使用して、TimesTenクライアントのインスタンスが含まれているアプリケーション・コンテナ(この例ではcstls-0
)のシェルを起動します。
% kubectl exec -it cstls-0 -c tt -- /usr/bin/su - oracle
起動したシェルを使用して任意のディレクトリから、空のサブディレクトリを作成します。この例では、clientWallet
サブディレクトリを作成します。
% mkdir -p clientWallet
Linux開発ホストからkubectl
cp
コマンドを使用して、Linux開発ホストの/scratch/ttuser/instance_dir/instance1/conf/clientWallet
ディレクトリにあるcwallet.sso
ファイルを前の手順で作成したclientWallet
ディレクトリにコピーします。(このディレクトリは、TimesTenクライアント・インスタンスを実行しているアプリケーション・コンテナ内にあります)。cwallet.sso
ファイルは、ttCreateCerts
ユーティリティを使用してTLS証明書を作成したときに生成されたものです。詳細は、「レプリケーションおよびClient/Server用のTLS証明書の作成」を参照してください。
% kubectl cp /scratch/ttuser/instance_dir/instance1/conf/clientWallet/ cwallet.sso cstls-0:clientWallet/cwallet.sso -c tt
シェルから、cwallet.sso
ファイルがclientWallet
ディレクトリに配置されていることを確認します。
% ls clientWallet cwallet.sso
TimesTenクライアントのインスタンスを実行しているアプリケーション・コンテナにcwallet.sso
クライアント・ウォレット・ファイルが正常にコピーされました。
Client/Server用のTLSのクライアント側属性を設定する必要があります。属性は、timesten_home
/conf/sys.odbc.ini
のクライアントDSN定義で設定することも、適切なClient/Server接続文字列で設定することもできます。詳細は、「Client/Serverドライバの使用」を参照してください。
Client/Server用のTLSに必要なクライアント側属性は次のとおりです。
wallet
: cwallet.sso
クライアント・ウォレット・ファイルを格納するディレクトリです。このディレクトリは、TimesTenクライアントのインスタンスを実行しているアプリケーション・コンテナ内にあります。デフォルトのディレクトリはありません。この例では、このディレクトリを示すためにclientWallet
ディレクトリを作成しました。(詳細は、「クライアント・ウォレットのコピー」を参照)。この例の場合、clientWallet
ディレクトリへのフルパスは/tt/home/oracle/clientWallet
です。そのため、この例では、このディレクトリを示すために/tt/home/oracle/clientWallet
を使用しています。
ciphersuites
: 暗号スイートの設定です。有効な値は、SSL_ECDHE_ECDSA_WITH_AES_128_GCM_256
またはSSL_ECDHE_ECDSA_WITH_AES_256_GCM_384
です。または、その両方をカンマで区切って優先する順に並べます。デフォルト設定はありません。TLSを使用する場合は、サーバーとクライアントの設定に1つ以上の共通スイートが含まれている必要があります。この例では、SSL_ECDHE_ECDSA_WITH_AES_128_GCM_256
を指定します。暗号スイートの設定の詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のサーバーの構成に関する項を参照してください。
encryption
: クライアントの暗号化設定です。この例では、required
の設定を指定します。有効な暗号化設定の詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のサーバーの構成に関する項を参照してください。
この例では、接続文字列を使用して、cstsl
データベースにscott
ユーザーとして接続します。scott
ユーザーはオペレータが作成したもので、すでにcstsl
データベースに存在しています。次に、クライアントでttIsqlCS
からsqlgetconnectattr
コマンドを使用して、TLSがサーバーとクライアントで正しく構成されていて、TLSが使用されていることを確認します。
データベースに接続します。
% ttIsqlcs -connstr "TTC_SERVER1=cstls-0.cstls.mynamespace.svc.cluster.local; TTC_SERVER2=cstls-1.cstls.mynamespace.svc.cluster.local; TTC_SERVER_DSN=cstls;UID=scott;PWD=tiger; WALLET=tt/home/oracle/clientWallet; CIPHERSUITES=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256; ENCRYPTION=required"; Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "TTC_SERVER1=cstls-0.cstls.mynamespace.svc.cluster.local; TTC_SERVER2=cstls-1.cstls.mynamespace.svc.cluster.local; TTC_SERVER_DSN=cstls;UID=scott;PWD=********; WALLET=tt/home/oracle/clientWallet; CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256; ENCRYPTION=REQUIRED;"; Connection successful: DSN=;TTC_SERVER=cstls-0.cstls.mynamespace.svc.cluster.local; TTC_SERVER_DSN=cstls;UID=scott; DATASTORE=/tt/home/oracle/datastore/cstls;DATABASECHARACTERSET=AL32UTF8; CONNECTIONCHARACTERSET=US7ASCII;AUTOCREATE=0;PERMSIZE=200; DDLREPLICATIONLEVEL=3;FORCEDISCONNECTENABLED=1;(SERVER)ENCRYPTION=Required; (SERVER)WALLET=file:/tt/home/oracle/csWallet;(client)Encryption=Required; (client)Wallet=/tt/home/oracle/clientWallet; (client)CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256; (Default setting AutoCommit=1)
ttIsqlCS
のsqlgetconnectattr
コマンドを使用して、TLSが使用されていることを確認します。戻り値の1
は、TLSが使用されていることを示します。
Command> sqlgetconnectattr tt_tls_session; TT_TLS_SESSION = 1 (SQL_TRUE)
データベースに正常に接続したことと、Client/Server用のTLSが使用されていることの確認が完了しました。