IBM Db2 ネイティブ暗号化のための Hyper Protect Crypto Services PKCS #11 の使用

IBM Db2® のネイティブ暗号化を行うと、外部のストレージ・メディアに保管されている鍵データベースのファイルとデータベース・バックアップ・イメージを不適切なアクセスから保護できます。 許可されたユーザーとアプリケーションがデータを使用するときに、データベース・システムがデータの暗号化と復号を自動的に行います。 通常、データベース・ユーザーがネイティブの暗号化を認識する必要はなく、また、データベース・クライアント・アプリケーションを特に調整する必要もありません。

Db2 のネイティブ暗号化では、2 階層構造の鍵階層が使用されます。つまり、データは、データ暗号化鍵 (DEK) で暗号化されます。 その DEK は、マスター鍵で暗号化され、暗号化された形式でデータベースまたはバックアップ・イメージと一緒に保管されます。 暗号化データベースごと、暗号化バックアップごとに、Db2 は、固有の DEK を生成します。

マスター鍵は、DEK を暗号化するために使用されます。 暗号化データベースごとに、一度に 1 つのマスター鍵が関連付けられます。

Db2 のネイティブ暗号化を計画するときには、マスター鍵をどこに保管し、どのように保護するかが重要な問題の 1 つになります。

目標

このチュートリアルでは、マスター鍵を IBM Cloud® Hyper Protect Crypto Services に保管して、マスター鍵を所有者が完全かつ排他的に管理する方法について説明します。 このためには、Hyper Protect Crypto Services の PKCS #11 統合機能を使用する必要があります。

このチュートリアルでは、次のイラストに示しているセットアップを実装します。

IBM Db2 標準 PKCS #11 API を使用したデフォルト暗号化
図 1. IBM 標準 PKCS #11 API を使用した Db2 のデフォルト暗号化

このセットアップでは、Db2 が、マスター鍵を管理するための操作を Hyper Protect Crypto Services の PKCS #11 ライブラリーを使用して呼び出します。 Hyper Protect Crypto Services の PKCS #11 ライブラリーが、Hyper Protect Crypto Services インスタンスと対話し、マスター鍵を保管および管理するための最高クラスのテクノロジーを提供します。

開始前に

このチュートリアルを実行するには、以下の前提条件を満たしていなければなりません。

タスク・フロー

このソリューションを完成させるには、以下の手順を実行します。

  1. Hyper Protect Crypto Services インスタンスを初期設定する
  2. Hyper Protect Crypto Services に PKCS #11 ライブラリーをセットアップする
  3. Db2 をセットアップして Db2 のネイティブ暗号化を構成する

Hyper Protect Crypto Services インスタンスを初期設定する

  1. このチュートリアルでは、まず Hyper Protect Crypto Services インスタンスを初期設定する必要があります。

    Hyper Protect Crypto Services インスタンスの ID と EP11 エンドポイントのアドレスをメモします。 後の手順でこの情報が必要になります。

  2. カスタム IAM 役割Discover HPCSを作成します。 この役割は、PKCS #11 ライブラリーに必要な Hyper Protect Crypto Services インスタンスをディスカバーするための非常に限られた権限を提供します。 この役割には、キーまたは EP11 キー・ストアを使用、作成、または管理する権限がありません。

    1. UI で、 「管理」 > 「アクセス (IAM)」 に移動し、 「役割」 を選択してから、 「作成」 をクリックします。
    2. 役割の名前Discover HPCSを入力します。
    3. 役割の ID を入力します。 この ID は CRN の中で使用されます。API を使用してアクセス権限を割り当てるときには、CRN が使用されます。 ロール ID の先頭は大文字で、英数字のみを使用する必要があります (DiscoverHPCS など)。
    4. オプション: アクセス権限を割り当てるユーザーが、役割の割り当てによってユーザーに付与されるアクセス権限のレベルを把握するのに役立つ簡潔な説明を入力します。 この説明は、ユーザーがサービスへのアクセス権限を割り当てたときにも UI に表示されます。
    5. サービスのリストから、Hyper Protect Crypto Services を選択します。
    6. hs-crypto.discovery.listserversアクションに対して追加を選択し、作成をクリックします。
  3. PKCS #11 API ユーザー・タイプのセットアップの説明に従って、通常のユーザーと匿名ユーザーのサービス ID と API キーをセットアップします。

    説明に記載されている SO ユーザー・タイプはセットアップしないでください。 また、手順とは対照的に、匿名ユーザーのサービス ID にはKey operatorカスタム役割を割り当てず、代わりにDiscover HPCSカスタム役割を割り当てます。

    このセットアップでは、匿名ユーザーの Hyper Protect Crypto Services インスタンスに対する許可は非常に限られており、キーまたは EP11 キー・ストアを使用、作成、および管理することはできません。

  4. 後続のステップのために、通常ユーザーと匿名ユーザーの API キーの値を保存します。

  5. 説明に従って、秘密 EP11 キー・ストアを作成し、後続のステップで使用するためにキー・ストア ID をメモします。

