LoginSignup
2
1

More than 5 years have passed since last update.

<SecureGatewayの勉強2>クラウドのBluemixアプリからオンプレミスのDBをセキュアにアクセス。(SecureGatewayクライアント:Windows編)

Last updated at Posted at 2017-11-05

1. はじめに

「SecureGateway」はBluemixで提供されるサービスです。
クラウド環境(Bluemix環境)とオンプレミス環境の間でトンネルを確立し、セキュアな接続を提供します。
これを使えば、クラウド上のBluemixアプリケーションからオンプレミスのDBをアクセスするようなシステムをセキュアに構築することが可能です。
今回は、BluemixでPHPプログラムを作成し、オンプレに見たてたBluemix Infrastructure(SoftLayer)インスタンスのMySQLにアクセスします。
尚、今回のSecureGatewayクライアントはWindows環境のパターンです。
また、基本的な内容を理解するという点に主眼を置いたため、今回TLS認証機能は省いています。
(ご注意) 実システムで構築・利用される際は、セキュリティ対策を十分ご検討の上、適用してください。

2. SecureGatewayについて

Bluemixアプリケーションからオンプレミス、クラウド上のデータにアクセスする際、セキュアな経路を提供。
01.png
(宛先タイプ:オンプレミス宛先の例)

2-1. 接続先の宛先タイプ

アクセスするアプリケーションプログラムとアクセスされるDBが、Bluemix環境(SecureGateway資料では「クラウドの宛先」と表記されています)にあるのか、オンプレミス環境にあるのかによって宛先タイプが異なります。

(1)クラウドの宛先
アプリケーションプログラムがオンプレミス、DBがBluemix環境。
02.png

(2)オンプレミスの宛先
アプリケーションプログラムがBluemix環境、DBがオンプレミス。
03.png

この2つの宛先タイプを組み合わせることにより、双方向での通信処理が可能となります。

(注意)SecureGatewayの無償プラン(Essentials)では、宛先、クライアントそれぞれ1つまでです。
双方向での通信処理では宛先、クライアントが最低2つとなりますので、無償プランではなく有償プラン(ProffesionalまたはEnterprise)を選択する必要があります。

3. テスト構成について

今回は、SecureGateway宛先タイプ:「オンプレミスの宛先」の構成です。
(アプリケーションプログラムがBluemix環境、DBがオンプレミス。)
オンプレミス環境に見たてた、Blumix Infrastructure(SoftLayer)環境に。仮想インスタンスのWindows2012R2をデプロイします。
Windows2012R2には
① Windows用SecureGatewayクライアント
③ MySQL(MAMP3.3)

機能をインストールします。

【Bluemix側環境】
■ SecureGateway:Bluemix 2017年10月現在提供のバージョン
■ PHP:Bluemix Cloud Foundry 2017年10月現在提供のバージョン4.3.27
■ cfコマンド:PHPプログラムをBluemixにデプロイするために使用。
ここでは、”Windows10(32bit)環境 cf version 6.19.0+b29b4e0-2016-06-08”を使用しましたが、お使いのクライアントPC環境のOSに合わせてください。

【オンプレミス側環境 (Blumix Infrastructure(SoftLayer))】
■ 仮想インスタンス:
Windows2012R2
プライベートIP:10.132.52.225
プライベートIPのみの設定ですが、インターネット環境にアクセスできるように設定してください。

4. テスト環境の構築

4-1. MySQLのインストールと設定

<《 Blumix Infrastructure(SoftLayer)側作業です 》
MySQLにはMAMPを使用します。
MAMPはMySQL、Apache、PHPがパッケージが含まれ、インストールから構築が簡単にでます。
(MAMP:Macintosh Apache MySQL PHP)
尚、従来からのXAMPはバージョン5.6よりMySQLからMariaDBに移行されています。

▼ MAMPのインストール
下記サイトからMAMPをダウンロードします。
https://www.mamp.info/en/
MAMP Proは有償版です。ここではFREE版を使用します。

