[認証] ワークスペースを使用して、SaltStack Config のディレクトリ サービスが LDAP プロトコルを使用するように構成できます。このプロトコルは、Active Directory や Microsoft Azure などのサービスへの接続に使用されます。

注: 必要に応じて同時に複数のシステムを使用して、 SaltStack Config のユーザーを認証できます。たとえば、SAML ベースの IdP および LDAP ベースの IdP を使用すると同時に、複数のユーザー認証情報を RaaS サーバにネイティブに保存できます。ただし、 SaltStack Config では、複数の SAML プロバイダまたは複数の LDAP プロバイダを同時に構成することはできません。

SaltStack Config は、次のバック エンド プロセスを使用して LDAP ベースのシステムを認証します。

  • プレビュー - 接続設定をプレビューすると、SaltStack Config によって LDAP サーバからユーザーとグループのサンプル リストが取得されるため、正しい構成パラメータを入力したかどうかを確認できます。
  • ログイン - ユーザーが SaltStack Config ログイン フォームに認証情報を入力すると、バックエンド サーバは、その時点でのデータベース内の一致を確認します。その後、複数ステップの検索プロセスが開始され、一致が見つかるとユーザーが認証されます。この検索プロセスを使用した場合、有効なグループ内の有効なユーザーは、最初にログインするまで [ロール] ワークスペースに表示されません。
  • バックグラウンド タスク - SaltStack Config は定期的にバックグラウンド ジョブを実行することにより、リンクされている各グループとユーザーをディレクトリ サービス接続内で検索して存在を確認します。グループまたはユーザーが削除されている場合、バックエンド サーバはデータベース内のそのリンクを無効にします。
  • アーカイブされたグループとユーザー - ディレクトリ サービス接続から削除したすべてのグループは、アーカイブされます。これらのグループは非アクティブ化され、ユーザーはログインできませんが、[ロール] ワークスペースには引き続き表示され、選択できます。これは、以前は [ロール] ワークスペースに表示されていた削除済みのユーザーにも適用されます。
  • ネストされたグループ - ネストされたグループを操作する場合は、親グループを有効にするとすべての子グループもデフォルトで有効になります。

LDAP 接続の構成

LDAP を構成するには、最初に接続を作成し、次に特定の LDAP ユーザーおよびグループについて SaltStack Config の認証を有効にします。グループまたはユーザーを有効にすると、ロールベースのアクセス制御 (RBAC) 設定を定義できます。

Active Directory や OpenLDAP など、ディレクトリ サービスに合わせてカスタマイズされたデフォルトの設定を使用したフィールドへの事前入力を選択できます。

注: 次の手順は、LDAP システム全体のレイアウトを理解している経験豊富な LDAP 管理者または Active Directory 管理者が実行する必要があります。詳細は管理者に確認してください。