Hyper Protect Crypto Services に PKCS #11 ライブラリーをセットアップする

1. Db2 Community Edition コンテナーの実行

  1. 以下のコマンドを使用して Db2 Community Edition コンテナーを実行します。

    docker run -itd --name mydb --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=password -e DBNAME=testdb ibmcom/db2
    
  2. ホスト・システムのコマンド・ラインから以下のコマンドを実行します。

    docker exec -it --user root --workdir / mydb bash
    

後の手順で root としてコマンドを実行するときに、このシェルを使用します。

2. Hyper Protect Crypto Services の PKCS #11 構成ファイルの作成

次は、Hyper Protect Crypto Services の PKCS #11 機能の構成ファイルを作成します。 構成ファイルの名前は grep11client.yaml です。

以下のファイル・テンプレートを調整して、ファイルに grep11client.yaml という名前を付けます。

  • <instance_ID> を Hyper Protect Crypto Services インスタンスの ID に置き換えます。
  • <EP11_endpoint_URL> および <EP11_endpoint_port_number> を、Hyper Protect Crypto Services インスタンスの EP11 エンドポイント・アドレスの各パラメーターに置き換えます。
  • <private_keystore_id>を、前に作成した秘密キー・ストアの ID に置き換えます。
  • <anonymous_user_api_key>を、匿名ユーザーのそれぞれの API キーに置き換えます。
iamcredentialtemplate: &defaultiamcredential
          enabled: true
          endpoint: "https://iam.cloud.ibm.com"
          # The Universally Unique IDentifier (UUID) of your Hyper Protect Crypto Services instance.
          instance: "<instance_ID>"

tokens:
  0:
    grep11connection:
      # The EP11 endpoint address starting from 'ep11'. For example: "<instance_ID>.ep11.us-south.hs-crypto.appdomain.cloud"
      address: "<EP11_endpoint_URL>"
      port: "<EP11_endpoint_port_number>" # The EP11 endpoint port number
      tls:
        enabled: true # EP11 requires TLS connection.
        mutual: false
    storage:
      remotestore:
        enabled: true
    users:
       # The Security Officer (SO) user
      0: # The index of the Security Officer (SO) user MUST be 0.
        # The name for the Security Officer (SO) user. For example: "Administrator":
        name: "Administrator"
        iamauth: *defaultiamcredential
      # The normal user
      1: # The index of the normal user MUST be 1.
        # The name for the normal user. For example: "Normal user":
        name: "Normal user"
        # The 128-bit UUID of the private keystore which you created previously
        tokenspaceID: "<private_keystore_id>"
        iamauth: *defaultiamcredential
      # The anonymous user
      2: # The index of the anonymous user MUST be 2.
        # The name for the anonymous user. For example: "Anonymous":
        name: "Anonymous"
        # The public keystore will not be used with this setup.
        # Specify an arbitrary 128-bit UUID below, e.g.:
        tokenspaceID: "12345678-1234-1234-1234-1234567890AB"
        iamauth:
          <<: *defaultiamcredential
          # Provide the API key for the Anonymous user.
          apikey: "<anonymous_user_api_key>"