04.png
「DOWNLOAD」ボタンをクリック。

05.png
「Download」ボタンをクリック。

06.png
「Next」ボタンをクリック。

07.png
"MAMP PRO"のチェックを外す⇒「Next」ボタンをクリック。

08.png
"I accept the agreement"を選択⇒「Next」ボタンをクリック。

09.png
デフォルトのインストールフォルダーは"C:\MAMP"
ここではデフォルトフォルダーは"C:\MAMP"にインストール
「Next」ボタンをクリック。

10.png
「Next」ボタンをクリック。

11.png
"Create a desktop icon"をチェック
「Next」ボタンをクリック。

12.png
「Install」ボタンをクリック。

13.png
「Finish」ボタンをクリックしてインストール完了。

デスクトップにショートカットができていますので、クリックするとMAMPが起動します。
14.png
15.png

▼ パスの設定
MySQLモニタ起動のために、”c:\mamp\bin\mysql\bin”にパスを通します。
16.png

▼ 文字エンコーディングの設定
文字化けしないように、文字エンコーディングの設定を行います。
・DBデータをUTF-8
・MySQLモニタ用にcp932を設定。

c:\mamp\conf\mysql\my.iniをエディターで開いて
・[mysqld]セクションに
character-set-server = utf8
・[mysql]セクションに
default-character-set = cp932
を設定します。
17.png

MySQLを再起動します。
15.png
「Stop Servers」をクリック⇒「Start Servers」をクリック

▼ MySQLに新規ユーザ追加と権限の設定
MAMPのMySQL初期IDとパスワードは、
・ID: root
・パスワード:root です。

コマンドプロンプトより、MySQLモニターを起動して
rootユーザ(パスワード:root)でMySQLにログイン。

rootユーザでMySQLにログイン
> mysql -u root -proot

18.png

今回のテストで使用するユーザを下記内容で作成します。
・ユーザー:「usermura」
・パスワード:「Mura3root@」
また、usermuraの権限をすべて操作できるように設定します。

MySQLに新規ユーザ追加と権限の設定
mysql> CREATE USER usermura IDENTIFIED BY 'Mura3root@';
mysql> GRANT ALL PRIVILEGES ON *.* TO usermura@'localhost' IDENTIFIED BY 'Mura3root@' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO usermura@'%' IDENTIFIED BY 'Mura3root@' WITH GRANT OPTION; 
mysql> FLUSH PRIVILEGES;

usermuraで正常にログインできるか確認。
MySQLコマンドラインを”quit"で終了し、再度「usermura」でログインします。

MySQLを終了
mysql> quit

usermuraユーザ(パスワード:Mura3root@)でMySQLにログイン。

usermuraユーザでMySQLにログイン
> mysql -u usermura -pMura3root@

以上で「4-1. MySQLのインストールと設定」完了です。

4-2. MySQLテストデータの作成

▼ データベースdb1作成
usermuraユーザでMySQLへログイン後、以降の操作を行います。

データベースdb1作成
mysql> create database db1;
mysql> use db1

▼ テーブルfish作成

テーブルfish作成
mysql> create table fish(id int ,name varchar(20),price varchar(10));

▼ データ登録

データ登録
insert into fish values(1, 'マアジ',120);
insert into fish values(2, 'カンパチ',270);
insert into fish values(3, 'カツオ',210);
insert into fish values(4, 'マダイ',320);
insert into fish values(5, 'クロダイ',290);
insert into fish values(6, 'メジナ',180);
insert into fish values(7, 'イサキ',310);
insert into fish values(8, 'ハタハタ',650);
insert into fish values(9, 'ムツ',380);
insert into fish values(10, 'カワハギ',150);
insert into fish values(11, 'カタクチイワシ',110);
insert into fish values(12, 'マコガレイ',360);

▼ 登録データ確認

