OCI Bastionサービスを利用してプライベートリソースに安全に接続する方法(無料) (2021/06/01)
OCI Bastionサービスを利用してプライベートリソースに安全に接続する方法(無料) (2021/06/01)
投稿者:Todd Sharp
クラウド環境では、サーバーやサービスがパブリックインターネットに接続されていないことがよくあります。プライベート仮想クラウドネットワーク(VCN)は、インターネットへのアクセスを必要としないリソースのために存在しますが、トラブルシューティングや一時的な作業のために一時的なアクセスが必要な場合には、課題となります。Oracle Cloud Infrastructure(OCI)のMySQLクラウドサービスは、プライベートネットワーク経由でのみアクセス可能なサービスの一例です。このサービスは完全に管理されているため、お客様のデータを潜在的な攻撃や脆弱性から保護するために、インターネットから隔離された状態になっています。リソースへのアクセスを可能な限り制限するのは良いことですが、いずれはそれらのリソースに接続したいと思うこともあるでしょう。そこで登場するのが、Bastionホストです。Bastionホストは、プライベートリソースと、プライベートネットワークへのアクセスを必要とするエンドポイントとの間に位置するリソースで、SSHやRDPなどのプロトコルでプライベートリソースにログインするための「ジャンプボックス」の役割を果たします。
歴史の授業
皆さんは、「Bastion」という言葉がどこから来たのか気になるでしょう。中世の城では、見張りや防御のために塔が使われていました。塔の高さは大砲の攻撃を受けやすいため、16世紀半ばに塔に代わるものとしてBastionが考案されました。Bastionは、城壁と同じ高さでありながら、外側に向かって角張った形をしており、侵入してくる脅威や攻撃に対して、視界を確保して防御することができます。言い換えれば、Bastionは、城壁内の貴重な資産を守ることだけを目的として建てられた、城のわずかに脆弱な延長部分だったのです。これで、ネットワークのファイアウォールの外側の、露出しているが重要な位置に置かれているサーバーが、なぜ「Bastion」と呼ばれるのかがわかりましたね。
ヒント! Bastionホストを使ってOCI MySQLクラウドサービスに接続する例は、『Complete Guide to Getting Started with MySQL DB in the Oracle Cloud』で紹介しています。
なぜBastionなのか?
では、クラウド契約でBastionホストを使用することのデメリットは何でしょうか。というと、特にありません。Bastionは賢い選択であり、クラウドでは常にセキュリティを最優先すべきです。最近まで、OCIで Bastion hostを利用するには、手動で専用のコンピュートインスタンスを立ち上げ、設定し、管理し、料金を支払う必要がありました。手動で管理しているため、不適切な設定や事故によってセキュリティホールが発生する可能性もわずかながらあります。もし、OCIのプライベートネットワークに、シンプルな(そして無料の)マネージドサービスを使って、基盤機能を提供できたらどうでしょうか?それを可能にするのがOCI Bastion Serviceです。ここでは、このサービスを利用して、OCI テナントのプライベートネットワークに接続するための設定と利用方法を説明します。この記事では、MySQLクラウドサービスインスタンスへの接続を見ていきますが、このサービスはテナント内のあらゆるプライベートリソースに対応しています。
ここでは、Bastionサービスを利用して、MySQLクラウドサービスのインスタンスへのアクセスを取得するために必要な手順をご紹介します。
Collect the Instance VCN, Subnet Name, and Private IP
- Create a Bastion
- Grant Bastion Access to the Private Network
- Create a Session
- Connect via the Bastion
インスタンスのVCN、サブネット名、およびプライベートIPの収集
インスタンスがどのVCNとサブネット内に存在するかを調べる必要があるので、MySQLクラウドインスタンスの詳細をクリックしてメモしておきます(下記1)。その間に、インスタンスのプライベートIPアドレスを取得します(#2)。
Bastionの作成
それでは、Bastionを作成します。Bastionのサービスは、コンソールの検索バーで検索すると見つかります。
Bastionのリストで、「Create Bastion」をクリックします。
名前をつけて、上で集めたVCNとサブネットを選びます。VCNがベースションを作成する場所と異なるコンパートメントに存在する場合は、コンパートメントを変更する必要があるかもしれません。CIDRブロック許可リストに、MySQLサービスに接続したいマシンのIPを入力します。これはおそらく、CIDR表記の自分のローカルIPアドレスになるでしょう。CIDRは、ネットワークのプロではない私たちにとっては厄介な記法ですが、CIDR記法は0から32まであり、各グループで利用できるIPアドレスの数は数が大きくなるにつれて少なくなることを理解してください。つまり、/0は4,294,967,296個の可能なアドレスを意味し、/32は1つのIPアドレスを意味します。単一のIPアドレス(自分のもの)を追加したいだけの場合は、XXX.XXX.XXX.XXX/32という形式で入力します。
ヒント! 私は、ローカルIPを素早く簡単に確認する方法として、curl ifconfig.ioを使用しています。
上記の情報を入力したら、「作成」をクリックします。Bastionは最初「作成中」の状態になります。
Bastionが利用可能になったら、クリックして詳細を表示します。Bastionには、最大許容セッションTTL(time-to-live)が設定されています。これは、そのBastionを使用して作成されたセッションが持続する最長時間です。
BastionのIPアドレスを収集し(#1)、ターゲットとなるサブネットをクリックして(#2)、必要な情報を得ます。
Bastionにプライベートネットワークへのアクセスを許可する
サブネットの詳細の中で、セキュリティリストをクリックします。
bastionのIP(/32)に対して、ポート3306(デフォルトのMySQLポート)のingressルールを追加します。
セッションの作成
MySQLインスタンスへの接続にBastionを使用する場合、毎回「セッション」を作成する必要があります。これを行うには、Bastionの詳細画面に戻り、「Create Session」をクリックします。
コンピュートインスタンスに接続する場合は、「Managed SSH session」を選択してユーザ名を入力しますが、MySQLの場合は「SSH port forwarding session」を選択し、上記で収集したMySQLインスタンスのプライベートIPを入力し、ポート3306を入力します。接続に使用するSSHキーペアの公開鍵を選択するか、貼り付けるのを忘れずに。これらの情報を入力したら、「Create Session」をクリックする。
OCI CLIでは、以下のコマンドでセッションを作成することができます。頻繁に接続する場合には、自分のマシンのエイリアスとして設定することもできますので、良いショートカットになります。
$ oci bastion session create-port-forwarding \ |
--bastion-id ocid1.bastion.oc1…. \ |
--ssh-public-key-file ~/.ssh/id_oci_demo.pub \ |
--target-private-ip 10.0.1.3 \ |
--target-port 3306 \ |
--region us-ashburn-1 \ |
--session-ttl 10800
Bastion経由での接続
この時点で、接続の準備が整いました。手動でSSHコマンドを作成することもできますが、コンソールではセッションリストのメニューをクリックすることで、あらかじめ入力された素敵なスニペットを表示し、コピーすることができます。
自分の<privateKey>を入力し、<localPort>を3306に変更します。verbose出力のために-vを追加します。
「pledge network」と表示されていれば接続されています。
MySQL Workbenchを使ってインスタンスに接続
接続が完了したので、任意のMySQLツールを使用して、localhost:3306または127.0.0.1:3306経由でインスタンスに問い合わせを行うことができます。例えば、MySQL Workbenchを使ってインスタンスへの接続を設定する方法は以下の通りです。
「Test Connection」をクリックすると、インスタンスに接続されていることが確認できます。
まとめ
この記事では、ベースションについて簡単に説明し、その重要性を説明しました。そして、新しいバスションと、そのバスションを使用するセッションを作成しました。そして、そのセッションを使って、MySQLクラウドサービスで稼働しているインスタンスに接続しました。前述のとおり、ベースションサービスは、Oracle Cloudのあらゆるプライベートリソースに安全に接続するための完全に無料の方法です。
コメント
コメントを投稿