セキュアなデータ・ストアでのプロキシの使用
プロキシの起動
次のステップを使用して、セキュア・データ・ストアでOracle NoSQL Databaseプロキシを開始できます。
- セキュアなプロキシ接続がブートストラップされる必要があります。プロキシを起動する前に、プロキシでセキュリティ接続をブートストラップするために、セキュアなデータ・ストアにブートストラップ・ユーザーを作成する必要があります。SQLシェルで次のコマンドを実行すると、プロキシ用のブートストラップ・ユーザーが作成されます。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.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プロキシの証明書と秘密キーの生成を参照してください。 - 次のコマンドを使用して、セキュアなデータ・ストアのプロキシを開始します。
説明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
は、データ・ストア・デプロイメントから取得されたデータ・ストア名です。pingを参照してください。kvstore_helper_host
は、データ・ストア・デプロイメントから取得されたデータ・ストアのヘルパーhost:portリストです。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を使用して変換を実行できます。
Oracle NoSQL Database Javaドライバには、アプリケーションがOracle NoSQL Databaseプロキシと通信できるようにするjarファイルが含まれています。次のステップを使用して、プロキシに接続できます。
- プロキシを介してデータ・ストアにアクセスするためにアプリケーションで使用する、ドライバのユーザーを作成します。
ここで、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 \ -Djavax.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
を追加する必要はありません。
オンプレミス構成には、Oracle NoSQLデータベースの実行中インスタンスが必要です。また、実行中のプロキシ・サービスも必要です。
REQUESTS_CA_BUNDLE
環境変数を使用して証明書パスを指定する必要があります。
$ export REQUESTS_CA_BUNDLE=
<path-to-certificate>/certificate.pem:$REQUESTS_CA_BUNDLE
またはborneo.NoSQLHandleConfig.set_ssl_ca_certs()
。
borneo.kv.StoreAccessTokenProvider
で使用されます。from borneo import NoSQLHandle, NoSQLHandleConfig
from borneo.kv import StoreAccessTokenProvider
#
# Assume the proxy is secure and running on localhost:443
#
endpoint = 'https://localhost:443'
#
# Create the AuthorizationProvider for a secure store:
#
ap = StoreAccessTokenProvider(user_name, password)
#
# create a configuration object
#
config = NoSQLHandleConfig(endpoint).set_authorization_provider(ap)
#
# set the certificate path if running a secure store
#
config.set_ssl_ca_certs(<ca_certs>)
#
# create a handle from the configuration object
#
handle = NoSQLHandle(config)
オンプレミス構成には、Oracle NoSQLデータベースの実行中インスタンスが必要です。また、実行中のプロキシ・サービスも必要です。この場合、Endpoint
構成パラメータは、NoSQLプロキシ・ホストおよびポートの場所を指す必要があります。
InsecureSkipVerify
を指定して、サーバーの証明書の検証をスキップするようにクライアントに指示するか、サーバーの証明書およびホスト名の検証に使用するCertPath
およびServerName
を指定します。import (
"fmt"
"github.com/oracle/nosql-go-sdk/nosqldb"
"github.com/oracle/nosql-go-sdk/nosqldb/httputil"
)
...cfg:= nosqldb.Config{
Endpoint: "https://nosql.mycompany.com:8080",
Mode: "onprem",
Username: "testUser",
Password: []byte("F;0s2M0;-Tdr"),
// Specify InsecureSkipVerify
HTTPConfig: httputil.HTTPConfig{
InsecureSkipVerify: true,
},
// Alternatively, specify the CertPath and ServerName
// HTTPConfig: httputil.HTTPConfig{
// CertPath: "/path/to/certificate-used-by-server",
// ServerName: "nosql.mycompany.com",
// set to the "CN" subject value from the certificate
// },
}
client, err:=nosqldb.NewClient(cfg)
iferr!=nil {
fmt.Printf("failed to create a NoSQL client: %v\n", err)
return
}
deferclient.Close()
// Perform database operations using client APIs.
// ...
アプリケーションは、プロキシ・サービスを介して接続して、実行中のNoSQLデータベースを使用します。
セキュア・モードでプロキシに接続するには、通信エンドポイントに加えて、ドライバ・ユーザーのユーザー名とパスワードを指定する必要があります。この情報は、kvstore
プロパティのConfig#auth
オブジェクトに渡され、次に説明する3つの方法のいずれかで指定できます。
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const client = new NoSQLClient({
endpoint: 'https://myhost:8081',
auth: {
kvstore: {
user: 'John',
password: johnsPassword
}
}
});
パスワードはメモリーにプレーン・テキストで格納されるため、このオプションは安全性が低下します。
{
"user": "<Driver user name>",
"password": "<Driver user password>"
}
その後、この資格証明ファイルを次のように参照できます。const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const client = new NoSQLClient({
endpoint: 'https://myhost:8081',
auth: {
kvstore: {
credentials: 'path/to/credentials.json'
}
}
});
NoSQLClient
インスタンスの作成に使用される構成ファイルでcredentials.json
を参照することもできます。{
"endpoint": "https://myhost:8081",
"auth": {
"kvstore": {
"credentials": "path/to/credentials.json"
}
}
}
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const client = new NoSQLClient('/path/to/config.json');
アプリケーションは、プロキシ・サービスを介して接続して、実行中のNoSQLデータベースを使用します。
セキュア・モードでプロキシに接続するには、通信エンドポイントに加えて、ドライバ・ユーザーのユーザー名とパスワードを指定する必要があります。この情報はKVStoreAuthorizationProvider
のインスタンスで渡され、次に説明するいずれかの方法で指定できます。
var client = new NoSQLClient(
new NoSQLConfig
{
Endpoint = "https://myhost:8081",
AuthorizationProvider = new KVStoreAuthorizationProvider(
userName, // user name as string
password) // password as char[]
});
パスワードはNoSQLClient
インスタンスの存続期間中、メモリーにプレーン・テキストで格納されるため、このオプションは安全性が低下します。パスワードはchar[]として指定されているため、NoSQLClientの使用終了後に消去できます。
{
"UserName": "<Driver user name>",
"Password": "<Driver user password>"
}
その後、この資格証明ファイルを次のように使用できます。var client = new NoSQLClient(
new NoSQLConfig
{
Endpoint: 'https://myhost:8081',
AuthorizationProvider = new KVStoreAuthorizationProvider(
"path/to/credentials.json")
});
NoSQLClient
インスタンスの作成に使用されるJSON構成ファイルでcredentials.jsonを参照することもできます。{
"Endpoint": "https://myhost:8081",
"AuthorizationProvider": {
"AuthorizationType": "KVStore",
"CredentialsFile": "path/to/credentials.json"
}
}
var client = new NoSQLClient("/path/to/config.json");
config.json
では、認可プロバイダはJSONオブジェクトとして表され、KVStoreAuthorizationProvider
のプロパティと、認可プロバイダのタイプを示す追加のAuthorizationTypeプロパティ(セキュアなオンプレミス・ストアの場合はKVStore)が示されます。
Oracle NoSQL Database Spring Data SDKには、Spring Dataアプリケーションがプロキシと通信できるようにするファイルが含まれています。
アプリケーションのクラスパスにJavaドライバをインストールします。次のコードを使用してプロキシに接続します。
NosqlDbConfig
オブジェクトを提供します。StoreAccessTokenProvider
クラスは、Oracle NoSQL Databaseクラスタのユーザー名とパスワードとともに使用できます。StoreAccessTokenProvider
クラスは、安全なOracle NoSQL Databaseストアに接続して認証するようにSpring Data Frameworkを構成します。
import com.oracle.nosql.spring.data.config.AbstractNosqlConfiguration;
import com.oracle.nosql.spring.data.config.NosqlDbConfig;
import com.oracle.nosql.spring.data.repository.config.EnableNosqlRepositories;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import oracle.nosql.driver.kv.StoreAccessTokenProvider;
@Configuration
@EnableNosqlRepositories
public class AppConfig extends AbstractNosqlConfiguration {
@Bean
public NosqlDbConfig nosqlDbConfig() {
AuthorizationProvider authorizationProvider;
authorizationProvider = new StoreAccessTokenProvider(user, password);
return new NosqlDbConfig("http://<proxy_host:proxy_http_port>", authorizationProvider);
}
}
proxy_host
は、プロキシ・サービスをホストするマシンのホスト名です。proxy_http_port
は、プロキシがホスト・マシンでリクエストを監視しているポートです。