登録データ確認
select * from fish;

19.png
確認したら、「quit」で終了してください。

以上で「4-2. MySQLテストデータの作成」完了です。

《 Blumix 側作業 》

4-3. Bluemix側のSecureGateway設定

▼ SecureGatewayサービスのオーダー
下記URLより、Bluemixにログインします。
https://console.bluemix.net/home/

20.png
「カタログ」より「SecureGateway」をクリック。

21.png
「作成」をクリック。

▼ ゲートウェイの追加
22.png
「ゲートウェイの追加」をクリック。

23.png
ゲートウェイ名の入力。ここでは「muraGW」としました。
ここではゲートウェイ接続の際、セキュリテイトークンを確認しない設定にしますので、”クライアントを接続するためにセキュリティー・トークンを必要とする”と”トークン有効期限”のチェックをはずします。
「ゲートウェイの追加」をクリック。

▼ SecureGatewayクライアントの追加
24.png
「クライアントの接続」をクリック。

25.png
「IBMインストーラのアイコン」をクリック。
ここでは、Windows版のSecureGatewayクライアント インストーラをダウンロードします。
”ibm-securegateway-client-1.8.0fp3+client_windows.exe”

”×”をクリックしてウインドウを閉じます。

▼ 宛先の追加
26.png
「宛先」タブをクリック。
下の「+」マークをクリック。

27.png
「オンプレミス」を選択。
「次へ」をクリック。

28.png
MySQLが動作するオンプレミス側環境 (Blumix Infrastructure(SoftLayer))の仮想インスタンス・プライベートIP:「10.132.52.225」とMySQLのポート番号「3306」を入力。
「次へ」をクリック。

29.png
ここでは認証を行わないの設定の”TCP”を選びました。
”TCP”は証明書なしで、ゲートウェイと通信できます。
ユーザー/アプリケーションが宛先への接続に使用するプロトコル:「TCP」を選択。
「次へ」をクリック。

30.png
宛先で実施される認証の種類は、TLSのオプションです。
前の設定では”TCP”を選択したので、ここでは”None”を選択します。

31.png
今回、宛先を非公開にしないので、何も入力せず「次へ」をクリック。

32.png
ここでは、この宛先に付ける名前:「オンプレミスMySQL」を入力。
「宛先の追加」をクリック。

以上で「4-3. Bluemix側のSecureGateway設定」完了です。

4-4. Bluemix側のSecureGatewayクライアント インストール

《 Blumix Infrastructure(SoftLayer)側作業です 》

前の「4-3. Bluemix側のSecureGateway設定 ▼ SecureGatewayクライアントの追加」でダウンロードした
”ibm-securegateway-client-1.8.0fp3+client_windows.exe”
を使用します。

33.png

34.png
インストールフォルダーは初期値を使用しました。
「Next」をクリック。

35.png
「Japanese」選択 ⇒「Next」をクリック。

36.png
ここでは、サービスとして起動しないので、チェックを外す。
「Next」をクリック。

37.png
ゲートウェイIDを入力⇒「Next」をクリック。

【ゲートウェイIDの確認方法】
ゲートウェイIDは、BluemixポータルのSecureGatewayサービスの管理で確認できます。
38.png
ここでは、”MJGrTKU2koe_prod_ng”でした。

39.png
port number(9003)がセットされているのでそのままで、「Install」ボタンをクリック。

以上で「4-4. Bluemix側のSecureGatewayクライアント インストール」完了です。

4-4. SecureGatewayクライアント設定

SecureGatewayクライアントを起動し、接続を許可するリソースを指定(ここではMySQLへのアクセス許可を設定)します。
デフォルト値でインストールすると、ディレクトリーは
”C:\Program Files (x86)\Secure Gateway Client\ibm\securegateway\client”です。
起動コマンド:secgw.cmd
40.png

