
※本記事は、Todd Sharp による “Securely Connecting to Autonomous DB Without a Wallet (Using TLS)” を翻訳したものです。
私はDeveloper Advocateとしての仕事で、多くの開発者と話をします。彼らは長い間Oracle Cloudの製品を使っていることもあれば、Oracle Cloudの経験がほとんどない(あるいは全くない)こともあります。私がAutonomous DB(ADB)について話した開発者のうち、ほとんどの人がクラウドのDBサービスに接続するためにWalletを使用することについて、不快感、または不満を口にしました。実際、優秀で使いやすいADBに対して、私がこれまでに聞いたことのある不満は、おそらくこの点だけです。しかし、今日は良いニュースがあります。
今日は、WalletなしでAutonomous DBに接続できるようになります。 これを記念して、私はあることを明確にするために自分自身と会話することにしました。ここでは、私が自分自身と交わした会話の概要を紹介します。
- でも、どうやって?
- TLSはmTLSよりも安全ではないのですか?
- つまり、安全性が低いということですね。
- TLSを使わなければならないのですか?
- TLSとmTLSの両方を有効にすることはできますか?
- では、TLSを有効にして接続するにはどうすればよいのでしょうか?
- TLSを有効にする
- mTLSを無効にする
- 接続文字列の取得
- Javaアプリケーションの設定
- アプリケーションを起動しよう
- ドキュメントを全部読んでみたい
- まとめ
でも、どうやって?
ー その質問をされると思っていました。答えは…ちょっと複雑です。まずmTLSとは、クライアントとサーバーの両方が特別な秘密鍵を持ち、その鍵をお互いに見せて、自分たちが誰であるかを確認することです。これまで、ADBは、クライアントとサーバーの接続を確立するための特別に安全な方法として、mTLS(mutual TLS)を使用していました。今後は、mTLSの代わりにTLSを使用するようにADBを設定することができます。これは、サーバーだけが特別な秘密鍵を必要とし、クライアントはサーバーの鍵が有効であることを信頼することを意味します。
TLSはmTLSよりも安全ではないのですか?
ー 確かに、クライアントとサーバーの両方で認証情報を交換する方が、無効な接続や不適切な接続の可能性が低くなります。しかし、ADBに接続しているサーバーにWalletをダウンロードしてインストールする必要があります。つまり、誰かがサーバーにアクセスできれば、Walletにもアクセスできる可能性があるということです。たた、後述するように、他のセキュリティ対策でリスクを軽減することができます。
つまり、安全性が低いということですね。
ー そんなことは言っていません。それに、さっきも言ったように、潜在的なセキュリティリスクを軽減するためにできることは他にもあります。例えば、パブリックエンドポイントが公開されているADBインスタンスでTLSを有効にするには、アクセスコントロールリスト(ACL)を設定する必要があります。ACLは「許可」リストで、そこに追加されたIPアドレスやVCN(Virtual Cloud Networks)のみにアクセスを制限するものです。接続を制限するプライベートエンドポイントを使用している場合は、mTLSの代わりにTLSを使用することもできます。VCN外のトラフィックがブロックされるため、接続の安全性に自信を持つことができます。
TLSを使わなければならないのですか?
ー もちろん、そんなことはありません。mTLSとWalletの使用に満足しているのであれば、何も変更する必要はありません。TLS接続はオプトイン方式ですので、何かをオフにしたり、何かを変更したりする心配はありません。ただ、クエリ処理を続けてください。
TLSとmTLSの両方を有効にすることはできますか?
ー もちろん可能です!TLSを有効にして、mTLSの要件を無効にするだけです。
では、TLSを有効にして接続するにはどうすればよいのでしょうか?
ー ご質問いただきありがとうございます。簡単な例を見てみましょう。ここではMicronautを使っていますが、これは私が非常に簡単だと思ったからです。しかし、同じコンセプトはあらゆるJDBCベースの接続に当てはまります。
-
TLSを有効にする
Oracle Cloudコンソールにログインし、ADBインスタンスを選択してインスタンスの詳細を表示します。詳細の中で、「Network」というタイトルのセクションを見つけ、「Access Control List」の隣にある「Edit」をクリックします。

「Edit Access Control List」ダイアログで、エントリーの種類を選び、適切な値を入力します。IPアドレス(私は自分のローカルIPを追加しました)、CIDRブロック(あなたのオフィスには開発者に割り当てられたIPの範囲があるかもしれません)、VCN(名前またはOCID)でエントリーを追加できます。必要な数だけ追加してください。

注意: ACLは「許可リスト」であって、「拒否リスト」ではありません。つまり、リストアップされた例外を除き、すべてのトラフィックをブロックします。
-
mTLSを無効にする
TLSまたはmTLSを使用するには、mTLSの要件を無効にする必要があります。ちょっとわかりにくいですが、こんな風に考えてみてください。mTLSが有効な場合は、mTLSでしか接続できません。無効にした場合は、mTLSまたはTLSのどちらでも接続できます。

ここで、「Require mutual TLS (mTLS) authentication」のチェックを外し、「Save Changes」をクリックします。

-
接続文字列の取得
OJDBCドライバにADBへの接続方法を伝えるtnsnames.oraファイルがなくなったので、JavaアプリケーションのJDBC URLに接続するための接続文字列を取得する必要があります。インスタンスの詳細で、「DB Connection」をクリックします。

DB接続ダイアログの「Connection Strings」で、ドロップダウンメニューから「TLS」を選択します。次に、アプリケーションの要件に応じて適切な接続文字列をコピーします。

-
Javaアプリケーションの設定
私のMicronautアプリケーションでは、設定ファイル(application.yml)で以下の値を設定しています。
datasources:
default:
url: jdbc:oracle:thin:@[PASTE CONNECTION STRING]
driverClassName: oracle.jdbc.driver.OracleDriver
username: [USERNAME]
password: [PASSWORD]
dialect: ORACLE
そしてドキュメントに記載されている最新の OJDBC ドライバがインストールされていることを確認し、アプリケーションを起動しました。
-
アプリケーションを起動しよう
これで完了です!私が必要とした変更はこれだけです。Walletも、Walletの値を保存する秘密も、頭痛の種もなくなりました。私のアプリとADBの間には、安全で暗号化された接続があるだけです。
ドキュメントを全部読んでみたい
そんな方にはこちらがお勧めです。
- Update Network Options to Allow TLS or Require Only Mutual TLS (mTLS) Authentication on Autonomous Database
- JDBC Thin Connections with TLS Authentication
- Configuring Network Access with Access Control Rules (ACLs) and Private Endpoints
まとめ
JavaアプリケーションがADBに接続する際に、mTLSではなくTLSを使用し、Walletなしで安全な暗号化通信を実現しました。
Todd Sharpは、Oracle Cloudを中心としたオラクルのDeveloper Advocateです。当初はColdFusion、最近ではサーバーサイドのJava/Groovy/Grailsで、14年以上にわたってダイナミックJVM言語やさまざまなJavaScriptフレームワークを扱ってきました。米国ジョージア州北部のアパラチア山脈に、妻と2人の子供と一緒に住んでいます。
