セキュアなkvstoreでのプロキシの使用

プロキシの起動

次のステップを使用して、Oracle NoSQL Databaseプロキシをセキュアなkvstoreで開始できます。

  1. セキュアなプロキシ接続がブートストラップされる必要があります。プロキシを起動する前に、プロキシでセキュリティ接続をブートストラップするためのブートストラップ・ユーザーをセキュアなkvstoreに作成する必要があります。SQLシェルで次のコマンドを実行すると、プロキシ用のブートストラップ・ユーザーが作成されます。SQL初心者ガイドOracle NoSQL Databaseシェル用のSQLの概要を参照してください。
    sql-> CREATE USER <proxy_user> IDENTIFIED BY "<proxy_password>";
    説明
    • proxy_userはユーザー名です。
    • proxy_passwordは、proxy_userのパスワードです。

    注意:

    ブートストラップ・ユーザーの場合、デフォルトの権限で十分です。管理権限やその他の追加権限をブートストラップ・ユーザーに付与することはお薦めしません。

    注意:

    ブートストラップ・ユーザーには、ユーザーが任意の名前を指定できます。

  2. プロキシ関連ファイルを格納できるディレクトリ/proxyを作成します。
  3. ブートストラップ・ユーザー用に、次の情報を含むログイン・ファイル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が正常に機能するには、これらのファイルが存在する必要があります。

  4. プロキシとドライバに対してcertificate.pemファイルおよびkey-pkcs8.pemファイルを作成し、セキュアな通信を構成および確立します。Javaドライバを使用する場合は、driver.trustファイルも生成する必要があります。セキュリティ・ガイドOracle NoSQL Databaseプロキシの証明書と秘密キーの生成を参照してください。
  5. 次のコマンドを使用して、セキュアな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ファイルが含まれています。次のステップを使用して、プロキシに接続できます。

  1. プロキシを介してkvstoreにアクセスするためにアプリケーションで使用する、ドライバ用のユーザーを作成します。
    sql-> CREATE USER <driver_user> IDENTIFIED BY "<driver_password>"
        sql-> GRANT READWRITE TO USER <driver_user>
    ここで、driver_userはユーザー名、driver_passworddriver_userユーザーのパスワードです。この例では、driver_userユーザーにreadwriteロールが付与され、これにより、アプリケーションは読取り操作と書込み操作のみを実行できます。セキュリティ・ガイド認可の構成を参照してください。
  2. 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は、ドライバ・ユーザーのパスワードです。
  3. 次のコマンドを使用して、アプリケーション・プログラムを起動し、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アプリケーションがプロキシと通信できるようにするファイルが含まれています。

  1. プロキシを介してkvstoreにアクセスするためにアプリケーションで使用する、ドライバ用のユーザーを作成します。
    sql-> CREATE USER <driver_user> IDENTIFIED BY "<driver_password>"
    sql-> GRANT READWRITE TO USER <driver_user>
    ここで、driver_userはユーザー名、driver_passworddriver_userユーザーのパスワードです。この例では、driver_userユーザーにreadwriteロールが付与され、これにより、アプリケーションは読取り操作と書込み操作のみを実行できます。セキュリティ・ガイド認可の構成を参照してください。
  2. 次のコードを使用してプロキシに接続します。
    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は、ドライバ・ユーザーのパスワードです。
  3. 次のシステム環境変数を設定します。
    • プロキシで自己署名証明書を使用する場合
      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サーバーをプロキシと同じホスト上にデプロイします。

  1. 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
    管理パスワード、ユーザー・ログイン・ファイル・パス、ルート・パス、ストア名、ホスト名およびポート番号を書き留めます。この例を完了するために必要です。
  2. 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
  3. プロキシ関連ファイルを格納できるディレクトリ/proxyを作成します。
  4. 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"
  5. client.trustファイルをkvliteから/proxyディレクトリにコピーして、プロキシで使用します。
    cp kvroot/security/client.trust proxy/client.trust
  6. ブートストラップ・ユーザー用に、次の情報を含むログイン・ファイル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
  7. 自己署名証明書と秘密キーを生成します。
    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のマシンのホスト名を指定してください。
  8. Javaトラスト・ストアに証明書をインポートします。
    keytool -import -alias example \ 
    -keystore driver.trust -file certificate.pem
  9. プロキシを起動します。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
  10. driver_userユーザーを作成します。この例では、driver_userreadwriteロールが付与され、これにより、アプリケーションは読取り操作と書込み操作のみを実行できます。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
  11. アプリケーション・プログラムで、次のコードを実行してプロキシに接続します。サンプル・プログラムの起動時に、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);
  12. この例でCRUD操作を追加する必要がある場合は、Oracle NoSQL Database Javaドライバを参照してください。