secgwで起動
41.png
configファイルの詳細値を使用して起動するか?との質問に対し、ここでは”Yes”で起動。
起動後、SecureGatewayのコマンドプロンプトが表示され、コマンド待ち受け状態になります。
42.png
これで、Bluemix側のSecureGatewayサービスと接続されました。

【Bluemix側での接続確認】
BluemixポータルのSecureGatewayサービスの管理画面の右上に接続マークが表示されています。
43.png>

次に接続を許可するリソースを指定(MySQLへのアクセス許可を設定)します。

SecureGatewayクライアントCLIコマンドの”A”で指定します。
"A hostname:port workerID"
hostname:MySQLインスタンスのプライベートIPアドレス”10.132.52.225”
port:MySQLのポート番号"3306"
workerID:”1”

【workerIDの確認方法】
workerIDは、SecureGatewayクライアントCLIコマンドの”L”で確認できます。
44.png>

MySQLへのアクセス許可の設定
> A 10.132.52.225:3306 1

45.png>

以上で「4-4. SecureGatewayクライアント設定」完了です。

4-5. DBアクセス用情報の入手

テストプログラムは、PHPでデータアクセスにはPDOを使用します。

▼MySQLへの接続先のホスト名とポート番号入手
《 Blumix 側作業です 》
BluemixのSecureGateway管理画面から宛先情報を取得します。

46.png
"宛先:オンプレミスMySQL"の歯車マークをクリック

47.png
クラウド・ホスト:ポートが、プログラムで指定するMySQLへの接続先のホスト名とポート番号です。
ここでは、「cap-sg-prd-1.integration.ibmcloud.com:17872」
情報を保存し、「×」でウィンドウを閉じます。

以上で「4-5. DBアクセス用情報の入手」完了です。

4-6. DBアクセス用テストプログラムの作成とBluemixにデプロイ

テストプログラム名称を”index.php”とします。
また、プログラムの保存場所はローカルPCの"c:\phppgm\"フォルダーです。Blumixへのデプロイはいくつかありますが、CloudFoundryの”cfコマンド”を使用しました。
尚、phpでPDOを使用しますので、その設定も合わせて記載しました。

▼ DBアクセス用テストプログラム
"c:\phppgm\index.php"で保存して下さい。
※説明しやすいように行番号(xx)をつけてます。

DBアクセス用テストプログラム(index.php)
(01)    <?php
(02)    // MySQLへの接続情報
(03)    $hostname = 'cap-sg-prd-1.integration.ibmcloud.com';
(04)    $port = 17872;
(05)    $dbname = 'db1';
(06)    $username = 'usermura';
(07)    $password = 'Mura3root@';
(08)    $dsn = 'mysql:dbname='.$dbname.';host='.$hostname.';port='.$port;
(09)    ?>
(10)    
(11)    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
(12)    <html>
(13)    <head>
(14)    <title>MySQL接続テスト</title>
(15)    <meta http-equiv="viewport" content="width=device-width, initial-scale=1" />
(16)    <meta http-equiv="apple-mobile-web-app-capable" content="yes" />
(17)    </head>
(18)    <body>
(19)    <h1>DBアクセス用テスト</h1>
(20)    <br/>
(21)    <table border="1">
(22)    <tr><th>id</th><th>name</th><th>price</th></tr>
(23)    
(24)    <?php
(25)    try{
(26)        $dbh = new PDO( $dsn, $username, $password );
(27)        if($dbh != null){
(28)            $sql = "SELECT id, name, price FROM fish";
(29)            print $sql;
(30)        $stmt = $dbh->query($sql);
(31)        while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
(32)        $id = $row['id'];
(33)        $name = $row['name'];
(34)        $price = $row['price'];
(35)        //rowデータ表示
(36)        $tr = "<tr><td>".$id."</td>"
(37)            . "<td>".$name."</td>"
(38)            . "<td>".$price."</td></tr>\n";
(39)        echo $tr;
(40)        }
(41)        $dbh = null;
(42)        }
(43)    }catch( PDOException $e){
(44)        print('Error: '.$e->getMessage());
(45)        die();
(46)    }
(47)    ?>
(48)    </table>
(49)    </body>
(50)    </html>

