＜SecureGatewayの勉強３＞クラウドのBluemixアプリからオンプレミスのDBをセキュアにアクセス。(SecureGatewayクライアント：Linux(ubuntu)編)

# 1. はじめに
<font color="blue"><strong> 「SecureGateway」</strong></font>はBluemixで提供されるサービスです。
 クラウド環境（Bluemix環境）とオンプレミス環境の間でトンネルを確立し、セキュアな接続を提供します。
  これを使えば、クラウド上のBluemixアプリケーションからオンプレミスのDBをアクセスするようなシステムをセキュアに構築することが可能です。
 今回は、BluemixでPHPプログラムを作成し、オンプレに見たてたBluemix Infrastructure(SoftLayer)インスタンスのMySQLにアクセスします。
 尚、今回の<font color="blue">SecureGatewayクライアントはLinux(ubuntu)環境のパターン</font>です。
 また、基本的な内容を理解するという点に主眼を置いたため、今回TLS認証機能は省いています。
 <font color="red">（ご注意) 実システムで構築・利用される際は、セキュリティ対策を十分ご検討の上、適用してください。</font>
 
# ２. SecureGatewayについて
 Bluemixアプリケーションからオンプレミス、クラウド上のデータにアクセスする際、セキュアな経路を提供。
![01.png](http://seahorse-inc.com/QIITA/SecureGateway-3/01.png)
（宛先タイプ：オンプレミス宛先の例）

## ２-1. 接続先の宛先タイプ
 アクセスするアプリケーションプログラムとアクセスされるDBが、Bluemix環境（SecureGateway資料では「クラウドの宛先」と表記されています）にあるのか、オンプレミス環境にあるのかによって宛先タイプが異なります。
 
<strong>（１）クラウドの宛先</strong>
アプリケーションプログラムがオンプレミス、DBがBluemix環境。
![02.png](http://seahorse-inc.com/QIITA/SecureGateway-3/02.png)

<strong>（２）オンプレミスの宛先</strong>
アプリケーションプログラムがBluemix環境、DBがオンプレミス。
![03.png](http://seahorse-inc.com/QIITA/SecureGateway-3/03.png)

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

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

# ３. テスト構成について
 今回は、SecureGateway宛先タイプ：「オンプレミスの宛先」の構成です。
（アプリケーションプログラムがBluemix環境、DBがオンプレミス。）
オンプレミス環境に見たてた、Blumix Infrastructure（SoftLayer）環境に。仮想インスタンスのubuntu1604をデプロイします。
Ubuntu1604には
<font color="blue">① ubuntu用SecureGatewayクライアント
③ MySQL(LAMP)</font>
機能をインストールします。

<strong>【Bluemix側環境】</strong>
■ 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に合わせてください。

<strong>【オンプレミス側環境 （Blumix Infrastructure（SoftLayer））】</strong>
■ 仮想インスタンス：
Ubuntu Linux 16.04 LTS Xenial Xerus Minimal Install (64 bit) 
プライベートIP：10.132.52.225
プライベートIPのみの設定ですが、インターネット環境にアクセスできるように設定してください。
・Server version: Apache/2.4.18 (Ubuntu)
・mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapp


# ４. テスト環境の構築


## ４－1. ubuntuの設定とMySQLのインストール、初期設定
<font color="orange"><《 Blumix Infrastructure（SoftLayer）側作業です 》</font>

▼ ubuntu関連
パッケージリストの更新

```Command:ubuntuパッケージリストの更新
# apt-get update
```

ubuntuインストールされてるパッケージの更新

```Command:ubuntuインストールされてるパッケージの更新
# apt-get -y upgrade
```

ubuntuインストールされてるカーネルの更新

```Command:ubuntuインストールされてるカーネルの更新
# apt-get -y dist-upgrade
```


ubuntuを日本語環境にする
日本語関連のパッケージをインストール

```Command:ubuntu日本語関連のパッケージをインストール
# apt-get -y install language-pack-ja-base language-pack-ja ibus-mozc 
```
システムの文字セットを日本語に変更

```Command:ubuntuシステムの文字セットを日本語に変更
# localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja" 
# source /etc/default/locale
```

▼ LAMPのインストール
LAMPはtaskselでインストールします。

taskselのインストール

```Command:taskselのインストール
# apt-get -y install tasksel 
```
taskselでLAMPをインストールします。
途中で”root”のパスワードを聞いてきます。ここではパスワードを”root"としました。

```Command:taskselでLAMPをインストール
# tasksel install lamp-server 
```

![04.png](http://seahorse-inc.com/QIITA/SecureGateway-3/04.png)

▼ MySQLの構成設定
MySQLの構成ファイルは、一般的に「/etc/mysql/my.cnf」にあるはずですが、これを開くと、
![05.png](http://seahorse-inc.com/QIITA/SecureGateway-3/05.png)
「!includedir /etc/mysql/conf.d/」の指定があり、実体として「/etc/mysql/mysql.conf.d/mysqld.cnf」がMySQLの構成ファイルとなります。

```Command:mysqld.cnfの編集
# nano /etc/mysql/mysql.conf.d/mysqld.cnf
```
・文字コードをutf-8へ変更
mysqld.cnfへ下記内容を追加します。
ここでは、[client]セクションがなかったので、[client]も追加しました。

```Command:mysqld.cnfへ追加
[client]  
default-character-set = utf8
  
[mysqld]  
skip-character-set-client-handshake
character-set-server = utf8  
collation-server = utf8_general_ci  
init-connect = SET NAMES utf8
```
・ネットワークの設定変更
デフォルト値は、bind-address=127.0.0.1　の設定で、自分自身からでないと接続できません。
ここでは、すべてのIPからアクセスできるように行の先頭に「＃」をいれ、コメントアウトします。

・念のため、MySQLの再起動

```Command:MySQLの再起動
/etc/init.d/mysql restart
```
・LAMPバージョン確認

```Command:バージョン確認
# apache2 -v
# mysql --version
# php --version
```
以下のバージョンがインストールされました。
・Server version: Apache/2.4.18 (Ubuntu)
・mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapp
・PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )

以上で「４－1. ubuntuの設定とMySQLのインストール、初期設定」完了です。


## ４－２. MySQLユーザ作成
▼ MySQLに新規ユーザ追加と権限の設定
MAMPのMySQL初期IDとパスワードは、
・ID： root
・パスワード：root  です。

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

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

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

```Command: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」でログインします。

```Command:MySQLを終了
mysql> quit
```
usermuraユーザ（パスワード：Mura3root@）でMySQLにログイン。

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

<font color="blue"><strong>以上で「４－２. MySQLユーザ作成」完了です。</strong></font>

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

```Command:データベースdb1作成
mysql> create database db1;
mysql> use db1
```
▼ テーブルfish作成

```Command:テーブルfish作成
mysql> create table fish(id int ,name varchar(20),price varchar(10));
```
▼ データ登録

```Command:データ登録
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);
```

▼ 登録データ確認

```Command:登録データ確認
select * from fish;
```
![06.png](http://seahorse-inc.com/QIITA/SecureGateway-3/06.png)
確認したら、「quit」で終了してください。

以上で「４－３. MySQLテストデータの作成」完了です。

《 Blumix 側作業 》
## ４－４. Bluemix側のSecureGateway設定
▼ SecureGatewayサービスのオーダー
下記URLより、Bluemixにログインします。
https://console.bluemix.net/home/

![07.png](http://seahorse-inc.com/QIITA/SecureGateway-3/07.png)
「カタログ」より「SecureGateway」をクリック。

![08.png](http://seahorse-inc.com/QIITA/SecureGateway-3/08.png)
「作成」をクリック。

▼ ゲートウェイの追加
![09.png](http://seahorse-inc.com/QIITA/SecureGateway-3/09.png)
「ゲートウェイの追加」をクリック。

![10.png](http://seahorse-inc.com/QIITA/SecureGateway-3/10.png)
ゲートウェイ名の入力。ここでは「muraGW」としました。
ここではゲートウェイ接続の際、セキュリテイトークンを確認しない設定にしますので、”クライアントを接続するためにセキュリティー・トークンを必要とする”と”トークン有効期限”のチェックをはずします。
「ゲートウェイの追加」をクリック。

▼ SecureGatewayクライアントの追加
![11.png](http://seahorse-inc.com/QIITA/SecureGateway-3/11.png)
「クライアントの接続」をクリック。

![12.png](http://seahorse-inc.com/QIITA/SecureGateway-3/12.png)
「IBMインストーラのアイコン」をクリック。
ここでは、Ubuntu14+版のSecureGatewayクライアント　インストーラをダウンロードします。
”ibm-securegateway-client-1.8.0fp3+client_amd64.deb”

下記サイトからもダウンロードできます。
https://sgmanager.ng.bluemix.net/installers/ibm-securegateway-client-1.8.0fp3+client_amd64.deb
”×”をクリックしてウインドウを閉じます。

▼ 宛先の追加
![13.png](http://seahorse-inc.com/QIITA/SecureGateway-3/13.png)
「宛先」タブをクリック。
下の「＋」マークをクリック。

![14.png](http://seahorse-inc.com/QIITA/SecureGateway-3/14.png)
「オンプレミス」を選択。
「次へ」をクリック。

![15.png](http://seahorse-inc.com/QIITA/SecureGateway-3/15.png)
MySQLが動作するオンプレミス側環境 （Blumix Infrastructure（SoftLayer））の仮想インスタンス・プライベートIP：「10.132.52.225」とMySQLのポート番号「3306」を入力。
「次へ」をクリック。

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

![17.png](http://seahorse-inc.com/QIITA/SecureGateway-3/17.png)
宛先で実施される認証の種類は、TLSのオプションです。
前の設定では”TCP”を選択したので、ここでは”None”を選択します。

![18.png](http://seahorse-inc.com/QIITA/SecureGateway-3/18.png)
今回、宛先を非公開にしないので、何も入力せず「次へ」をクリック。

![19.png](http://seahorse-inc.com/QIITA/SecureGateway-3/19.png)
ここでは、この宛先に付ける名前：「オンプレミスMySQL」を入力。
「宛先の追加」をクリック。

<font color="blue"><strong>以上で「４－４. Bluemix側のSecureGateway設定」完了です。</strong></font>

## ４－５. Bluemix側のSecureGatewayクライアント インストール
<font color="orange">《 Blumix Infrastructure（SoftLayer）側作業です 》</font>

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

ダウンロードをローカルPCで行った場合、WinSCPなどを使用して、ubuntu1604に
転送しておきます。
ここでは、ubuntu1604の/tmpディレクトリーに転送しました。
![20.png](http://seahorse-inc.com/QIITA/SecureGateway-3/20.png)

SecureGatewayクライアントパッケージをインストールします。
>アーカイブ名：「ibm-securegateway-client-1.8.0fp3+client_amd64.deb」
パッケージ名：「ibm-securegateway-client」>

```Command:SecureGatewayクライアントパッケージインストール
# dpkg -i ibm-securegateway-client-1.8.0fp3+client_amd64.deb
```

インストールの途中で下記内容を聞いてきます。
※入力タイムアウトで先に進んでいきますが、後で「/etc/ibm/sgenvironment.conf」で設定できます。

(1)プロセスの自動開始
　アップグレード、再インストールの際、既存停止するか。
　ここでは、”No"にし、手動で再始動の設定にしました。
(2)ゲートウェイID
>【ゲートウェイIDの確認方法】
ゲートウェイIDは、BluemixポータルのSecureGatewayサービスの管理で確認できます。
![21.png](http://seahorse-inc.com/QIITA/SecureGateway-3/21.png)
ここでは、”oAhEVELREvJ_prod_ng”でした。
>

(3)セキュリティー・トークン
　ここでは、セキュリティー・トークンを使用しないので「none」。
(4)ロギング・レベル
　デフォルト値の「INFO」。
(5)アクセス制御リスト
　後ほど設定しますので、入力なし。
 

```Command:インストールログ
root@ubuntu1604:/tmp# dpkg -i ibm-securegateway-client-1.8.0fp3+client_amd64.deb
以前に未選択のパッケージ ibm-securegateway-client を選択しています。
(データベースを読み込んでいます ... 現在 98719 個のファイルとディレクトリがインストールされています。)
ibm-securegateway-client-1.8.0fp3+client_amd64.deb を展開する準備をしています ...
[preinst] =============================================================================
[preinst] Started on: Thursday - November 09, 2017 - 01:45:50.988250135
[preinst] Running for userid: root with uid: 0
[preinst] The operation for this install is: install
[preinst] =============================================================================
[preinst] INFO: Performing install operation.
Stop and restart the client during install or upgrade? [y/n]?n
[preinst] INFO:
[preinst] INFO: Creating the secgwadmin GID for Secure Gateway client.
[preinst] INFO: The group secgwadmin does not exist, creating it...
[preinst] INFO: The group secgwadmin was created successfully.
[preinst] INFO: Checking to make sure the GID for secgwadmin was created.
[preinst] INFO: Creating the secgwadmin UID for Secure Gateway client.
[preinst] INFO: The user secgwadmin does not exist, creating it without a homedir...
[preinst] INFO: The user secgwadmin was created successfully.
[preinst] INFO: Checking to make sure the homedir for secgwadmin was created.
[preinst] =============================================================================
[preinst] Completed with SUCCESS
[preinst] Ended on: Thursday - November 09, 2017 - 01:45:52.365285823
[preinst] =============================================================================
[preinst]
[preinst]
ibm-securegateway-client (1.8.0fp3) を展開しています...
ibm-securegateway-client (1.8.0fp3) を設定しています ...
[postinst] =============================================================================
[postinst] Started on: Thursday - November 09, 2017 - 01:45:56.059521006
[postinst] Running for userid: root with uid: 0
[postinst] The operation for this install is: configure
[postinst] =============================================================================
[postinst] INFO: Performing configure operation
[postinst] INFO: Checking if /var/empty is in filesystem
[postinst] INFO: Checking if mail folder for /var/mail/securegateway is in filesystem
[postinst] INFO: Creating mail folder for /var/mail/securegateway
[postinst] INFO: Checking if /var/log/securegateway is in filesystem
[postinst] WARNING: /var/log/securegateway is NOT in filesystem, creating it
[postinst] INFO: Stop and restart the client during this installation: No
[postinst] WARNING: Either you entered No or the prompt to stop and restart the client lapsed!
[postinst] WARNING: The client will NOT be stopped and restarted during this installation.
[postinst] WARNING: You must stop and restart the client manually after the installation has completed.
Enter the gateway IDs, separated by spaces: oAhEVELREvJ_prod_ng
[postinst] INFO:
[postinst] INFO: The gateway ID for this install is: oAhEVELREvJ_prod_ng
Enter the gateway ID security tokens separated by spaces, enter 'none' for no security token: none
[postinst] INFO:
[postinst] INFO: The security token entered is: none
[postinst] INFO: Do you wish to change the startup logging level, values are INFO, DEBUG, ERROR or TRACE, default is INFO
Enter log level for each gateway separated by spaces. Enter 'none' or 'INFO' for default log level: INFO
[postinst] INFO:
[postinst] INFO: The logging level for this secure gateway instance is set to: INFO
[postinst] INFO: Supply ACL File for processing [optional].
Supply ACL File each gateway separated by spaces. Enter none if no ACL file: none
[postinst] INFO:
[postinst] INFO: The Access Control List (ACL) file is set to: none
Would you like to use the client UI (Y/N): y
Please provide the port the run client UI, default is 9003:
[postinst] WARNING: Invalid value provided, setting port to default 9003.
[postinst] INFO: Your responses have been saved in the /etc/ibm/sgenvironment.conf configuration file.
/sbin/init: unrecognized option '--version'

省略
```

<font color="blue"><strong>以上で「４－５. Bluemix側のSecureGatewayクライアント インストール」完了です。</strong></font>

## ４－６. SecureGatewayクライアント設定
▼ アクセス制御リストの作成
アクセス制御リストは、オンプレミスのリソース（ここではMySQL）に対してのアクセス許可と拒否を定義します。
今回の例は、unbuntu1604のプライベートアドレス（10.132.52.225）、MySQLのポート（3306）への接続許可設定です。

設定方法は、
(1) ACLの登録
”/opt/ibm/securegateway/client/”のサンプル「SampleACLFile.txt」をコピーして登録します。
ここでは、”/opt/ibm/securegateway/client/ACLFile.txt”としました。
(2) ACLファイルの指定
”/etc/ibm/sgenvironment.conf”にACLファイルを絶対パスで指定します。

```Command:ACLファイルのコピー
/opt/ibm/securegateway/client# cp SampleACLFile.txt ACLFile.txt
```

```Command:ACLFileへ登録
# nano /opt/ibm/securegateway/client/ACLFile.txt
```
サンプルのデータをすべて消して、「acl allow 10.132.52.225:3306」を登録します。
![22.png](http://seahorse-inc.com/QIITA/SecureGateway-3/22.png)

```Command:ACLFileへ登録
# nano /etc/ibm/sgenvironment.conf
```
ACLファイルを絶対パスで指定します。
![23.png](http://seahorse-inc.com/QIITA/SecureGateway-3/23.png)

▼ SecureGatewayクライアント自動起動の設定
起動の設定方法は色々ありますが、今回は”systemctl”で設定します。

```Command:自動起動の設定
# systemctl enable securegateway_client.service
```
システムを再起動して、正常に動作しているか確認してください。
尚、起動状況は下記ログで確認できます。
「/var/log/securegateway/client_console_xxxxxxx.log」（xxxxxxxは日付け）

>【Bluemix側での接続確認】
BluemixポータルのSecureGatewayサービスの管理画面の右上に接続マークが表示されます。
![24.png](http://seahorse-inc.com/QIITA/SecureGateway-3/24.png)
>

<font color="blue"><strong>以上で「４－６. SecureGatewayクライアント設定」完了です。</strong></font>


## ４－７. DBアクセス用情報の入手
テストプログラムは、PHPでデータアクセスにはPDOを使用します。

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

![25.png](http://seahorse-inc.com/QIITA/SecureGateway-3/25.png)
"宛先：オンプレミスMySQL"の歯車マークをクリック

![26.png](http://seahorse-inc.com/QIITA/SecureGateway-3/26.png)
クラウド・ホスト：ポートが、プログラムで指定するMySQLへの接続先のホスト名とポート番号です。
ここでは、「cap-sg-prd-2.integration.ibmcloud.com:17247」
情報を保存し、「×」でウィンドウを閉じます。

以上で「４－７. DBアクセス用情報の入手」完了です。


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


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

```Command:DBアクセス用テストプログラム(index.php)
(01)	<?php
(02)	// MySQLへの接続情報
(03)	$hostname = 'cap-sg-prd-2.integration.ibmcloud.com';
(04)	$port = 17247;
(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>
```

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

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

```Command: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](http://seahorse-inc.com/QIITA/SecureGateway-2/48.png)
ローカルPCのOSに合ったインストーラーをダウンロードして、インストールしてください。

インストールが完了したら、cfコマンドでログインしてみます。
尚、BluemixのAPIエンドポイントは下記になります。
![27.png](http://seahorse-inc.com/QIITA/SecureGateway-3/27.png)

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

```Command:cfログイン
c:\cf login
```
![28.png](http://seahorse-inc.com/QIITA/SecureGateway-3/28.png)
ここではspaceを複数登録しているので、どのspaceかを聞いてきました。
また、次回ログインからはAPI endpointは登録されているので、入力する必要はありません。
一旦ログアウトします。

```Command:cfログアウト
c:\cf logout
```

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

ログイン

```Command:cfログイン
c:\pgppgm\cf login
```
デプロイ

```Command:デプロイ
c:\pgppgm\cf push dbtest201711091
```
ここではプログラム名を「dbtest201711091」としました。

デプロイが正常に完了してプログラムが実行中です。
![29.png](http://seahorse-inc.com/QIITA/SecureGateway-3/29.png)

Bluemixのダッシュボードでも確認できます。
![30.png](http://seahorse-inc.com/QIITA/SecureGateway-3/30.png)

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

# ５. テストプログラムの実行
▼ プログラムの実行
Bluemixダッシュボードでデプロイしたプログラム”dbtest201711091”の行にある
経路”dbtest201711091.mybluemix.net”をダブルクリックして実行します。
![30.png](http://seahorse-inc.com/QIITA/SecureGateway-3/30.png)

▼ 接続確認
![31.png](http://seahorse-inc.com/QIITA/SecureGateway-3/31.png)
データが正常に表示され、正常にDBアクセスできている事が確認できました。


# ６. おわりに
SecureGatewayクライアント側のパターンをDocker 、Windows(Windows2012R2)、Linux(Ubuntu 16.04)の３パターンで確認しました。
次は、SecureGatewayクライアントとDBサーバの分離について書く予定です。