セキュアなkvstoreでのプロキシの使用
プロキシの起動
次のステップを使用して、Oracle NoSQL Databaseプロキシをセキュアなkvstoreで開始できます。
- セキュアなプロキシ接続がブートストラップされる必要があります。プロキシを起動する前に、プロキシでセキュリティ接続をブートストラップするためのブートストラップ・ユーザーをセキュアなkvstoreに作成する必要があります。SQLシェルで次のコマンドを実行すると、プロキシ用のブートストラップ・ユーザーが作成されます。SQL初心者ガイドのOracle NoSQL Databaseシェル用のSQLの概要を参照してください。
sql-> CREATE USER <proxy_user> IDENTIFIED BY "<proxy_password>";
説明proxy_user
はユーザー名です。proxy_password
は、proxy_user
のパスワードです。
注意:
ブートストラップ・ユーザーの場合、デフォルトの権限で十分です。管理権限やその他の追加権限をブートストラップ・ユーザーに付与することはお薦めしません。
注意:
ブートストラップ・ユーザーには、ユーザーが任意の名前を指定できます。
- プロキシ関連ファイルを格納できるディレクトリ
/proxy
を作成します。 - ブートストラップ・ユーザー用に、次の情報を含むログイン・ファイル
proxy.login
を作成します。
説明oracle.kv.auth.username=<proxy_user> oracle.kv.auth.pwdfile.file=proxy.passwd oracle.kv.transport=ssl oracle.kv.ssl.trustStore=client.trust
proxy.passwd
は、proxy_user
ユーザーのパスワード値を格納するファイルです。client.trust
は、kvstoreデプロイメントから取得した証明書信頼ファイルです。
kvstoreクライアント・マシンで
proxy.passwd
ファイルおよびclient.trust
ファイルを生成する方法の詳細は、リモート・アクセスでのセキュリティの構成を参照してください。この場合、プロキシはkvstoreクライアントとして実行されます。proxy.login
が正常に機能するには、これらのファイルが存在する必要があります。 - プロキシとドライバに対して
certificate.pem
ファイルおよびkey-pkcs8.pem
ファイルを作成し、セキュアな通信を構成および確立します。Javaドライバを使用する場合は、driver.trust
ファイルも生成する必要があります。セキュリティ・ガイドのOracle NoSQL Databaseプロキシの証明書と秘密キーの生成を参照してください。 - 次のコマンドを使用して、セキュアなkvstoreのプロキシを開始します。
説明java -jar lib/httpproxy.jar \ -storeName <kvstore_name> \ -helperHosts <kvstore_helper_host> \ [-hostname <proxy_host>] \ [-httpsPort <proxy_https_port>] \ -storeSecurityFile proxy/proxy.login \ -sslCertificate certificate.pem \ -sslPrivateKey key-pkcs8.pem \ -sslPrivateKeyPass <privatekey_password> \ [-verbose true]
kvstore_name
は、kvstoreデプロイメントから取得したkvstoreのストア名です。pingを参照してください。kvstore_helper_host
は、kvstoreデプロイメントから取得したkvstoreのヘルパー・ホスト:ポート・リストです。Javaダイレクト・ドライバ開発者ガイドのKVStoreハンドルの取得。proxy_host
は、プロキシ・サービスをホストするマシンのホスト名です。これはオプションのパラメータです。デフォルトはlocalhost
です。proxy_https_port
は、プロキシ・サービスをホストするマシンのポートです。これはオプションのパラメータです。デフォルトは443
です。proxy.login
は、セキュアなkvstoreにアクセスするために前のステップで生成されたセキュリティ・ログイン・ファイルです。certificate.pem
は、前のステップで生成された証明書ファイルです。key-pkcs8.pem
は、前のステップで生成された秘密キー・ファイルです。privatekey_password
は、暗号化されたkey-pkcs8.pem
ファイルのパスワードです。
注意:
プロキシ起動は、PKCS#8形式の秘密キー・ファイルのみを受け入れます。秘密キーがすでにPKCS#8にある場合は(-----BEGIN ENCRYPTED PRIVATE KEY-----または-----BEGIN PRIVATE KEY-----で始まる)、追加の変換は必要ありません。それ以外の場合は、OpenSSLを使用して変換を実行できます。
Javaドライバを使用したプロキシへの接続
Oracle NoSQL Database Javaドライバには、アプリケーションがOracle NoSQL Databaseプロキシと通信できるようにするjarファイルが含まれています。次のステップを使用して、プロキシに接続できます。
- プロキシを介してkvstoreにアクセスするためにアプリケーションで使用する、ドライバ用のユーザーを作成します。
ここで、sql-> CREATE USER <driver_user> IDENTIFIED BY "<driver_password>" sql-> GRANT READWRITE TO USER <driver_user>
driver_user
はユーザー名、driver_password
はdriver_user
ユーザーのパスワードです。この例では、driver_user
ユーザーにreadwrite
ロールが付与され、これにより、アプリケーションは読取り操作と書込み操作のみを実行できます。セキュリティ・ガイドの認可の構成を参照してください。 - Oracle NoSQL Database Javaドライバをアプリケーションのクラスパスにインストールし、次のコードを使用してプロキシに接続します。
説明String endpoint = "https://<proxy_host>:<proxy_https_port>"; StoreAccessTokenProvider atProvider = new StoreAccessTokenProvider("<driver_user>","<driver_password>".toCharArray()); NoSQLHandleConfig config = new NoSQLHandleConfig(endpoint); config.setAuthorizationProvider(atProvider); NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
proxy_host
は、プロキシ・サービスをホストするマシンのホスト名です。これは、以前に構成したプロキシ・ホストと一致する必要があります。proxy_https_port
は、プロキシ・サービスをホストするマシンのポートです。これは、以前に設定したプロキシhttpsポートと一致する必要があります。driver_user
は、ドライバのユーザー名です。これは前のステップで作成したユーザーと一致する必要があります。driver_password
は、ドライバ・ユーザーのパスワードです。
- 次のコマンドを使用して、アプリケーション・プログラムを起動し、
driver.trust
ファイルのパスをJavaトラスト・ストアに設定します。これは、プロキシがcertificate.pem
ファイルおよびkey-pkcs8.pem
ファイルを使用してすでに設定されているため必要となります。java -Djavax.net.ssl.trustStore=driver.trust \ -javax.net.ssl.trustStorePassword=<password of driver.trust> \ -cp .:lib/nosqldriver.jar application_program
driver.trust
には、certificate.pem
またはrootCA.crt
証明書が含まれます。証明書certificate.pem
が、JAVA_HOME/jre/lib/security/cacerts
にリストされている信頼できるCAによって署名されたチェーンに含まれている場合は、JavaコマンドでJava環境パラメータ-Djavax.net.ssl.trustStore
を追加する必要はありません。
Pythonを使用したプロキシへの接続
Oracle NoSQL Database Pythonドライバには、Pythonアプリケーションがプロキシと通信できるようにするファイルが含まれています。
- プロキシを介してkvstoreにアクセスするためにアプリケーションで使用する、ドライバ用のユーザーを作成します。
ここで、sql-> CREATE USER <driver_user> IDENTIFIED BY "<driver_password>" sql-> GRANT READWRITE TO USER <driver_user>
driver_user
はユーザー名、driver_password
はdriver_user
ユーザーのパスワードです。この例では、driver_user
ユーザーにreadwrite
ロールが付与され、これにより、アプリケーションは読取り操作と書込み操作のみを実行できます。セキュリティ・ガイドの認可の構成を参照してください。 - 次のコードを使用してプロキシに接続します。
説明endpoint = 'https://<proxy_host>:<proxy_https_port>' atProvider = StoreAccessTokenProvider('driver_user','driver_password') config = NoSQLHandleConfig(endpoint) config.set_authorization_provider(atProvider) handle = NoSQLHandle(config)
proxy_host
は、プロキシ・サービスをホストするマシンのホスト名です。これは、プロキシ・インスタンスを起動するホストと一致する必要があります。proxy_https_port
は、プロキシ・サービスをホストするマシンのポートです。これは、以前に設定したプロキシhttpsポートと一致する必要があります。driver_user
は、ドライバのユーザー名です。これは前のステップで作成したユーザーと一致する必要があります。driver_password
は、ドライバ・ユーザーのパスワードです。
- 次のシステム環境変数を設定します。
- プロキシで自己署名証明書を使用する場合
REQUESTS_CA_BUNDLE=certificate.pem
- プロキシでCA署名証明書を使用する場合
REQUESTS_CA_BUNDLE=rootCA.crt
- プロキシで自己署名証明書を使用する場合
注意:
rootCAが、デフォルトでPythonによって信頼される既知の公開CAである場合、ユーザーがシステム環境変数REQUESTS_CA_BUNDLE
を設定する必要はありません。
例
Oracle NoSQL Database Javaドライバを実行し、次のステップを使用してプロキシに接続します。この例では、セキュアな1ノードのOracle NoSQL Databaseサーバーをプロキシと同じホスト上にデプロイします。
kvlite
ディレクトリに移動し、kvliteを使用してセキュアなストアを起動します。
次の出力が表示されます。java -jar lib/kvstore.jar kvlite -secure-config enable
管理パスワード、ユーザー・ログイン・ファイル・パス、ルート・パス、ストア名、ホスト名およびポート番号を書き留めます。この例を完了するために必要です。Generated password for user admin:V97&l5-YrlB! User login file: ./kvroot/security/user.security Created new kvlite store with args: -root ./kvroot -store kvstore -host localhost -port 5000 -admin-web-port -1 -secure-config enable
- Oracle NoSQL Database SQLシェルで次のコマンドを使用して、
proxy_user
ユーザーを作成します。java -jar lib/sql.jar \ -helper-hosts localhost:5000 -store kvstore \ -security kvroot/security/user.security sql-> CREATE USER proxy_user IDENTIFIED BY "ProxyPass@@123"; exit
- プロキシ関連ファイルを格納できるディレクトリ
/proxy
を作成します。 proxy.passwd
ファイルを作成し、proxy.passwd
ファイルでユーザー・プロキシのプロキシ・パスワードを設定します。この例では、プロキシはkvliteと同じマシン内にあります。このため、プロキシに関連するファイルは/proxy
ディレクトリ内に作成します。java -jar lib/kvstore.jar securityconfig pwdfile create -file proxy/proxy.passwd java -jar lib/kvstore.jar securityconfig pwdfile secret -file proxy/proxy.passwd -set -alias proxy_user -secret "ProxyPass@@123"
client.trust
ファイルをkvliteから/proxy
ディレクトリにコピーして、プロキシで使用します。cp kvroot/security/client.trust proxy/client.trust
- ブートストラップ・ユーザー用に、次の情報を含むログイン・ファイル
proxy.login
を/proxy
ディレクトリに作成します。oracle.kv.auth.username=proxy_user oracle.kv.auth.pwdfile.file=proxy.passwd oracle.kv.transport=ssl oracle.kv.ssl.trustStore=client.trust
- 自己署名証明書と秘密キーを生成します。
openssl req -x509 -days 365 -newkey rsa:4096 \ -keyout key.pem -out certificate.pem \ -subj "/C=US/ST=CA/L=San/CN=localhost/emailAddress=localhost@oracle.com" # The below conversion can be skipped if openssl by default generate PKCS#8 key. openssl pkcs8 -topk8 \ -inform PEM -outform PEM \ -in key.pem -out key-pkcs8.pem
注意:
すべてのパスワード・プロンプトに対して123456
を指定します。注意:
localhostで実行していない場合は、CNのマシンのホスト名を指定してください。 - Javaトラスト・ストアに証明書をインポートします。
keytool -import -alias example \ -keystore driver.trust -file certificate.pem
- プロキシを起動します。
httpsPort
として8089
を使用し、localhost
でプロキシを起動します。java -jar lib/httpproxy.jar \ -storeName kvstore \ -helperHosts localhost:5000 \ -httpsPort 8089 \ -storeSecurityFile proxy/proxy.login \ -sslCertificate certificate.pem \ -sslPrivateKey key-pkcs8.pem \ -sslPrivateKeyPass 123456 \ -verbose true
driver_user
ユーザーを作成します。この例では、driver_user
にreadwrite
ロールが付与され、これにより、アプリケーションは読取り操作と書込み操作のみを実行できます。CREATE TABLE
のような表DDLを実行するには、driver_user
に対して、より多くのロールを付与する必要があります。セキュリティ・ガイドの認可の構成を参照してください。java -jar lib/sql.jar \ -helper-hosts localhost:5000 -store kvstore \ -security kvroot/security/user.security sql-> CREATE USER driver_user IDENTIFIED BY "DriverPass@@123"; sql-> GRANT READWRITE TO USER driver_user; exit
- アプリケーション・プログラムで、次のコードを実行してプロキシに接続します。サンプル・プログラムの起動時に、JVMパラメータ
-Djavax.net.ssl.trustStore=driver.trust
を追加します。String endpoint = "https://localhost:8089"; StoreAccessTokenProvider atProvider = new StoreAccessTokenProvider("driver_user","DriverPass@@123".toCharArray()); NoSQLHandleConfig config = new NoSQLHandleConfig(endpoint); config.setAuthorizationProvider(atProvider); NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
- この例でCRUD操作を追加する必要がある場合は、Oracle NoSQL Database Javaドライバを参照してください。