セキュアな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/proxy.loginを作成します。
説明oracle.kv.auth.username=<proxy_user> oracle.kv.auth.pwdfile.file=proxy.passwd oracle.kv.transport=ssl oracle.kv.ssl.trustStore=client.trustproxy.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です。ノート:
ポート80を使用するには、マシンによっては追加の権限が必要になる場合があります。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ロールが付与され、これにより、アプリケーションは読取り操作と書込み操作のみを実行できます。セキュリティ・ガイドの認可の構成を参照してください。ノート:
ユーザーが表または索引を作成、削除または変更する必要がある場合は、driver_userにdbadminロールが付与されている必要があります。これにより、アプリケーションはDDL操作を実行できます。sql-> GRANT DBADMIN TO USER <driver_user> - 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_programdriver.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アプリケーションがプロキシと通信できるようにするファイルが含まれています。
詳細は、Pythonを使用したプロキシへの接続を参照してください。
Goを使用したプロキシへの接続
Oracle NoSQL Database Go SDKには、Goアプリケーションがプロキシと通信できるようにするファイルが含まれています。
詳細は、Goを使用したプロキシへの接続を参照してください。
Node.jsを使用したプロキシへの接続
Oracle NoSQL Database Node.js SDKには、Node.jsアプリケーションがプロキシと通信できるようにするファイルが含まれています。
詳細は、Node.jsを使用したプロキシへの接続を参照してください。
例
Oracle NoSQL Database Javaドライバを実行し、次のステップを使用してプロキシに接続します。この例では、セキュアな1ノードのOracle NoSQL Databaseサーバーをプロキシと同じホスト上にデプロイします。この例では、HTTPSポート443を使用して、ローカル・マシンmyhostでプロキシ・インスタンスを起動します。ポート5000上の2つのホスト(kvhost1およびkvhost2)で実行されているセキュアなOracle NoSQL Databaseインスタンス名kvstoreに接続されます。ユーザーの作成および権限の割当てに必要な管理ステップを実行するには、管理権限を持つアイデンティティへのアクセス権が必要です。この例では、管理権限を持つアイデンティティはファイルKVROOT/securityで提供されます。
- Oracle NoSQL Database SQLシェルで次のコマンドを使用して、
proxy_userユーザーを作成します。java -jar lib/sql.jar \ -helper-hosts kvhost1:5000,kvhost2:5000 -store kvstore \ -security kvroot/security/user.security sql-> CREATE USER proxy_user IDENTIFIED BY "ProxyPass@@123"; exit - プロキシ関連ファイルを格納できるディレクトリ
./proxyを作成します。 ./proxy/proxy.passwdファイルを作成し、proxy.passwdファイルでユーザー・プロキシのプロキシ・パスワードを設定します。この例では、プロキシはkvstoreと同じマシン内にあります。このため、プロキシに関連するファイルは./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ファイルをkvstoreから/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パラメータにマシンのホスト名を指定します。ノート:
キーがPKCS#5 v2.0アルゴリズムで暗号化されている場合は、次の変換を行う必要があります。そうしないと、サポートされていないアルゴリズムが原因でファイルに有効な秘密キーが含まれていないことを示すIllegalArgumentException例外が発生する可能性があります。暗号化アルゴリズムは、-v1フラグでPKCS#5 v1.5またはPKCS#12アルゴリズムを指定することで、OpenSSLpkcs8ユーティリティを介して変換できます。次のコマンドは、キーの暗号化アルゴリズムをPBE-SHA1-3DESに変換します。openssl pkcs8 -topk8 -in <PKCS#5v2.0_key_file> -out <new_key_file> -v1 PBE-SHA1-3DES - Javaトラスト・ストアに証明書をインポートします。
keytool -import -alias example \ -keystore driver.trust -file certificate.pem - 443を
httpsPortとして使用して、ローカル・マシンmyhostでプロキシを起動します。java -jar lib/httpproxy.jar \ -storeName kvstore \ -helperHosts kvhost1:5000,kvhost2:5000 \ -httpsPort 443 \ -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 kvhost1:5000,kvhost2: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ドライバを参照してください。