キュー・マネージャー Advanced Message Security (AMS) の有効化
IBM MQ Advanced Message Security とは
IBM® MQ Advanced Message Security は、IBM MQ セキュリティー・サービスを拡張して「メッセージ」レベルで暗号化を提供し、重要データ (高価値の金融機関トランザクションや個人情報など) を保護します。 IBM MQ AMS には、アプリケーション AMS およびキュー・マネージャー AMS という 2 つのアプローチがあります。 このチュートリアルでは、キュー・マネージャー AMS に焦点を当てます。
キュー・マネージャー AMS は、以下の機能を提供します。
- 複雑なセキュリティー・コードを作成することも、既存アプリケーションの変更または再コンパイルを行うこともない、包括的なセキュリティー
- メッセージの暗号化およびデジタル署名のサポート
- メッセージの認証、許可、機密性、およびデータ保全性のサービスを提供する Public Key Infrastructure (PKI) テクノロジー
チュートリアルの概要
図: キュー・マネージャー AMS は、キューに入ったメッセージ・データが取り出されるまでに変更されないことを確実化します。
このチュートリアルでは、ネットワークを介して平文のメッセージをキュー・マネージャーに渡します。 実動システムでは、転送中のメッセージを保護するために TLS 対応チャネルを使用することをお勧めします。
このチュートリアルでは、IBM Cloud キュー・マネージャーの IBM MQ キューでの暗号化のためにキュー・マネージャー AMS を構成する手順について説明します。 まず、平文のメッセージを put して get し、メッセージが平文としてキューに置かれることを確認します。 次に、キュー・マネージャー AMS 暗号化を有効にして、キューのメッセージが確実に暗号化されるようにします。 その後、キューのメッセージが暗号化され、無許可のユーザーまたはアプリケーションがメッセージ・データにアクセスしたり変更したりできないようになります。
前提条件
このチュートリアルを進めるには、以下の前提条件を満たしていることが重要です。
-
IBM MQ on Cloud キュー・マネージャー
IBM MQ on Cloud キュー・マネージャーがまだない場合は、以下のガイド付きツアーに従って作成できます。
- 注: キュー・マネージャーでは、まだ TLS が有効になっていません。
ガイド・ツアー、または同じページに記載されている手動ステップに従って、以下のものを用意している必要があります。
- MQ on Cloud キュー・マネージャー
- connection_info.txt ファイルとしてダウンロードされた接続の詳細
- このファイルがない場合は、このチュートリアルの最後にある付録 1 を参照してください。
- platformApiKey.json ファイルとしてダウンロードされた管理ユーザー名と API キー
- このファイルがない場合は、このチュートリアルの最後にある付録 2 を参照してください。
- apiKey.json ファイルにダウンロードされたアプリケーション・ユーザー名と API キー
- このファイルがない場合は、このチュートリアルの最後にある付録 3 を参照してください。
-
IBM MQ Client
このチュートリアルを完了するには、IBM MQ コマンド・ライン・ツール「runmqsc」と IBM MQ サンプル・アプリケーション「amqsputc」および「amqsgetc」が PATH にインストールされている必要があります。 これらのコマンドがない場合は、IBM MQ Client をインストールすることによって入手できます。 このチュートリアルの最後にある付録 4 では、これを行う方法を詳しく説明しています。
- 注: IBM MQ Client は、Windows および Linux でのみ使用可能です。
端末環境のセットアップ
-
2 つの端末ウィンドウを開きます。
- 1 つの端末は、キュー・マネージャーの管理に使用される管理端末になります。
- もう 1 つの端末は、キュー・マネージャーに接続し、メッセージの「put」および「get」操作を実行するアプリケーションを表すアプリ端末になります。
-
管理端末でキュー・マネージャーの詳細を指定します。
後で使用する
runmqsc
コマンドのために、接続先のリモート・キュー・マネージャーを識別するように環境変数を設定することが必要になります。 管理端末で、次のコマンドを使用して、MQSERVER 変数をエクスポートします。export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
<HOSTNAME>
- これは connection_info.txt ファイル内の「hostname」です。<PORT>
- これは connection_info.txt ファイル内の「listenerPort」です。
-
アプリ端末でキュー・マネージャーの詳細を指定します。
後で使用する
amqsputc
コマンドおよびamqsgetc
コマンドのためにも、接続先のリモート・キュー・マネージャーを識別するように環境変数を設定することが必要になります。 アプリ端末で以下のコマンドを使用して、MQSERVER 変数をエクスポートします。 アプリ端末で以下のコマンドを使用して、MQSERVER 変数をエクスポートします。export MQSERVER="CLOUD.APP.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
<HOSTNAME>
- これは connection_info.txt ファイル内の「hostname」です。<PORT>
- これは connection_info.txt ファイル内の「listenerPort」です。
-
アプリ・ユーザー名を指定します。
amqsputc
コマンドおよびamqsgetc
コマンドのために、使用する特定のユーザー名を環境変数に設定することも必要になります。 アプリ端末で、次のコマンドを使用して、MQSAMP_USER_ID 変数をエクスポートします。export MQSAMP_USER_ID="<APP_MQ_USER>"
<APP_MQ_USER>
- これは apiKey.json ファイル内の「mqUsername」です。
-
アプリ端末のアプリケーション AMS を無効にします。
このチュートリアルでは、キュー・マネージャー AMS を有効にします。 したがって、アプリケーション AMS (クライアント AMS と呼ばれることもある) を無効にして、キュー・マネージャーのみが AMS の暗号化と復号を実行し、クライアントは実行しないようにする必要があります。 アプリ端末で以下を実行します。
- IBM MQ Client 7.5:
export AMQ_DISABLE_CLIENT_AMS=TRUE
- IBM MQ Client 8.0 以降:
export MQS_DISABLE_ALL_INTERCEPT=TRUE
- IBM MQ Client 7.5:
デフォルト・キューをターゲットとする別名キューの作成
このセクションでは、デフォルト・キューをターゲットとする別名キューを作成します。 QM AMS が有効になると、デフォルト・キューで「put」または「get」が実行されたときに AMS インターセプターが起動します。 したがって、メッセージは、キューでは暗号化される一方、取得時には平文として読み取り可能になります。 メッセージが暗号化されていることを示すために、別名キューを使用できます。 別名キューを介してメッセージを取得すると、デフォルト・キューによってインターセプターがトリガーされず、メッセージは復号されずにそのまま取得されるため、メッセージが平文であるか暗号化されているかを正確に把握できます。
- 管理端末に切り替えます。
runmqsc
を実行して、リモート・キュー・マネージャーに接続します。
runmqsc -c -u <ADMIN_MQ_USER> -w60 <QUEUE_MANAGER_NAME>
<ADMIN_MQ_USER>
- これは platformApiKey.json ファイル内の「mqUsername」です。<QUEUE_MANAGER_NAME>
- これは connection_info.txt ファイル内の「queueManagerName」です。-c
は、MQSERVER 変数を使用してリモート・キュー・マネージャーに接続するように runmqsc に通知します。
- 端末でパスワードの入力が求められます。
- これは platformApiKey.json ファイル内の <ADMIN_API_KEY> = 'apiKey' です。
- 端末は入力待ちになります。
- デフォルト・キューをターゲットとする別名キューを作成します。
DEFINE QALIAS (DEV.ALIAS.QUEUE.1) TARGET (DEV.QUEUE.1)
- DEV.ALIAS.QUEUE.1 は別名キューの名前です。
- DEV.QUEUE.1 は、このチュートリアルで使用するデフォルト・キューです。
キュー・マネージャー AMS を有効にする前の別名キューのテスト
別名キューが正しく機能し、メッセージが現在平文でデフォルト・キューにあることを示すために、デフォルト・キューに対してメッセージの「put」を実行し、別名キューに対してメッセージの「get」を実行します。
- アプリ端末に切り替えます。
- amqsputc を実行して、デフォルト・キューにメッセージを入れます。
amqsputc DEV.QUEUE.1
- 端末でパスワードの入力が求められます。
- これは apiKey.json ファイル内の <APP_API_KEY> = 'apiKey' です。
- 端末は入力待ちになります。 メッセージを入力してください。
- Enter キーを 2 回押して amqsputc を終了します。
- Enter キーを 2 回押して amqsputc を終了します。
- 別名キューに対して amqsgetc を実行し、デフォルト・キューからメッセージを取得します。
amqsgetc DEV.ALIAS.QUEUE.1
- DEV.ALIAS.QUEUE.1 は別名キューの名前です。
- 端末でパスワードの入力が求められます。
- これは apiKey.json ファイル内の <APP_API_KEY> = 'apiKey' です。
- 端末にデフォルト・キューからのメッセージが出力されます。
- メッセージが平文で返されることに注意してください。これは、デフォルト・キューではメッセージが平文で保管されるためです。
AMS 暗号化に使用する証明書の選択
メッセージを暗号化するようにキュー・マネージャー・チャネルを構成する必要があります。 MQ on Cloud には、Let's Encrypt によって提供されるデフォルトの証明書が付属しており、これを使用してメッセージを暗号化します。 キュー・マネージャー AMS のキュー・マネージャー・チャネルを構成するには、以下のステップに従います。
- IBM Cloud (http://Cloud.IBM.com/) で、ガイド付きツアーの一環として作成した IBM MQ on Cloud キュー・マネージャーを見つけます。
- **「鍵ストア」**タブを選択します。
- デフォルトの証明書の 3 点メニューをクリックします。
- **「管理」**をクリックします。
- **「この証明書をキュー・マネージャー AMS 用に使用」**を有効にします。
- アプリ・チャネル CLOUD.APP.SVRCONN を選択します。
- **「次へ」**をクリックします。
- 警告を読み、**「了解」をクリックし、「保存」**をクリックします。
これで、暗号化に使用するために選択したチャネルおよび証明書のキュー・マネージャー AMS が有効になりました。
- **「詳細のコピー」**をクリックして、任意のテキスト・エディターに貼り付けます。 後で DN フィールドの内容が必要になるため、これを default_cert.txt として保存します。
AMS 暗号化を有効にするポリシーの作成
ここでは、AMS を有効にするために、個々のキューでセキュリティー・ポリシーを構成します。 暗号化を実行するが署名は実行しないことを指定します。 関連するキューにセキュリティー・ポリシーが構成されるまで、暗号化や署名は行われません。
- 管理端末で以下を実行します。
- この端末が runmqsc 内のままである必要があります。 そうでない場合は、上記のように、キュー・マネージャーに対して runmqsc を実行します。
- 以下のコマンドを使用して、ポリシーを作成します。
SET POLICY (DEV.QUEUE.1) ENCALG (AES256) RECIP ('<SUBJECT_DN>')
- DEV.QUEUE.1 は、このチュートリアルで使用するデフォルト・キューです。
- AES256: このチュートリアルで使用する暗号化です。 その他のアルゴリズムについては、こちらを参照してください。
<SUBJECT_DN>
- これは、*「証明書の選択」*の最後のステップで作成される default_cert.txt ファイル内の「Subject DN」です。- 備考。 Subject DN を囲む単一引用符は必須です。
- 以下のように入力して、runmqsc を終了します。
END
キュー・マネージャー AMS が有効になった時点でのキューのテスト
- アプリ端末内で、以下を行います。
- amqsputc を実行して、デフォルト・キューにメッセージを入れます。
amqsputc DEV.QUEUE.1
- 端末でパスワードの入力が求められます。
- これは apiKey.json ファイル内の <APP_API_KEY> = 'apiKey' です。
- 端末は入力待ちになります。 メッセージを入力してください。
- Enter キーを 2 回押して amqsputc を終了します。
- 別名キューに対して amqsgetc を実行し、デフォルト・キューからメッセージを取得します。
amqsgetc DEV.ALIAS.QUEUE.1
- DEV.ALIAS.QUEUE.1 は別名キューの名前です。
- 端末でパスワードの入力が求められます。
- これは apiKey.json ファイル内の <APP_API_KEY> = 'apiKey' です。
- 端末にデフォルト・キューからの暗号化されたメッセージが出力されます。
- 注: メッセージは平文で表示されません。 これは、メッセージがデフォルト・キューで暗号化されるためです。
結論
これで、このチュートリアルは完了です。 キューの IBM MQ AMS を有効にし、これによって、指定されたキューに保管されているメッセージが暗号化されることを確認しました。
トラブルシューティング
- amqsputc が理由コード 2063 を返す
- これは、チャネルの証明書が選択されていない場合に発生することがあります。
- AMS 暗号化に使用する証明書の選択に従います。
- amqsputc が理由コード 2035 を返す
- これは、
export MQS_DISABLE_ALL_INTERCEPT=TRUE
を実行していない場合に発生することがあります。 - 端末環境のセットアップの最後のステップ
- これは、
付録
付録 1: connection_info.txt
キュー・マネージャー接続の詳細を含む connection_info.txt ファイルを取得するには、次のようにします。
- 表に示されている関連サービスをクリックして、IBM Cloud サービス・インスタンスにログインします。
- これにより、「キュー・マネージャー」ビューが開きます。 接続情報の取得元となるキュー・マネージャーを選択します。
- 「接続情報」をクリックします。
- このファイルを「JSON テキスト形式」でダウンロードします。
付録 2: platformApiKey.json
管理者 API キーを作成またはリセットするには、以下のようにします。
- 表に示されている関連サービスをクリックして、IBM Cloud サービス・インスタンスにログインします。
- これにより、「キュー・マネージャー」ビューが開きます。 接続情報の取得元となるキュー・マネージャーを選択します。
- 次に、**「管理」**タブを選択します。
- ここで、**「IBM Cloud API キーの再設定」**をクリックします。
- 注: この MQ ユーザー名の以前の管理 API キーは無効になります。
- 注: ボタンに **「IBM Cloud API キーの作成」**と表示されている場合は、以前にこの方法で API キーが作成されていません。 **「IBM Cloud API キーの作成」**ボタンをクリックします。
- **「ダウンロード」**をクリックして、管理ユーザー名と API キーが含まれた platformApiKey.json をダウンロードします。
付録 3: apiKey.json
新規のアプリケーション API キーを作成するには、以下のようにします。
- 表に示されている関連サービスをクリックして、IBM Cloud サービス・インスタンスにログインします。
- これにより、「キュー・マネージャー」ビューが開きます。 **「アプリケーション資格情報」**タブを選択します。
- 次に、AMS チュートリアルで使用するアプリケーションの横にある 3 点メニューをクリックします。
- **「新規 API キーの追加」**をクリックします。
- 備考。 既存のアプリ API キーは引き続き機能します。
5. **「ダウンロード」**をクリックして、アプリ・ユーザー名と API キーを含む apiKey.json をダウンロードします。
付録 4: IBM MQ C クライアント
IBM MQ Client コマンド・ライン・ツールおよびサンプル (runmqsc、amqsputc、amqsgetc) がない場合は、ここからダウンロードできます。
- 次に示す最新のパッケージを選択します。本書の作成時点での最新バージョンは 9.0.5 です。
- 以下に示すように、パッケージの左側にあるボックスにチェック・マークを付けて、「IBM MQC redistributable client for [Your Operating System]」を選択します。 ファイル名には Redist が含まれているはずです。 このチュートリアルは、 Linux Ubuntu オペレーティング・システムを使用して作成されています。
- HTTPS 経由でダウンロードすることを選択します。これにより、次のように、ブラウザーから直接クライアントをダウンロードできます。
- 注: このオプションが表示されていない場合は、別のブラウザーでお試しください。
- 「続行」をクリックすると、 次に示す画面にリダイレクトされます。 赤い円で示したシンボルをクリックして、ダウンロードを開始します。
- ダウンロードしたら、任意のディレクトリー
<PATH_TO_MQCLIENT_DIR>
にファイルを解凍します。tar -xvzf <IBM-MQC-Redist>.tar.gz <PATH_TO_MQCLIENT_DIR>
- パスにコマンドを追加します。
export PATH=$PATH:<PATH_TO_MQCLIENT_DIR>/bin:<PATH_TO_MQCLIENT_DIR>/samp/bin