NSX Advanced Load Balancer は、IdP 認証情報を使用するための SDK と REST API ログインをサポートしています。Python SDK が接続を確立してリソースにアクセスするには、NSX Advanced Load Balancer Controller で SAML 認証プロファイルを設定する必要があります。

注:
  • IdP 認証情報を使用した NSX Advanced Load Balancer CLI へのログインはまだサポートされていません。

  • Okta および OneLogin では、Python SDK を使用した SAML ベースの認証がサポートされています。

  • サービス プロバイダ (SP) は、ID プロバイダと直接通信することはありません。ブラウザまたは Python SDK は、すべてのリダイレクトを実行するエージェントとして機能します。

  • サービス プロバイダは、ユーザーが誰であるかを把握する前に、リダイレクト先の ID プロバイダを知る必要があります。

  • サービス プロバイダは、SAML アサーションが ID プロバイダから返されるまで、ユーザーが誰であるかを知りません。

  • SAML 認証フローは非同期です。SP は、IdP がフロー全体を完了するかどうかを認識しません。このため、SP は生成された認証要求の状態を維持しません。SP が IdP から応答を受信する場合、応答には必要なすべての情報が含まれている必要があります。

詳細については、『VMware NSX Advanced Load Balancer 構成ガイド』の「シングル サインオンの SAML 認証」トピックを参照してください。

SAML Python SDK

SDK では、saml_avi_api.py という名前のファイルに、サポートされている各 IdP の IdP クラス定義が含まれています。IdP 固有のクラスは、ApiSession 基本クラスから継承されます。IdP 固有のクラス定義には、特定のユーザーを認証するために呼び出される独自の認証方法があります。URL リダイレクトと SAML アサーションは、このクラスで処理されます。このクラスは、指定された IdP からの認証に成功した後にコントローラ セッションを返します。

Okta の例:

このコード スニペットのコレクションでは、OktaSAMLApiSession クラスを使用して Okta IdP のユーザーを認証し、コントローラ セッションを取得し、VS を作成します。(avi.sdk.saml_avi_api import OktaSAMLApiSession から)

NSX Advanced Load Balancer API セッションの作成

api = OktaSAMLApiSession("10.10.10.42", "okta_username", "okta_password")

または

api = ApiSession.get_session("controller_ip", username="foo", password="foo", idp=OktaSAMLApiSession)

プール sample_pool を使用した VS の作成

pool_obj = api.get_object_by_name('pool', 'sample_pool')
pool_ref = api.get_obj_ref(pool_obj)
services_obj = [{'port': 80, 'enable_ssl': False}]
vs_obj = {'name': 'sample_vs', 'ip_address': {'addr': '11.11.11.42', 'type': 'V4'},
         'services': services_obj, 'pool_ref': pool_ref}
resp = api.post('virtualservice', data=vs_obj)

すべての仮想サービスのリストの印刷

resp = api.get('virtualservice')
for vs in resp.json()['results']:
    print vs['name']

仮想サービスの削除

resp = api.delete_by_name('virtualservice', 'sample_vs')

OneLogin の例

このコード スニペットのコレクションでは、OneloginSAMLApiSession クラスを使用して OneLogin IdP のユーザーを認証し、コントローラ セッションを取得し、仮想サービスを作成します。

avi.sdk.saml_avi_api import OneloginSAMLApiSession から

NSX Advanced Load Balancer API セッションの作成

api = OneloginSAMLApiSession("10.10.10.42", "onelogin_username", "onelogin_password")

または

api = ApiSession.get_session("controller_ip", username="foo", password="foo", idp=OneloginSAMLApiSession)

プール sample_pool を使用した VS の作成

pool_obj = api.get_object_by_name('pool', 'sample_pool')
pool_ref = api.get_obj_ref(pool_obj)
services_obj = [{'port': 80, 'enable_ssl': False}]
vs_obj = {'name': 'sample_vs', 'ip_address': {'addr': '11.11.11.42', 'type': 'V4'},
         'services': services_obj, 'pool_ref': pool_ref}
resp = api.post('virtualservice', data=vs_obj)

すべての仮想サービスのリストの印刷

resp = api.get('virtualservice')
for vs in resp.json()['results']:
    print vs['name']

仮想サービスの削除

resp = api.delete_by_name('virtualservice', 'sample_vs')