LDAP ディレクトリ サービスを設定するには、次の手順に従います。

  1. (オプション)LDAP を構成する前に、サードパーティ製ツールを使用した接続とクエリのテストが役立つことがあります。Active Directory ユーザーの場合は、LDP または ADSI Edit を使用できます。Linux ユーザーの場合、推奨されるツールは ldapsearch です。
    注: これらのツールを使用したテストの詳細については、サポート センターの How to verify and troubleshoot a Directory Service connectionを参照してください。
  2. サイド メニューで [管理] >[認証] の順にクリックします。
  3. [作成] をクリックします。
  4. [構成タイプ] メニューの [LDAP] を選択します。
  5. (オプション)[設定] で、[デフォルトの事前入力] をクリックし、ドロップダウンからディレクトリ サービスを選択します。

    選択に基づいてデフォルトのエントリがポピュレートされます。ただし、[ユーザー検索 DN] などの特定のエントリは、完全にはポピュレートされません。エントリがディレクトリ サービスのスキーマと一致していることを確認し、プレースホルダ テキストをサービスの適切な値に置き換える必要があります。

  6. LDAP 接続の情報を入力または確認します。

    [基本]

    フィールド 説明
    名前 LDAP 接続の名前。これは表示専用の名前であるため、この認証バックエンドを他の認証バックエンドと区別しやすい任意の名前を入力することを推奨します。
    ホスト FQDN または IP アドレスのいずれかの形式による LDAP ホスト サーバ アドレス。
    ポート LDAP サーバが構成されているポート。デフォルトは、暗号化されない LDAP の場合は 389、SSL 上の LDAP の場合は 636 です。
    バックグラウンド同期 SaltStack Config は、ここで定義された一定の間隔(分)で、すべてのユーザーとグループを認証バックエンドに対して検証します。
    SSL
    SSL の有効化
    RaaS サーバ設定で指定された証明書を使用して、SSL (Secure Sockets Layer) 経由で LDAP サーバに接続する場合に選択します。構成が指定されていない場合は、システム証明書ストアが SSL 接続の検証に使用されます。RaaS サーバの設定の詳細については、『 SaltStack Config のインストールと構成』ガイドの SSL 証明書の設定を参照してください。
    重要: ベスト プラクティスとして、[SSL の有効化] を選択します。このオプションが選択解除されたままの場合、 SaltStack Config では安全でない接続を使用して情報がプレーン テキストで送信されます。
    証明書の検証
    選択すると、接続時に SSL 証明書が検証されます。自己署名証明書を使用する場合などに、検証をスキップするためには選択解除のままにします(本番環境では推奨されません)。

    [認証]

    フィールド 説明
    認証ベース DN

    基本 LDAP 識別名これは、グループとユーザーのクエリを実行する場所です(例:DC=sse,DC=example,DC=com)。

    注: LDAP 詳細ページには、次に示すように [Person Object Class][Account Attribute Name][Group Class][Group Attribute Name]、および [Sync Scheduling] 用の個別の入力フィールドがあります。したがって、[ベース DN] フィールドにはこれらのオブジェクトを含めないでください。
    管理バインド DN LDAP サーバに対して構成される管理者 DN。SaltStack Config では、これを使用して、ユーザーとグループの検索に使用するディレクトリに対する認証を行います。構文 cn=Administrator,cn=Users,dc=example,dc=com に基づいて入力します。
    管理バインド DN パスワード

    管理者の個別のパスワード。

    これは、暗号化されてデータベースに保存されます。プレーンテキストで保存されません。

    認証バインド DN フィルタ

    フィルタが適用され、特定のユーザーが選択されます。この検索の結果は、SaltStack Config がディレクトリにバインドする際や、ユーザーに SaltStack Config へのアクセス権を付与する際に使用するユーザー DN です。これは、1 回の検索で返される結果の数を制限するときに有用です。

    注: フィルタ構文は非常に複雑になる可能性があるため、ベスト プラクティスとしては、このフィールドに入力する前に LDP、 ldapsearch などのツールを使用して入力を検証し、必要な調整を行います。

    次のサンプル フィルタは、DevOps またはレベル II グループに属する、指定されたユーザー名に一致するアカウントのみを返します。

    (&(objectclass=user)(sAMAccountName={username})(|(memberOf=CN=DevOps,OU=Groups,OU=TestCompanyHQ,DC=adtest,DC=com)(memberOf=LevelII,OU=Groups,DC=adtest,DC=com)))

    事前入力済みのデフォルト値を使用する場合は、プレースホルダ テキストを、実際のディレクトリ サービスに対応する正しい値に置き換える必要があります。

    注: フォレスト構造を構成する場合、このフィールドは空白のままにします。
    リモートの一意の ID 属性名 一意のエントリを識別するために使用される値の名前。これは、すべてのエントリに使用される一意の ID 属性です。Active Directory では、これは ObjectGUID です。

    [グループ]

    フィールド 説明
    グループ検索 DN グループの検索ベース。たとえば Active Directory では、これを cn=Groups,dc=example,dc=com になります。グループを検索する際のディレクトリ内の場所を示します。次の [グループ検索範囲] と組み合わせて使用します。
    グループ検索範囲

    [グループ検索 DN] で指定されたベースからのディレクトリ検索の深さを示します。次の 4 つの値のいずれかを指定できます。

    baseObject
    値 0。一般的には base と指定します。これを使用すると、このオブジェクトのみが検索され、他のオブジェクトは検索されません。
    singleLevel
    値 1。一般的には one と指定します。これを使用すると、ベース エントリの直接的な子のみが一致と見なされます。
    wholeSubtree
    値 2(ldap3 では SUBTREE)は、 sub とも呼ばれます。これを使用すると、ベースおよびその下位を任意の深さで検索できます。
    subordinateSubtree
    値 3。一般的には subordinates と指定します。これは wholeSubtree と同じですが、ベースの検索エントリが無視されます。
    グループ検索 DN フィルタ ディレクトリからグループを抽出するための検索フィルタ。これは通常 (objectClass=group) ですが、一部の Active Directory 構成では (objectCategory=group) になることもあります。グループ クラスに加えて使用することで、より詳細な指定ができます。
    グループ クラス groupOfNames など、グループを定義するために使用されるオブジェクト クラス名。
    グループ名属性 グループ名に使用する属性の名前。複数値ではなく単一値の属性を入力します。
    グループ メンバーシップ属性 グループ名を含むユーザー エントリ内の属性の名前(例:memberOf)。

    [ユーザー]

    フィールド 説明
    ユーザー検索 DN ユーザーの検索ベース。たとえば、Active Directory では cn=Users,dc=example,dc=com、他のディレクトリ サービスでは cn=people,cn=accounts,dc=example,dc=com になります。ユーザーを検索する際のディレクトリ内の場所を示します。次の [ユーザー検索範囲] と組み合わせて使用します。
    ユーザー検索範囲 [ユーザー検索 DN] で指定されたベースからのディレクトリ検索の深さを示します。次の 4 つの値のいずれかを指定できます。[グループ検索範囲] で説明されている 4 つの値を参照してください。
    ユーザー検索 DN フィルタ ディレクトリからユーザーを抽出するための検索フィルタ。これは通常 (objectClass=person) ですが、一部の Active Directory 構成では (objectCategory=user) になることもあります。
    Person クラス ログインを有効にするユーザーを含むディレクトリ サービスのクラス名。ほとんどのシステム(Active Directory を含む)では person が使用されますが、一部のシステムでは user または inetOrgPerson が使用されます。
    ユーザー ID 属性 ユーザー アカウント属性の一意の名前。Active Directory の場合、sAMAccountName。その他のサービスでは、多くの場合、uid または memberUid が使用されます。
    ユーザー メンバーシップ属性 ユーザー名を含むグループ エントリ内の属性の名前。考えられる例には、memberuniquemember があります。
  7. 保存せずに設定をプレビューするには、[プレビューの更新] をクリックします。

    接続のために選択されたユーザーとグループがプレビュー ウィンドウに表示されます。必要に応じて [グループ] または [ユーザー] タブを選択すると、サービスに関連付けられているユーザーとグループをプレビューできます。

  8. [保存] をクリックします。

    LDAP 構成が保存されます。構成が適切かどうかを確認するには、テスト ユーザー アカウントから SaltStack Config へのログインを試行します。ログインできない場合は、トラブルシューティングを参照してください。

    注: LDAP 構成の場合、指定されたグループとユーザーを含む接続設定が SaltStack Config によって保存されます。ディレクトリ全体が同期されるのではなく、定義した範囲内のグループとユーザーのみが取得されます。

    時間の経過につれて、LDAP ディレクトリの更新または再同期が必要になることがあります。たとえば、新しいユーザーを追加して SaltStack Config で有効にする場合は、ディレクトリを更新する必要があります。