(03)(04) MySQLへの接続先ホスト名とポート番号
「4-5. DBアクセス用情報の入手 ▼MySQLへの接続先のホスト名とポート番号入手」で入手した情報を設定。
MySQLへのログインID、パスワード
「4-1. MySQLのインストールと設定 ▼ MySQLに新規ユーザ追加と権限の設定」で設定したログインID、パスワードを設定。
(08)) DSN情報を変数$dsnに代入
(26)) PDOクラスのオブジェクトを作成し、$dbh変数に代入
(28)) SQL文を変数$sqlへ代入
(30)) queryメソッドでSQL文を発行し、結果を$stmtオブジェクト変数に挿入
(31)-(40)) fetchメソッドで、配列変数$rowに代入し表示
データがなくなるまで繰り返し。
(43)-(45)) try範囲でエラーがあったら、エラーメッセージを表示して終了

▼ Bluemix PHPにPDO設定を拡張
PDOを使用するための設定を行います。
前で作成した”c:\phppgm”フォルダーの下に”.bp-config”を作成し、その中に”options.json”ファイルを作成します。
尚、”.bp-config”フォルダーはドットファイル(フォルダー)のため、コマンドプロンプトでは作成できません。エクスプローラで作成してください。
「c:\phppgm.bp-config\options.json」

options.jsonの内容
{
    "PHP_EXTENSIONS": [ "bz2", "zlib", "curl", "mcrypt", "mbstring", "mysql", "pdo", "pdo_mysql", "fileinfo", "ftp", "zip" ]
}

PDO以外にも、便利な機能を拡張設定しています。

▼ CloudFoundry CLIツールのインストール
今回、テストプログラムをBluemixへデプロイするには、”CloudFoundry CLIツール”の”cfコマンド”を使用します。
下記URLにアクセスして、ローカルPCにCloudFoundry CLIツールをインストールします。
https://github.com/cloudfoundry/cli/releases
48.png
ローカルPCのOSに合ったインストーラーをダウンロードして、インストールしてください。

インストールが完了したら、cfコマンドでログインしてみます。
尚、BluemixのAPIエンドポイントは下記になります。
49.png

今回、Bluemixは米国南部地域を使用しますので、API endpointは”https://api.ng.bluemix.net” になります。
BluemixのID、パスワードを準備してください。

cfログイン
c:\cf login

50.png
ここではspaceを複数登録しているので、どのspaceかを聞いてきました。
また、次回ログインからはAPI endpointは登録されているので、入力する必要はありません。
一旦ログアウトします。

cfログアウト
c:\cf logout

▼ テストプログラムをBluemixへデプロイ
コマンドプロンプトから、cfコマンドでpushします。
今回は、テストプログラムの構成を記載するmanifest.ymlは指定しません。デフォルト値でデプロイします。

ログイン

cfログイン
c:\pgppgm\cf login

デプロイ

デプロイ
c:\pgppgm\cf push dbtest20171105

ここではプログラム名を「dbtest20171105」としました。

デプロイが正常に完了してプログラムが実行中です。
51.png

Bluemixのダッシュボードでも確認できます。
52.png

以上で「4-6. DBアクセス用テストプログラムの作成とBluemixにデプロイ」完了です。

5. テストプログラムの実行

▼ プログラムの実行
Bluemixダッシュボードでデプロイしたプログラム”dbtest20171105”の行にある
経路”dbtest20171105.mybluemix.net”をダブルクリックして実行します。
52.png

▼ 接続確認
53.png
データが正常に表示され、正常にDBアクセスできている事が確認できました。

6. おわりに

今回は、SecureGatewayクライアントがWindowsパターンでしたが、他のパターンでも書く予定です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1