Azure Private Linkを利用してAWSからAzureのDBに接続する。

2020年2月24日

はじめに

Azure Private LinkかGAしました。

Private LinkがGAしたということでエンプラ界隈で有効活用されるケースが増えると思います。
なぜなら、様々なPaaSサービスがインターナルで外部に公開せず利用できるためです。
これまでインターネット経由では、セキュリティ要件として満たせないため利用できなかった場合が多かったと思います。
Private Linkはそれを解決できます。

さて、今回はPrivate Linkの利用して単にAzure内から接続するのではなく、応用編としてAWSからAzure Databaseに接続する方法を解説します。
構成はこんな感じです。DatabaseはMySQLを選択しています。ほかでも作業自体は変わらないです。

作業を整理すると以下になります。

  • AzureとAWSをVPNを接続する
  • Azure DatabaseでPrivate Linkを有効にする
  • Route53にDNSを登録する(オプション)

AzureとAWSをVPNを接続する

Private Linkとは直接関係ないので、以下の記事を参考に接続してください。

【追記2020/02/24】
注意事項としてはAzure DB側をSlaveとしてレプリケーションすることは現在できません。
AzureDBがSourceの通信はすべてインターネット経由となります。
また、AWS側のRDSをSlave、AzureDB側をMasterにすることも現状できませんでした。
たぶん、ユーザ名が〇〇〇@DB名 が起因しているような感じがしました。

Azure DatabaseでPrivate Linkを有効にする

すでに接続するDBは用意され、VPNでAWSと接続されていることが前提です。

次にDatabaseを開きます。左メニューからPrivate endpoint connectionsを開きます。(まだプレビューの表記が消えてませんね)
開いたらPrivate endpoint と追加するため右ペインの上部にある「+Private endpoint」を開きます。

必要項目を埋めます。

利用するリソースタイプにMySQLを選択し、接続するDBを選択します。

接続するVNETを選択した後に、作成します。
DNSに関してはAWS側からのみアクセスする場合は有無は関係ありません。

しばらくするとエンドポイントが追加されます。

作成されたエンドポイントを開きます。

概要でDBに振られているプライベートIPがわかります。
このIPに接続することでDBに接続できます。
ただし注意すべきこととしてAzure DatabaseはIPでの接続を許可されておらず、FQDNを利用してアクセスする必要があります。

接続の確認を行います。
確認方法はAWSにEC2を立ててアクセスする簡単なものです。
前文で書いた通りFQDNのみアクセスを許可されます。
そこで、HOSTSに書き込みます。

下記のように振り当てています。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost6 localhost6.localdomain6
10.0.0.4    demo-azuredb1.privatelink.mysql.database.azure.com

特にホスト名自体はなんでも大丈夫です。
環境の命名ルールに従ってつけてよいです。

今回は、EC2はAmazon Linux2を利用しmariadbをインストールしmysqlコマンドを実行しています。
この場合、下記のようにエラーがでます。

[ec2-user@ip-172-16-1-154 ~]$ mysql -u dbuser@demo-azuredb1 -p -h demo-azuredb1.privatelink.mysql.database.azure.com
Enter password:
ERROR 9002 (28000): SSL connection is required. Please specify SSL options and retry.

解消するためには

--ssl-cipher=AES256-SHA

とオプションを追加する必要があります。

オプションを設定し接続してみます。

[ec2-user@ip-172-16-1-154 ~]$ mysql -u dbuser@demo-azuredb1 -p -h demo-azuredb1.privatelink.mysql.database.azure.com --ssl-cipher=AES256-SHA
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 64229
Server version: 5.6.42.0 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.02 sec)

接続されDBが確認できました。
以上で接続確認は完了です。

Route53にDNSを登録する(オプション)

複数台のEC2からアクセスなど、HOSTSでは対応できない場合はRoute53を利用します。
ホストゾーンをプライベートで作成しEC2のあるVPNを指定します。

VPCのDNS hostnamesが有効でない場合は有効にします。

以上で少々時間がたった後に利用できるようになります。
前項と同様のコマンドで接続し接続できることを確認しましょう。

まとめ

今回はAWS側からAzure Databaseを利用する方法のひとつとして、Private Linkを使って接続する方法を説明しました。
これはAWSだけではなくオンプレや他のパブリッククラウドでも同様に可能です。
Private Linkを利用してインターナルの通信のみで完結できるため、これまではセキュリティ要件と照らし合わせて無理だった環境でも利用できると思います。
これから、どんどん利用シーンが増えていくと考えています。

AzurePrivate Link

Posted by jkudo