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が返されます。
-
ナビゲーション・メニューを開き、「データベース」をクリックします。OpenSearchで、「クラスタ」をクリックします。
- 「クラスタ」リストで、LDAPを構成するクラスタの名前をクリックします。
- クラスタの詳細ページで、「その他のアクション」をクリックし、「外部エンドポイントの追加」を選択します。
- LDAPサーバーのIPアドレスを入力し、「送信」をクリックします。
- 「リソース」セクションで、「外部エンドポイント」をクリックします。
- 追加した外部エンドポイントの「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"
}
}
}
}
}
}