このトピックでは、API を使用するときに NSX セッションベースの認証を使用して JSESSIONID Cookie を生成する方法について説明します。この方法を使用して、ユーザー名とパスワードの入力の必要回数を減らします。このタイプの認証は、vIDM および LDAP 認証で使用できます。

NSX では、いくつかの異なるメカニズムを使用して NSX ユーザーを認証します。これには以下が含まれます。

  • HTTP 認証
  • セッションベースの認証
  • プリンシパル ID または証明書ベースの認証
  • vIDM および RBAC を使用したシングル サインオン

NSX では、ユーザー名とパスワードを使用してセッション作成時にセッション Cookie を生成します。セッション Cookie が作成されると、以降の API 要求では、ユーザー名とパスワードの認証情報の代わりにこのセッション Cookie を使用できます。これは、セッション状態が実行されるサーバに対してローカルであることを意味します。クライアントが NSX Manager に要求を送信すると、クライアントから提示されたセッション ID がサーバによって生成された ID のいずれかと一致する場合にのみ、クライアントに認証を許可します。ユーザーが NSX Manager からログアウトすると、セッション ID は直ちに削除されます。再利用することはできません。アイドル状態のセッションは自動的にタイムアウトになるか、API を使用して削除できます。

API 要求を使用してアクセスすると、監査ログの詳細が生成されます。このログは常に有効になっており、無効にすることはできません。セッションの監査はシステム起動時に開始します。監査ログ メッセージの構造化データの部分に audit="true" というテキストが含まれています。

この例では、cURL を使用して API 呼び出しのセッションベースの認証を作成する方法について説明します。

