VPN で RDS にプライベートアクセス

こんにちは。
ネクストスケープの開發@mamikaihatsu)です。

毎回、CLIネタが多くて、そろそろシェル芸人を目指してる疑惑が持たれそうですが
今回は、なんと・・・CLIネタではないです。
Client側からAibabaCloud のマネージドデータベース(PaaS)である RDS に
VPNで プライベートアクセスしちゃおう!っていう内容です。


Alibaba CloudへのVPN接続について

    Alibaba CloudへのVPN接続は、

    • リモート接続などで利用するSSL-VPN接続
    • サイト間接続などで利用するIPSec-VPN接続

    があり、今回記載するのは、SSL-VPN接続になります。


    対象者

    • Client側のアプリから、プライベートアクセスでDBに接続したい方
    • クラウド側でWEBサーバー&DBサーバー(RDS)を構築していて、RDSはインターネットアクセスは許可したくないけど、オンプレから管理操作したい方

    には、特に読んでいただきたいと思います。
    また、ClientアプリのDBを現在はオンプレで利用していて、今後DBをクラウドに移行したいけど、RDSを使うかECSでDB構築するかで迷っている方も、ちょこっと参考にもなるかもしれません。


    手順

    今回の作成手順です。
    既存環境にVPN接続する場合は、[AlibabaCloud環境 準備]の部分については
    RDSのホワイトリスト追加の部分だけ行ってください。

    AlibabaCloud環境 準備

    • VPC
    • VSwitch
    • RDS

    VPN設定(Alibaba Cloud側)

    • VPN Gateway
    • SSL Server
    • SSL Client

    VPN設定(Client側)

    • Open VPN

    AlibabaCloud環境 準備

    VPC、VSwitch、RDSを作成します。
    VPNとVSwitchは管理コンソールでやるほどでもないかなと思い、CLIで記載してます。
    WebCLIからインストール無しで実行できます。

    VPC作成

    $ aliyun vpc CreateVpc --RegionId ap-northeast-1 --CidrBlock "10.10.0.0/22" --VpcName "p2s-vpc"

    VSwitchの作成

    $ aliyun ecs CreateVSwitch --VpcId vpc-xxxxx --ZoneId ap-northeast-1a --CidrBlock 10.10.0.0/22 --VSwitchName "p2s-vsw"

    ※VpcIdはVPC作成時に発行されたIDを指定

    RDS作成

    私の記事としてはRDSは初登場なので、管理コンソールから作成してみます。


    ApsaraDB for RDS を選択し、[インスタンスを作成]をクリック


    ネットワークは、先に作成したVPCとVSwitchを選択します。
    本記事ではMicrosoft SQL Serverを作成しますが、お好みのDBでOKです。
    最後のClientからの接続確認だけ、利用エンジンに合わせて変えてもらえれば。


    [利用規約とRDS SLAに同意する]にチェックを入れて、[今すぐ支払い]をクリック

    これでRDS作成完了です。

    RDS設定

    RDS作成後に最初に必要なのは
    1.アカウントの作成
    2.ホワイトリストグループの追加
    3.照合順序やタイムゾーン変更
    になります。
    VPN接続では1,2でも接続が可能な為、3は省略致します。


    インスタンスをクリックして設定を進めていきます。

    ■特権アカウント

    アカウント管理 > アカウント作成 をクリック


    最初にアカウントを作成する場合、まずは特権アカウントを作成

    ■ホワイトリスト

    セキュリティコントロール > ホワイトリストグループを追加 をクリック


    ホワイトリストに、Client側のローカルIP(例:192.168.10.5)を入力します。

    これで接続先となる AlibabaCloud環境 の準備は完了です。


    VPN設定(Alibaba Cloud側)

    Alibaba Cloud のVPNの接続設定を行う為、
    VPN Gateway,SSL Server SSL Clinetを作成します。

    VPN Gateway 作成


    VPN Gateways > [VPN Gateway の作成]をクリック


    接続先のVPCを選択し、VPNの接続方法は
    IPsec-VPN :無効化
    SSL-VPN :有効化
    を選択します。


    [利用規約とSLAに同意する]にチェックを入れて[有効化]をクリックします。

    SSL Server 作成

    認証サーバーであるSSL Serverを作成します。

    SSL Servers > [SSLサーバーの作成]をクリック

    作成したVPN Gatewayを指定し、以下を指定します。
    ローカルネットワーク:RDSが配置されているVSwitchのIPアドレス範囲(例:10.10.0.0/22)
    クライアントサブネット:ローカルのClient側のIPアドレス範囲(RDSのホワイトリストで指定したIPが含まれる)

    SSL Client作成

    SSLサーバーへ接続する為に、クライアント証明書を作成します。


    SSL Clients > クライアント証明書を作成


    先程作成したSSLサーバーを指定します。


    作成後、アクションから[ダウンロード]をクリックし、certs.zipを保存しておきます。

    以上で、AlibabaCloud側の設定は完了です。


    VPN設定(Client側)

    次は、ローカルのClient側の設定になります。

    OpenVPN

    https://www.openvpn.jp/
    から OpenVPNをインストール


    インストールしたファイルは、OpenVPN\bin内の実行ファイルに対して
    右クリック > プロパティ > 互換性 > 管理者としてプログラムを実行する にチェックしておきます。


    Alibaba Cloudからダウンロードしたcerts.zip内のファイルを
    OpenVPN\configフォルダ内へコピーします。


    OpenVPN\configフォルダ内の
    config.ovpnファイルを右クリック > Start OpenVPN on this config file をクリック


    「Initialization Sequence Completed」 が表示するとSSL Serverに接続完了


    AlibabaCloudの管理コンソールの[SSL Servers]の一覧からも、SSL Serverに接続されていることが確認出来ます。


    RDSへの接続確認

    先程の確認では、Client側からSSL Serverへの接続が出来たことが確認出来ました。
    次はClient側からRDSへ接続できるかどうか確認します。


    管理コンソールのRDSの[データベースの接続]から接続文字列を事前にコピーしておきます。

    では、RDSはSQL Serverを作成したのでManagement Studioでアクセスしてみます。


    先ほどコピーした接続文字列を[Server name]に入力します。
    Server name:rm-xxxxxxxx.mssql.japan.rds.aliyuncs.com,3433(イントラネットアドレス)


    アクセスできました!


    まとめ

    ClientとECSでVPN接続する場合は、今回作成したVPNにセキュリティグループとECSの追加で接続可能です。
    DBがRDS やECSで構築にろうともVPNの設定自体は同じです。
    このあたりがとても分かりやすいですね。
    IaaS,PaaSに限らずVPCに配置可能なプロダクトであれば、VPN接続が可能との事なので、セキュア環境を構築しやすいと思います。

    次回、AlibabaCloudのRDSへのDB移行か、VPN-IPSec接続あたりを書こうかな♪