グループおよびユーザーの有効化

LDAP 接続を設定した後は、ディレクトリ サービス グループを構成して、ユーザーが SaltStack Config にログインできるようにする必要があります。ディレクトリ サービス グループを構成するには、次の手順に従います。

  1. 認証ワークスペースで、必要な LDAP 構成を選択します。
  2. [グループ] タブを選択し、LDAP 構成から取得されたグループのリストを確認します。
    注: 取得するグループの数が多い場合、ページの読み込みに最大 1 分かかる場合があります。
  3. SaltStack Config で、有効にするグループを選択します。
  4. [ユーザー] タブを選択し、LDAP 構成から取得されたグループのリストを確認します。
    注: 取得するユーザーの数が多い場合、ページの読み込みに最大 1 分かかる場合があります。
  5. SaltStack Config で有効にするユーザーを選択します。
    注: 有効なグループに含まれるユーザーは選択済みになっており、選択を解除することはできません。
    ディレクトリ サービスで有効なグループに含まれるユーザー
  6. [保存] をクリックします。

    これで、選択したグループに対してロールベースのアクセス コントロール (RBAC) を定義できます。ただし、選択したグループに含まれる個々のユーザーの設定をロール ワークスペースで管理できるのは初回ログイン後になります。グループまたはユーザーを削除するには、グループまたはユーザーの選択を解除し、[保存] をクリックします。

    SaltStack Config の RBAC の詳細については、ユーザー ロールの定義方法を参照してください。

