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')