手順

  1. NSX Manager に対して認証し、ヘッダーから xsrf を取得する新しいセッション Cookie を作成するには、次のように入力します。
    # curl -v -k -c session.txt -X POST -d '[email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 | grep -i xsrf < x-xsrf-token: 5a764b19-5ad2-4727-974d-510acbc171c8

    この例では、cURL コマンドがサーバに対して認証を行い、セッション Cookie を sessions.txt ファイルに配置し、すべての HTTP 応答ヘッダーを headers.txt ファイルに書き込みます。以降の要求で指定するには、headers.txt のヘッダーの 1 つである x-xsrf-token ヘッダーを使用する必要があります。

    また、ユーザー名の @ に標準の Unicode/URI エンコードを使用することもできます。

    セッションの内容の例を次に示します。

    # cat session.txt
          # Netscape HTTP Cookie File
          # https://curl.haxx.se/docs/http-cookies.html
          # This file was generated by libcurl! Edit at your own
            risk.
          # HttpOnly_172.182.183.135 FALSE / TRUE 0 JSESSIONID CFG588DF6DGF493C0EAEFC62685C42E1
  2. 2 つのセッションを作成する必要がある場合は、両方のセッションが有効になるように session.txt ファイルの名前を変更します。
    # curl -v -k -c session1.txt -X POST -d 'j_username= [email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 | grep -i xsrf < x-xsrf-token: cbce48f3-48fc-46c0-a8e7-f2f55ebf8e15
    # curl -v -k -c session2.txt -X POST -d 'j_username= [email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 | grep -i xsrf < x-xsrf-token: abf1fa2c-86d5-47e4-9a0a-242424dd1761
  3. 以降の呼び出しでは、前の手順のセッション Cookie と xsrf ヘッダーを使用します。
    # curl -k -b session.txt -H "x-xsrf-token: 5a764b19-5ad2-4727-974d-510acbc171c8"
          https://10.182.183.135/policy/api/v1/infra/segments
          {
            "results" : [ {
              "type" : "ROUTED",
              "subnets" : [ {
                "gateway_address" : "192.168.10.1/24",
                "network" : "192.168.10.0/24"
              } ],
              "connectivity_path" :
            "/infra/tier-1s/test_t1",
              "transport_zone_path" :
            "/infra/sites/default/enforcement-points/default/transport-zones/1b3a2f36-bfd1-443e-a0f6-4de01abc963e",
              "advanced_config" : {
                "address_pool_paths" : [ ],
                "hybrid" : false,
                "multicast" : true,
                "inter_router" : false,
                "local_egress" : false,
                "urpf_mode" : "STRICT",
                "connectivity" : "ON"
              },
              "admin_state" : "UP",
              "replication_mode" : "MTEP",
              "resource_type" : "Segment",
              "id" : "seg1",
              "display_name" : "seg1",
              "path" : "/infra/segments/seg1",
              "relative_path" : "seg1",
              "parent_path" : "/infra",
              "unique_id" :
            "6573d2c9-f4f9-4b37-b410-71bded8857c3",
              "marked_for_delete" : false,
              "overridden" : false,
              "_create_user" : "admin",
              "_create_time" : 1633331197569,
              "_last_modified_user" : "admin",
              "_last_modified_time" : 1633331252660,
              "_system_owned" : false,
              "_protection" : "NOT_PROTECTED",
              "_revision" : 1
            } ],
            "result_count" : 1,
            "sort_by" : "display_name",
            "sort_ascending" : true
        
    クラスタ内の別のノードで同じセッションを使用すると、次のエラー メッセージが表示されてコマンドが失敗します。
    The credentials were incorrect or the account specified has been locked.","error_code":403.

    セッションの有効期限が切れると、NSX Manager は 403 Forbidden HTTP 応答で応答します。その後、新しいセッション Cookie と x-xsrf-token を取得する必要があります。

  4. セッションの有効期限を構成するには、connection_timeout API コマンドを使用します。デフォルトのセッション有効期限は 1,800 秒(30 分)に設定されています。
    PUT https://<nsx-mgr>/api/v1/cluster/api-service
    GET https://<nsx-mgr>/api/v1/cluster/api-service
    {
        "session_timeout": 1800,
        "connection_timeout": 30,
        "protocol_versions": [
            {
                "name": "TLSv1.1",
                "enabled": true
            },
            {
                "name": "TLSv1.2",
                "enabled": true
            }
        ],
        "cipher_suites": [
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_128_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_128_CBC_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_128_GCM_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_256_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_256_CBC_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_256_GCM_SHA384",
                "enabled": true
            }
        ],
        "redirect_host": "",
        "client_api_rate_limit": 100,
        "global_api_concurrency_limit": 199,
        "client_api_concurrency_limit": 40,
        "basic_authentication_enabled": true,
        "cookie_based_authentication_enabled": true,
        "resource_type": "ApiServiceConfig",
        "id": "reverse_proxy_config",
        "display_name": "reverse_proxy_config",
        "_create_time": 1658339081246,
        "_create_user": "system",
        "_last_modified_time": 1658339081246,
        "_last_modified_user": "system",
        "_system_owned": false,
        "_protection": "NOT_PROTECTED",
        "_revision": 0
    }
    
  5. セッション Cookie を削除するには、/api/session/destroy API コマンドを使用します。
    curl -k -b cookies.txt -H "`grep x-xsrf-token headers.txt`" -X POST https://<nsx-manager>/api/session/destroy
    次はその例です。
    curl -k -b cookies.txt -H "`grep x-xsrf-token headers.txt`" https://$TESTHOST/api/session/destroy
    curl -k -b cookies.txt -H "`grep x-xsrf-token headers.txt`" https://$TESTHOST/api/v1/logical-ports
    応答:
    {
        "module_name" : "common-services",
        "error_message" : "The credentials were incorrect or the account specified has been locked.",
        "error_code" : "403"
    }
    

次のタスク

セッションベースのサポートされている認証サービスでユーザーを認証するための要件を確認するには、VMware Identity Manager/Workspace ONE Access との連携またはLDAP との連携を参照してください。