LDAP 接続のトラブルシューティング

接続を正常にプレビューできない場合は、次に示すトラブルシューティング手順を実行してください。
問題 説明 解決方法
接続のプレビューができない

グループおよびユーザーのプレビューができない場合、多くの場合には、LDAP サーバと SaltStack Config との接続に問題があるか、または LDAP 構成フォームに入力した内容が無効であることが原因です。

  1. SaltStack Config から LDAP サーバの選択したポートへの TCP 接続が許可されていることを確認します。
  2. フォームに入力した内容を再確認し、サードパーティのツールを使用して構文を検証します。How to verify and troubleshoot a Directory Service connectionを参照してください。
  3. 上記のいずれの方法でも問題が解決しない場合は、以下の「その他の問題」セクションを参照してください。
  4. 上記のいずれの方法でも問題が解決しない場合は、カスタマー サポートにお問い合わせください。
接続のプレビューで、ページの読み込みができない ページの読み込みが 2 分以上停止した状態になっている場合は、RaaS サービスを再起動した後で構成を削除し、再構成してください。
  1. RaaS ログを開きます。
    tail -f /var/log/raas/raas

    ログには、次のようなエラーが含まれます。

    [ERROR    :256][ForkPoolWorker-2:10253][ldap_preview_background_task(some_uuid)]
    Task ldap preview_background_task[some_uuid]raised unexpected: KeyError('ad-1_preview')
  2. RaaS サービスを停止し、再起動します。
    systemctl stop raas
    systemctl start raas
  3. SaltStack Config のユーザー インターフェイスに戻り、LDAP 接続を削除します。
    注:

    削除の前に、構成のエントリをバックアップ用のテキスト ファイルにコピー アンド ペーストすることを推奨します。

  4. LDAP 構成を再度作成します。
その他の問題

LDAP 接続を構成して保存した状況でユーザーがログインできない場合や、その他の問題が発生する場合は、拡張デバッグを有効にして raas のログを確認し、根本原因を特定します。

拡張デバッグを有効にするには、次の手順に従います。

  1. RaaS で、/etc/raas/raas を開きます。
  2. 次の変更を行います。
    • Loggingoptions で、log_file_loglevel:debug のコメント アウトを解除します。
    • AD/LDAPdriverconfiguration で、log_level のコメント アウトを解除し、log_level:EXTENDED に設定します。
  3. RaaS サービスを停止し、再起動します。
    systemctl stop raas
    systemctl start raas
  4. raas を表示します。
    tail -f /var/log/raas/raas

ログに表示される一般的なエラーは次のとおりです。

  • 接続 (SSL) の設定が誤っています。SSL の設定を修正してください。
    [raas.utils.validation.schemas.settings][DEBUG   :546 ][Webserver:9096]
    Error while connecting to AD/LDAP Server. SSL connection issues: socket
    ssl wrapping error: [Errno 104] Connection reset by peer
  • 管理者バインド DN のパスワードが誤っています。パスワードを確認して再入力してください。
    [raas.utils.rpc   ][DEBUG   :284 ][Webserver:9095]
    Processed RPC request(129360670417695). Response:
    {'riq': 129360670417695, 'ret': None, 'error': {'code': 3004, 'message':
    'Request validation failure.', 'detail': {'_schema':
    ['Credentials are not valid']}}, 'warnings': []}
  • 事前入力されたデフォルトの認証バインド DN フィルタで競合が発生しています。フィールドを空のままにするか、{{username}} の代わりに {username} を使用してください。
    注:

    このエラーは、LDAP 接続を保存した状況でユーザーがログインできない場合に、発生する可能性があります。

    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :903 ][Webserver:9096]
    Running _get_auth_backend_user with this search_filter: (&(objectclass=person)(sAMAccountName={username}))
    
    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :931 ][Webserver:9096]
    Could not find any user using '(&(objectclass=person)(sAMAccountName={username}))'
    as the search filter in the ldap backend under the ad-1 configuration.
    Trying remote_uid 'None'
    
    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :963 ][Webserver:9096]
    Could not find any user using '(&(objectClass=person)(objectGUID=None))'
    as the search filter in the ldap backend under the ad-1 configuration.