B.4 暗号化キーとキー・ペアの作成

このタスクを実行するのは、tcs-docker-swarm.yamlファイルのauthTokenPropagationEnabledプロパティとtransactionTokenEnabledプロパティを有効にする場合のみです。このファイルはinstallation_directory/otmm-<version>/samples/dockerフォルダにあります。

tcs-docker-swarm.yamlファイルのauthTokenPropagationEnabledおよびtransactionTokenEnabledプロパティを有効にする必要がない場合は、2つのYAMLファイルで数行をコメント化する必要があります。

tcs-docker-swarm.yamlファイルの次の行をコメント化します。

# secretKeys: '{"secretKeys":[{"secretKeyName":"TMMSECRETKEY", "version":"1"}]}'
# EncryptionSecretKeyVersion: 1
...
# keyPairs: '{"keyPairs":[{"privateKeyName":"TMMPRIKEY", "publicKeyName":"TMMPUBKEY", "version":"1", "privateKeyPasswordName":"TMMPRIKEYPASSWD"}]}'
# transactionTokenKeyPairVersion: 1

tmm-stack-compose.yamlファイルの次の行をコメント化します。このファイルはinstallation_directory/otmm-<version>/samples/dockerフォルダにあります。

# secrets:
# TMMSECRETKEY:
# external: true
# TMMPRIKEY:
# external: true
# TMMPUBKEY:
# external: true
# TMMPRIKEYPASSWD:
# external: true

...
#entrypoint: ['/bin/sh', '-c', 'export TMMSECRETKEY=$$(cat /run/secrets/TMMSECRETKEY); export TMMPRIKEY=$$(cat /run/secrets/TMMPRIKEY); export TMMPUBKEY=$$(cat /run/secrets/TMMPUBKEY); export TMMPRIKEYPASSWD=$$(cat /run/secrets/TMMPRIKEYPASSWD); /app/tcs' ]

# secrets:
    # - TMMSECRETKEY
    # - TMMPRIKEY
    # - TMMPUBKEY
    # - TMMPRIKEYPASSWD

暗号化キーおよびトランザクション・トークンを作成する必要がなく、それらのオプションを無効にした場合は、この項をスキップします。

tcs-docker-swarm.yamlファイルのauthorizationauthTokenPropagationEnabledプロパティを有効化した場合は、暗号化キーを生成し、そのキーをDockerシークレットに追加する必要があります。生成する暗号化キーには、次の属性が必要です。
  • 対称アルゴリズム: AES-256
  • 暗号モード: GCMモードのAES
  • キーの長さ: 32バイト
  • 初期化ベクトルの長さ: 96ビット

tcs-docker-swarm.yamlファイルのtransactionTokentransactionTokenEnabledtrueに設定した場合は、トランザクション・トークンのキー・ペアを生成する必要があります。生成するトランザクション・トークンには、次の属性が必要です:

  • 非対称アルゴリズム: RSA 3072
  • キーの長さ: 3072ビット
  • ハッシュ・アルゴリズム: SHA256

パスフレーズがわかる場合は、既存のRSAキーを再利用できます。それ以外の場合は、新しいRSAキーを作成します。

開始する前に、OpenSSLをインストールしたことを確認します。

暗号化トークンおよびトランザクション・トークンの使用方法の詳細は、「認証および認可について」を参照してください。

