認証
- Oracle NoSQL Databaseにアクセスするための適切なログイン資格証明があることを確認してください。
- Oracle NoSQL Databaseで
admin-web-port
が構成されており、管理Webサービスが起動していることを確認します。Oracle NoSQL Database管理者ガイドでmakebootconfigを参照してください。
REST APIを使用したログイン・リクエストおよびレスポンス
セキュリティ・ログインには次のURLを使用します。
/V0/nosql/admin/login
認可ヘッダーにおいて、base64でエンコードされた基本ログイン情報を指定する必要があります。ここで接頭辞としてBasicが使用されていることに注意してください。Authorization:Basic base64_encode(user_name:password)
"returnValue" :
{ "token" :
"ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001" }
データ暗号化
client.trust
ファイルから取得した証明書情報を指定する必要があります。client.trust
ファイルは、セキュアなKVStoreの構成時に、ストレージ・ノードのsecurityフォルダの下に作成されます。具体的に言うと、このclient.trust
ファイルは、クライアントがKVStoreにアクセスするために使用します。
- KVStoreによって提供されている
client.trust
ファイルを使用して、PEM形式で証明書ファイルを作成します。次に、client.trust
ファイルから取得した証明書情報の使用例を示します。keytool -exportcert -rfc -keystore KVROOT/security/client.trust -alias mykey \ -file /tmp/client_security_dir/security/client.pem
- サーバー証明書で指定されているようにターゲットNoSQLサーバー・マシンのホスト名と一致するように、
/etc/hosts
ファイルを変更します(デフォルトは"NoSQL")。cURLコマンドではデフォルトのホスト名検証機能が使用されるため、client.pem
ファイル内のホスト名エンティティは、デフォルトではNoSQL
になります。cURL、またはカスタマイズされたホスト名検証機能を設定できないその他のツールを使用している場合は、/etc/hosts
を、ターゲットNoSQLサーバー・マシンのホスト名がNoSQL
と一致するよう変更する必要があります#/etc/hosts file 127.0.0.1 localhost NoSQL
ノート:
ここでは、makebootconfig
コマンドによって生成された証明書で証明書にNoSQLが指定されているため、値NoSQLが/etc/hosts
ファイルに追加されます。ユーザー指定の証明書を使用している場合、この値は異なります。 - admin-web-portが構成されており管理Webサービスが起動していることを確認します。ログイン・トークンを取得するためにログイン・インタフェースにアクセスします。
curl -i "https://NoSQL:port/V0/nosql/admin/login" -u username:password \ --cacert /tmp/client_security_dir/security/client.pem --tlsv1
管理サービスが実行されているマシンから匿名でログインする場合は、次のようにcURLコマンドを使用します。curl -i "https://NoSQL:port/V0/nosql/admin/login" \ --cacert /tmp/client_security_dir/security/client.pem --tlsv1
セキュリティ・セッション
管理Webサービスでは、RMIベースの既存のNoSQLセキュリティ・パラメータと同じセキュリティ・セッション・パラメータが使用されます。セキュリティ・セッションのタイムアウトは、次のパラメータで制御します。
sessionTimeout = 24 hours
ログイン・リクエストへのレスポンス
HTTP/1.1 200 OK
access-control-allow-origin: *
content-type: application/json
content-length: 221
{
"operation" : "login",
"returnCode" : 5000,
"description" : "Operation ends successfully",
"returnValue" : {
"token" : "ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001"
}
}
ログイン・トークンのセキュリティ
前述の返されたログイン・トークンはユーザー資格証明に相当します。トークンは、ログアウトするか有効期限をすぎると失効します。未許可アクセスから守るためにログイン・トークンをその有効期間の間保護する必要があります。
ログイン・トークンを取得した後、管理Webサービス上でリクエストを実行する前に、認可ヘッダーにおいてそのトークンを設定する必要があります。ここで接頭辞としてBearer
が使用されていることに注意してください。
Authorization:Bearer
"ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001"
管理Webサービスでは、すべてのユーザー・リクエストのアクセス制御のために、認証および認可が確認されます。
REST APIを使用したログアウト
ログアウトするには、次のURLを使用します。
/V0/nosql/admin/logout
リクエストの実行後、セッションからログアウトします。既存のセッションからログアウトするには、Bearer
接頭辞内でログイン・トークンを指定します。たとえば:
curl -i "https://NoSQL:port/V0/nosql/admin/logout" \
--cacert /tmp/client_security_dir/security/client.pem \
-H "Authorization:Bearer login_token_in_hex_string" --tlsv1
{
"operation" : "logout",
"returnCode" : 5000,
"description" : "Operation ends successfully",
"returnValue" : null
}
REST APIコール使用時のワークフロー
REST APIコールを使用してshow topology
コマンドを実行する例を考えてみます。
Bearer認証は、Bearerトークンと呼ばれるセキュリティ・トークンを含むHTTP認証スキームです。Bearerトークンは、特定のリソースまたはURLへのアクセスを許可し、通常はログイン・リクエストに応じてサーバーによって生成される暗号化文字列です。クライアントは、保護されたリソースにリクエストを行うときに、認可ヘッダーでこのトークンを送信する必要があります。
次に、ログインし、ログイン・トークンを使用してセキュリティ・リソースにアクセスし、ログアウトする方法の例を示します。
- ログイン・トークンの取得: ログイン・トークンを取得するためにログイン・インタフェースにアクセスします。
$ curl -i "https://NoSQL:port/V0/nosql/admin/login" -u <userName:password> \ --cacert "/tmp/client_security_dir/security/client.pem" --tlsv1
ログイン・レスポンスの例を次に示します。HTTP/1.1 200 OK access-control-allow-origin: * content-type: application/json content-length: 221 { "operation" : "login", "returnCode" : 5000, "description" : "Operation ends successfully", "returnValue" : { "token" : "ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001" } }
前述のコードで返されたログイン・トークンはユーザー資格証明に相当します。トークンは、ログアウトするか有効期限をすぎると失効します。
- Oracle NoSQL Databaseを管理するコマンドの発行: 管理Webサービスでは、すべてのユーザー・リクエストのアクセス制御のために、認証および認可が確認されます。show topologyリクエストは、前述のステップで生成されたログイン・トークンを使用して発行されます。
$ curl -i -X POST "https://hostname:port/V0/nosql/admin/topology" \-d '{"command":"show"}' --cacert "/tmp/client_security_dir/security/client.pem" \-H "Authorization:Bearer ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001" --tlsv1
show topologyコマンドのレスポンス例を次に示します。HTTP/1.1 200 OK access-control-allow-origin: * content-type: application/json content-length: 1001 { "operation" : "show topology", "returnCode" : 5000, "description" : "Operation ends successfully", "returnValue" : { "storeName" : "mystore", "numPartitions" : 20, "sequenceNumber" : 24, "zns" : [ { "resourceId" : "zn1", "name" : "1", "repFactor" : 1, "type" : "PRIMARY", "allowArbiters" : false, "masterAffinity" : false } ], "sns" : [ { "resourceId" : "sn1", "hostname" : "localhost", "registryPort" : 20000, "zone" : { "resourceId" : "zn1", "name" : "1", "repFactor" : 1, "type" : "PRIMARY", "allowArbiters" : false, "masterAffinity" : false }, "capacity" : "1", "rns" : [ { "resourceId" : "rg1-rn1" } ], "ans" : [ ] } ], "shards" : [ { "resourceId" : "rg1", "numPartitions" : 20, "rns" : [ { "resourceId" : "rg1-rn1", "snId" : "sn1" } ], "ans" : [ ] } ] } }
- セッションからのログアウト: リクエストの実行後、セッションからログアウトします。
$ curl -i "https://hostname:port/V0/nosql/admin/logout" \--cacert /tmp/client_security_dir/security/client.pem \-H "Authorization:Bearer ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001" --tlsv1
ログアウト・セッションに対するレスポンスの例を次に示します。{ "operation" : "logout", "returnCode" : 5000, "description" : "Operation ends successfully", "returnValue" : null }