投稿者:ソリューション担当



ご利用は計画的に

IBM Bluemix 上には、Secure Gateway サービスというオンプレミスと Bluemix 環境の通信をトンネリングしてオンプレミス側(これはBluemix CF環境以外を示しています)のリソースをBluemixのCFアプリケーションから利用するためのものです。非常に便利に簡単に利用できるのですが、何も考えずに利用するとセキュリティ上の問題になりますのでここでは注意点を書いておきます。

注意点

  • Secure Gateway で公開したリソース(クラウドホスト:ポート)は、 インターネット上にアクセス制限無しで公開される (ディフォルトの状態)
  • リソース(クラウドホスト:ポート)に対して制限を設けるために、「アプリケーションサイドTLS」または「IPテーブル・ルール」を利用して制限を行うこと。
  • アプリケーション要件が許すのであれば「アプリケーションTLS」を構成し、利用時のみ有効化することが望ましい。

資料「アプリからのアクセス」必読
* https://console.bluemix.net/docs/services/SecureGateway/sg_023.html#sg_023

なんか、社内のデータベースとか簡単にCFアプリケーションに繋げられます的な説明があるのですが単に設定しただけでは社内のデータベースを外部に公開していることになるってしまうので気をつけましょう&ドキュメントはよく読みましょう。最近は、Bluemix上のアプリケーションの中にもSecure Gateway が利用可能な物が増えてきました。そういったアプリは上記の「アプリケーションサイドTLS」を自動的に構成して接続してくれるものもありますので利用可能な場合には検討して見るべきでしょう。

補足

以下の例は、Secure Gateway Client 上の設定用UIに対しての「宛先」設定になっています。この場合、セキュリティの設定が何もされていないため提供される「クラウドホスト:ポート」に対してインターネット上のどの端末からもアクセスが出来てしまいます。

image.png

ここでは、ネットワークセキュリティの「IPテーブルルールを使用して、この宛先のクラウドアクセスを制限します」にチェックを入れて「宛先を更新」します。

image.png

これで「IPアドレス」に送信元IPアドレス(直接アクセスする端末のIPアドレス)を記入しないと通信が許可されない状態になっています。では、実際の場合を考えてみましょう。CFアプリケーションは、実行時にそのアプリケーションが実行するノードが確定します。そのため、一般的なユースケースであるCFアプリケーションからSecure Gateway を経由してなんらかのデータを処理することを考えた場合にはCFアプリケーションのIPアドレスを取得する必要があります。

ドキュメントにもありますが、CFアプリケーション上で環境変数CF_INSTANCE_IPに実行ノードのIPアドレスが格納されます。この値を利用して、CFアプリケーションの内部でREST APIを利用して設定を行う必要があります。

curl -X PUT "https://sgmanager.ng.bluemix.net/v1/sgconfig/<gateway_id>/destinations/<destination_id>/ipTableRule"
    -H "Authorization: Bearer <security_token>" -H "Content-type:  application/json" -d
    '{"src":"<app_IP>","app":"<app_ID>"}'  -k

ドキュメント内で指定されているapiは上記になります。特に変則的な事はありません。 app_idはソースポートになりますが指定しないでも設定することは可能です。私はハマっていましたがメソッドがPOSTじゃなくてPUTなので気をつけましょう。