logging:
  # Set the logging level.
  # The supported levels, in an increasing order of verboseness: 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'. The Default value is 'warning'.
  loglevel: "info"
  logpath: "/tmp/grep11client.log" # The full path of your logging file.

3. Hyper Protect Crypto Services の PKCS #11 ライブラリーのインストール

  1. 最新の PKCS #11 ライブラリーをダウンロードします

  2. 以前に作成した構成ファイル grep11client.yaml および PKCS #11 ライブラリー pkcs11-grep11-<platform>.so.<version> を Db2 コンテナーにコピーします。

  3. root として以下のコマンドを実行することで、Db2 のセットアップに Hyper Protect Crypto Services の PKCS #11 ライブラリーをインストールします。

    mkdir /etc/ep11client
    chmod a+rx /etc/ep11client/
    cp grep11client.yaml /etc/ep11client/grep11client.yaml
    chmod a+r /etc/ep11client/grep11client.yaml
    
    mkdir -p /pkcs11
    cp pkcs11-grep11-<platform>.so.<version> /pkcs11/pkcs11-grep11.so
    chmod -R a+rwx /pkcs11
    
    touch /tmp/grep11client.log
    chmod a+rw /tmp/grep11client.log
    

Db2 のネイティブ暗号化をセットアップする

ここで、Db2 ネイティブ暗号化をセットアップします。 これを行うには、すべてのデータベース管理者特権を持っていることを確認してください。

  1. 次の内容のファイル /pkcs11/keystore.conf を作成します。

    VERSION=1
    PRODUCT_NAME=Other
    ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP=true
    LIBRARY=/pkcs11/pkcs11-grep11.so
    SLOT_ID=0
    NEW_OBJECT_TYPE=PRIVATE
    KEYSTORE_STASH=/pkcs11/pkcs11_pw.sth
    
  2. root として以下のコマンドを実行して、/pkcs11/keystore.conf ファイルの所有権と許可を更新します。

    chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf
    chmod ug+rw /pkcs11/keystore.conf
    
  3. パスワード・スタッシュ・ファイルを作成するには、以下のコマンドを実行します。<normal_user_api_key>は、作成した通常ユーザーの API キーに置き換えてください。

    su - db2inst1
    db2credman -stash -password "<normal_user_api_key>" -to /pkcs11/pkcs11_pw.sth
    
  4. Db2 構成を更新するために、以下のコマンドをユーザー db2inst1 として実行します。

    db2 update dbm cfg using keystore_location /pkcs11/keystore.conf  keystore_type pkcs11
    
  5. 環境変数 DB2_DEK_MAC_TYPE を設定するために、以下のコマンドをユーザー db2inst1 として実行し、DB2 を再起動します。

    db2 terminate
    db2stop
    export DB2_DEK_MAC_TYPE=HMAC
    db2start
    

    Db2 を起動する前に、環境変数 DB2_DEK_MAC_TYPE=HMAC を指定する必要があります。 Windows で Db2 を使用する場合には、以下のコマンドで Db2 プロファイル変数を設定しなければなりません。

    db2set -g DB2_DEK_MAC_TYPE=HMAC
    
  6. 暗号化データベースを作成するために、以下のコマンドを実行します。

    db2 create db cryptdb1 encrypt
    

    このコマンドを実行すると、以下の情報が出力されます。

    DB20000I  The CREATE DATABASE command completed successfully.
    
  7. 暗号化データベースをテストするために、以下のコマンドを実行します。

    db2 connect to cryptdb1
    db2 "create table test (id int not null, data varchar(100))"
    db2 "insert into test values (1, 'This is a secret text')"
    db2 "select * from test"
    

    このコマンドを実行すると、以下の情報が出力されます。

    ID          DATA
    ----------- ----------------------------------------------------------------------------------------------------
          1 This is a secret text
    
    1 record(s) selected.
    

次のステップ

これで、暗号化されたストレージに機密データが安全に保管されるようになりました。 また、マスター鍵は、非常に安全で、改ざん不能な方法によって Hyper Protect Crypto Services に保管されています。

このチュートリアルでは、Hyper Protect Crypto Services を使用して Db2 のネイティブ暗号化をセットアップする方法について学習しました。