暗号化キーおよびRSAキー・ペアを作成するには:
  1. 次のコマンドを実行して、キーの長さが32バイトの暗号化キーを生成し、暗号化キーの使用中にシークレットを作成します。
    openssl rand -hex 16 | docker secret create TMMSECRETKEY

    ここで、TMMSECRETKEYは作成するシークレットの名前です。同じ名前の既存のキーがある場合、そのキーは上書きされます。

  2. キーの長さが3072ビットのRSA秘密キーを作成します。以下のコマンドを使用します。
    openssl genrsa -aes256 -out private.pem 3072
  3. コマンド・プロンプトでパスフレーズを入力し、[Enter]を押します。後で指定する必要があるため、パスフレーズを覚えておいてください。

    private.pemという名前の新しいファイルが現在の作業フォルダに作成されます。このファイルにRSA秘密キーの値が含まれています。

  4. 生成した秘密キーに対するRSA公開キーを作成します。

    次のコマンドによって、現在の作業フォルダにpublic.pemという名前の新しいファイルが作成されます。このファイルにRSA公開キーの値が含まれています。

    openssl rsa -in private.pem -outform PEM -pubout -out public.pem
  5. Base-64によって、秘密キーと公開キーがエンコードされ、Dockerシークレットに追加されます。
    base64 private.pem | docker secret create TMMPRIKEY -
    base64 public.pem | docker secret create TMMPUBKEY -

    ここで、TMMPRIKEYおよびTMMPUBKEYは作成するDockerシークレットの名前です。

  6. RSAキーのパスフレーズをDockerシークレットとして格納します。次のコマンドで、pass_phraseをRSAキーのパスフレーズに置き換えます。
    printf "<pass_phrase>"| docker secret create TMMPRIKEYPASSWD -
  7. 作成したDockerシークレットの名前を確認します。
    docker secret ls

    サンプル出力

    ID               NAME              DRIVER    CREATED        UPDATED
    ricw56x6sehy...   TMMPRIKEY                   20 hours ago   20 hours ago
    c0hw2nhu0sh1...   TMMPRIKEYPASSWD             20 hours ago   20 hours ago
    mr91c79nwzne...   TMMPUBKEY                   20 hours ago   20 hours ago
    wp112txjki46...   TMMSECRETKEY                20 hours ago   20 hours ago

    後で指定する必要があるため、キーの名前を書き留めます。

  8. installation_directory/otmm-<version>/samples/dockerフォルダにあるtmm-stack-compose.yamlファイルを更新します。作成したシークレットを環境変数としてSwarm内でエクスポートします。これには、次の例のようにconfigsセクションのすぐ下に詳細を指定します。
    version: "3.9"
     
    configs:
       my_tcs_config:
       file: ./tcs-docker-swarm.yaml
     
    secrets:
      TMMPRIKEY:
         external: true
      TMMPRIKEYPASSWD:
         external: true
      TMMPUBKEY:
         external: true
      TMMSECRETKEY:
         external: true
  9. tmm-stack-compose.yamlファイルのservices.otmm-tcsセクションに次を追加します:
    • 作成したシークレットの名前。
    • 作成したシークレットを環境変数としてエクスポートするためのentrypointを作成します。わかりやすくするために、次の例ではシークレットと環境変数に同じ名前を使用しています。環境変数には他の任意の名前を指定できます。次のステップで指定する必要があるため、環境変数の名前を書き留めておきます。
    services:
       otmm-tcs:
         image: "127.0.0.1:5000/tmm"
         ports:
            - "9000:9000"
         entrypoint: ['/bin/sh', '-c', 'export TMMPRIKEY=$$(cat /run/secrets/TMMPRIKEY); export TMMPRIKEYPASSWD=$$(cat /run/secrets/TMMPRIKEYPASSWD); export TMMPUBKEY=$$(cat /run/secrets/TMMPUBKEY); export TMMSECRETKEY=$$(cat /run/secrets/TMMSECRETKEY); /app/tcs' ]
          deploy:
             replicas: 1
          configs:
            - source: my_tcs_config
              target: /tcs_config.yaml
          environment:
            - CONFIG_FILE=/tcs_config.yaml
          secrets:
            - TMMPRIKEY
            - TMMPRIKEYPASSWD
            - TMMPUBKEY
            - TMMSECRETKEY
  10. 作成した環境変数の名前を含むようにtcs-docker-swarm.yamlファイルを更新します。このYAMLファイルは、installation_directory/otmm-<version>/samples/dockerフォルダにあります。

    encryptionおよびtransactionTokenプロパティのサンプル値

    encryption:
         secretKeys: '{"secretKeys":[{"secretKeyName":"TMMSECRETKEY", "version":"1"}]}'
         #TMMSECRETKEY is the environment variable for the Docker secret that contains the encryption key
         EncryptionSecretKeyVersion: 1
    transactionToken:
         transactionTokenEnabled: true
         keyPairs: '{"keyPairs":[{"privateKeyName":"TMMPRIKEY", "publicKeyName":"TMMPUBKEY", "version":"1", "privateKeyPasswordName":"TMMPRIKEYPASSWD"}]}'
         #TMMPRIKEY is the environment variable for the Docker secret that contains the base64-encoded private key
         #TMMPUBKEY is the environment variable for the Docker secret that contains the base64-encoded public key
         #TMMPRIKEYPASSWD is the environment variable for the Docker secret that contains the private key password
         transactionTokenKeyPairVersion: 1