認証

Oracle NoSQL Databaseにアクセスするための適切なログイン資格証明があることを確認してください。

セキュリティ・ログイン

セキュリティ・ログインには次のURLを使用します。

/V0/nosql/admin/login

ノート:

管理Webサービスにアクセスするには、admin-web-portを構成し、管理Webサービスを起動する必要があります。Oracle NoSQL Database管理者ガイドmakebootconfigを参照してください。

認可ヘッダーにおいて、base64でエンコードされた基本ログイン情報を指定する必要があります。ここで接頭辞としてBasicが使用されていることに注意してください。

Authorization:Basic base64_encode(user_name:password)

ログイン・インタフェースによって、認証情報の検証後に新しいセキュリティ・セッションが作成され、ログイン・トークンが返されます。

{
    "operation" : "login"
    "returnCode" : "5000"
    "description" : "Operation ended successfully"
    "returnValue" : {
        "token" : "login_token_in_hex_string"
    }
}

ログイン・トークンのセキュリティ

前述の返されたログイン・トークンはユーザー資格証明に相当します。トークンは、ログアウトするか有効期限をすぎると失効します。未許可アクセスから守るためにログイン・トークンをその有効期間の間保護する必要があります。

ログイン・トークンを取得した後、管理Webサービス上でリクエストを実行する前に、認可ヘッダーにおいてそのトークンを設定する必要があります。ここで接頭辞としてBearerが使用されていることに注意してください。

Authorization:Bearer login_token_in_hex_string

管理Webサービスでは、すべてのユーザー・リクエストのアクセス制御のために、認証および認可が確認されます。

データ暗号化

データ暗号化が必ず実行されるようにするには、保護された管理Webサービスへのアクセス時に、client.trustファイルから取得した証明書情報を提供する必要があります。client.trustファイルは、ストレージ・ノードのsecurityフォルダの下に作成されます。具体的に述べると、このファイルは、クライアントがKVStoreにアクセスするためのものです。

次に、client.trustファイルから取得した証明書情報の使用例を示します。

keytool -exportcert -rfc -keystore KVROOT/security/client.trust -alias mykey \
-file /tmp/client_security_dir/security/client.pem

cURLコマンドではデフォルトのホスト名検証機能が使用されるため、client.pemファイル内のホスト名エンティティは、デフォルトではNoSQLになります。cURL、またはカスタマイズされたホスト名検証機能を設定できないその他のツールを使用している場合は、/etc/hostsを、ターゲットNoSQLサーバー・マシンのホスト名がNoSQLと一致するよう変更する必要があります。次に例を示します。

#/etc/hosts file
127.0.0.1    localhost  NoSQL

/etc/hostsファイルを変更した後、cURLコマンドを次のように使用します。

curl -i "https://NoSQL:30000/V0/nosql/admin/login" -u username:password \
--cacert /tmp/client_security_dir/security/client.pem --tlsv1

管理サービスが実行されているマシンから匿名でログインする場合は、次のようにcURLコマンドを使用します。

curl -i "https://NoSQL:30000/V0/nosql/admin/login" \
--cacert /tmp/client_security_dir/security/client.pem --tlsv1

セキュリティ・セッション

管理Webサービスでは、RMIベースの既存のNoSQLセキュリティ・パラメータと同じセキュリティ・セッション・パラメータが使用されます。セキュリティ・セッションのタイムアウトは、次のパラメータで制御します。

sessionTimeout = 24 hours

ログアウト

ログアウトするには、次のURLを使用します。

/V0/nosql/admin/logout

既存のセッションからログアウトするには、Bearer接頭辞内でログイン・トークンを指定します。次に例を示します。

curl -i "https://NoSQL:30000/V0/nosql/admin/logout" \
--cacert /tmp/client_security_dir/security/client.pem \
-H "Authorization:Bearer login_token_in_hex_string" --tlsv1

ワークフロー

以下に、ログインし、ログイン・トークンを使用してセキュリティ・リソースにアクセスし、ログアウトする方法の例を示します。

  1. KVStoreによって提供されているclient.trustファイルを使用して、pem形式で証明書ファイルを作成します。

    keytool -exportcert -rfc -keystore KVROOT/security/client.trust -alias mykey \
    -file /tmp/client_security_dir/security/client.pem
  2. ターゲットNoSQLサーバー・マシンのホスト名がNoSQLと一致するように、/etc/hostsファイルを変更します。

    #/etc/hosts file
    127.0.0.1    localhost  NoSQL
  3. admin-web-portが構成されており管理Webサービスが起動していることを確認します。次のように、ログイン・トークンを取得するためにログイン・インタフェースにアクセスします。

    $ curl -i "https://NoSQL:20001/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" : "login_token_in_hex_string"
      }
    }
  4. 次のように、ログイン・トークンを使用してshow topologyリクエストを実行します。

    $ curl -i -X POST "https://NoSQL:20001/V0/nosql/admin/topology" \
    -d '{"command":"show"}' --cacert "/tmp/client_security_dir/security/client.pem" \
    -H "Authorization:Bearer login_token_in_hex_string"  --tlsv1
    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" : [ ]
        } ]
      }
    }
  5. リクエストの実行後、セッションからログアウトします。

    $ curl -i "https://NoSQL:30000/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
    }