OpenSearchを使用した検索でのLDAP認証

OpenSearchでOCI SearchでLDAPプロバイダを使用する方法について学習します。

Lightweight Directory Access Protocol (LDAP)アイデンティティ・プロバイダを使用して、OpenSearchクラスタおよびOpenSearchダッシュボードへのアクセスを制御するユーザーを認証および認可できます。OpenSearchで検索すると、LDAP v1およびLDAP v2がサポートされます。

前提条件

  • LDAPプロバイダ。
  • 既存のOpenSearchクラスタ。クラスタがCLIまたはAPIを使用して作成された場合は、セキュリティ・モードを強制に設定して、クラスタのロールベースのアクセス制御も有効にする必要があります。
  • クラスタが配置されているサブネットは、LDAPサーバーが配置されているサブネットへのネットワーク・トラフィックを許可するエグレス・ルールで構成されます。
  • 詳細は、ボールトの管理およびシークレットの管理を参照してください。Vaultシークレットとして格納されるセキュリティ・プラグインのパスワード。次のポリシー例に示すように、OpenSearchクラスタがパスワードが格納されているVaultシークレットにアクセスできるようにポリシーを構成する必要があります:
    ALLOW ANY-USER TO use secret-family IN TENANCY WHERE ALL
     {request.principal.type='opensearchcluster', request.resource.compartment.id = '<customer_cluster_compartment_id>', target.secret.id = '<target-secret-ocid>'}

LDAPサーバーのNat IPアドレスの取得

クラスタのLDAPプロバイダを構成するには、クラスタがLDAPサーバーへの接続に使用するNat IPアドレスが必要です。このアドレスを取得するには、外部エンドポイントをクラスタに追加する必要があります。この接続を追加するときにLDAPサーバーのIPアドレスを指定し、OpenSearchで検索するとNat IPが返されます。

  1. ナビゲーション・メニューを開き、「データベース」をクリックします。OpenSearchで、「クラスタ」をクリックします。

  2. 「クラスタ」リストで、LDAPを構成するクラスタの名前をクリックします。
  3. クラスタの詳細ページで、「その他のアクション」をクリックし、「外部エンドポイントの追加」を選択します。
  4. LDAPサーバーのIPアドレスを入力し、「送信」をクリックします。
  5. 「リソース」セクションで、「外部エンドポイント」をクリックします。
  6. 追加した外部エンドポイントの「Nat IP」列の値をコピーします。これは、クラスタのLDAPプロバイダ構成のhosts属性で指定するアドレスです。

LDAPプロバイダの構成

OpenSearchセキュリティ・プラグインの構成APIを使用して、LDAPプロバイダを構成します。LDAP構成形式については、接続設定を参照してください。

構成の hosts属性について、前のセクションでコピーしたNat IPアドレスを指定します。

次の例では、LDAPをサポートするように構成を更新します。

PUT {<cluster_endpoint>}/_plugins/_security/api/securityconfig/config
{
  "dynamic": {
    "security_mode": "ENFORCING",
    "http": {
      "anonymous_auth_enabled": false,
      "xff": {
        "enabled": false
      }
    },
    "authc": {
      "basic_internal_auth_domain": {
        "description": "Authenticate via HTTP Basic against internal users database",
        "http_enabled": true,
        "transport_enabled": true,
        "order": 1,
        "http_authenticator": {
          "type": "basic",
          "challenge": true
        },
        "authentication_backend": {
          "type": "intern"
        }
      },
      "openid_auth_domain": {
        "description": "Authenticate using OpenId connect",
        "http_enabled": true,
        "transport_enabled": true,
        "order": 0,
        "http_authenticator": {
          "type": "openid",
          "challenge": false,
          "config": {
            "subject_key": "sub",
            "roles_key": "userAppRoles",
            "openid_connect_url": "<openid_url>"
          }
        },
        "authentication_backend": {
          "type": "noop"
        }
      },          
      "ldap_auth_domain": {
        "order": 1,
        "description": "LDAP provider",
        "http_enabled": true,
        "transport_enabled": true,
        "http_authenticator": {
            "type": "basic",
            "challenge": true
        },
        "authentication_backend": {
            "type": "ldap",
            "config": {
                "hosts": ["<NAT_IPs>:389"],
                "bind_dn": "cn=admin,dc=example,dc=org",
                "passwordSercetLocation": {
                  secreteOcid: "ocid1.secret.oc1.iad.<unique_ID>",
                  secretVersion: <secret_version>
                },
                "usersearch": "(uid={0})",
                "userbase": "ou=people,dc=example,dc=org",
                "username_attribute": "uid",
                "rolebase": "ou=groups,dc=example,dc=org",
                "rolesearch": "(memberUid={1})",
                "rolename": "cn"
            }
        }
      }
    },
    "authz": {
        "ldap": {
            "http_enabled": true,
            "transport_enabled": true,
            "authorization_backend": {
                "type": "ldap",
                "config": {
                    "hosts": ["<NAT_IPs>:389"],
                    "bind_dn": "cn=admin,dc=example,dc=org",
                    "passwordSercetLocation": {
                      secreteOcid: "ocid1.secret.oc1.iad.<unique_ID>",
                      secretVersion: <secret_version>
                    },
                    "usersearch": "(uid={0})",
                    "userbase": "ou=people,dc=example,dc=org",
                    "username_attribute": "uid",
                    "rolebase": "ou=groups,dc=example,dc=org",
                    "rolesearch": "(memberUid={1})",
                    "rolename": "cn"
                }
            }
        }
    }
  }
}