LDAP 検索フィルターの作成方法
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
目的
このドキュメントでは、アトラシアン アプリケーションの LDAP 構成でユーザー オブジェクト フィルターおよびグループ オブジェクト フィルター属性のより高度なフィルターを構築する方法について概要を説明します。
フィルターとは
フィルターを使用すると、アプリケーションへのアクセスを許可されるユーザーまたはグループの数を制限できます。つまり、フィルターは、LDAP ツリーのどの部分からアプリケーションが同期するかを制限します。
フィルターは、ユーザーとグループのメンバーシップの両方に対して作成でき、また作成すべきです。これにより、アプリケーションがアクセスを必要としないユーザーやグループで溢れることがなくなります。
ソリューション
フィルターを作成するときは、アプリケーションへのアクセスを許可したいユーザーのグループに共通の属性を選択するのが最適です。多くの場合、これはグループ メンバーシップを示す属性や、「Person」のようなオブジェクト クラスとなります。
グループのメンバーシップを示すために使用される属性は、すべての種類の LDAP に共通しているわけではありません。この属性の例としては、「groupMembership」や「Member」などがあります。
複数の属性を一致させるにはどうすればいいですか
たとえば、ユーザーが 2 つの ObjectClass 属性 (1つは「person」、もう 1 つは「user」) を持っていることで区別される場合、次のようにマッチングします。
(&(objectClass=person)(objectClass=user))
先頭のアンパサンド記号「ampersand symbol '&'
」に注意してください。これは、「objectClass=person および objectClass=user を検索する」ことを意味します。
または、次のようになります。
(|(objectClass=person)(objectClass=user))
これは、「objectClass=person または object=user」を検索する」ことを意味します。
パイプ記号「pipe symbol '|'
」は「OR」を意味します。これは特別な XML 文字ではないため、エスケープする必要はありません。
ワイルドカード
(&(objectClass=user)(cn=*Marketing*))
これは、「objectClass=user および cn に「Marketing」という単語を含むすべてのエントリーを検索する」ことを意味します。
論理演算子の「!」(または NOT) を使用するフィルターでは、ワイルドカードはサポートされません。以降をご確認ください。
The LDAP services themselves do not support wildcards for memberOf
attribute
and other Distinguished Name when setting up LDAPFilter.
3 つの属性をマッチさせるにはどうすればいいですか
もう 1 つ句を追加してください:
(&(objectClass=user)(objectClass=top)(objectClass=person))
3 つ以上の属性について追加の句を追加することもできます。
識別名の一致する要素
Microsoft Active Directory は拡張可能なマッチングを実装していないため、次の例は Active Directory ではうまくいきません。
たとえば、サーバーの 2 つのサブツリーでグループを検索する必要があるなど、DN の一部を一致させたいな場合があります。
(&(objectClass=group)(|(ou:dn:=Chicago)(ou:dn:=Miami)))
これは、DN に「Chicago」または「Miami」のいずれかの OU 要素を持つグループを検索します。
「not」を使用する
ある表現 (expression) に一致するエンティティを除外するには、「!」を使います。
したがって、
(&(objectClass=group)(&(ou:dn:=Chicago)(!(ou:dn:=Wrigleyville))))
は、Wrigleyville の OU 要素を持つグループを除く、すべての Chicago グループを検索します。
追加の括弧に注意してください: (!(<expression>))
「not」(つまりオブジェクトを除外するために「!」) を使用する場合は、3.4 以前の Confluence を使用しているのであれば、XML ファイルの中でエンティティ「!」として表現しなければならないことに注意してください。
3.4 以前の Confluence の場合、このドキュメントを使用して検索フィルターを作成したら、XML ファイルに追加する前にアンパサンド記号と感嘆符記号をエスケープしなければなりません。そのため、以下の例のようにします。
(&(objectClass=person)(!(objectClass=user)))
(&(objectClass=person)(!(objectClass=user)))
エスケープが必要な他の XML 文字については、 この外部ドキュメントを参照してください 。
サンプル フィルター
これらのフィルターは Active Directory 用に書かれています。 OpenLDAP などに使用するには、属性を変更する必要があります。
参考:
注意:
以下のフィルターは、Atlassian アプリケーションのユーザー ディレクトリ設定のユーザー オブジェクト フィルターに適用する必要があります。
これは「CaptainPlanet」グループのユーザーだけを同期します。
(&(objectCategory=Person)(sAMAccountName=*)(memberOf=cn=CaptainPlanet,ou=users,dc=company,dc=com))
そしてこれは、このグループのメンバーであるユーザーを、直接またはネストによって検索します。
(&(objectCategory=Person)(sAMAccountName=*)(memberOf:1.2.840.113556.1.4.1941:=cn=CaptainPlanet,ou=users,dc=company,dc=com))
Active Directory で、CaptainPlanet グループ内のネストされたグループを見つけたい場合は、memberOf:1.2.840.113556.1.4.1941 (数値文字列は置き換えない) を持つことが重要です。
これは、 4 つのグループ (fire、wind、water、heart) の一部またはすべてのメンバーであるユーザーを検索します。
(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=cn=fire,ou=users,dc=company,dc=com)(memberOf=cn=wind,ou=users,dc=company,dc=com)(memberOf=cn=water,ou=users,dc=company,dc=com)(memberOf=cn=heart,ou=users,dc=company,dc=com)))
これは、メールアドレスを持つユーザーを検索します。
(&(objectCategory=Person)(sAMAccountName=*)(mail=*))
これは、メールアドレスを持ち、かつ、以下のフィルターのいずれか、またはすべてのグループのメンバーであるユーザーを検索します。
(&(objectCategory=Person)(sAMAccountName=*)(mail=*)(|(memberOf=cn=fire,OU=Atlassian Groups,dc=xxxx,dc=com)(memberOf=cn=wind,OU=Atlassian Groups,dc=xxxx,dc=com)(memberOf=cn=water,OU=Atlassian Groups,dc=xxxx,dc=com)(memberOf=cn=heart,OU=Atlassian Groups,dc=xxxx,dc=xxxx)))
これは、ユーザー オブジェクト フィルターに追加されると、さまざまな CN からユーザーを検索してインポートします。その結果、「Jira Administrators」、「jira-users」、「confluence-adminministrators」のユーザーが Atlassian アプリケーションに同期されます。
(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=CN=Jira Administrators,CN=Users,DC=test,DC=mydomain,DC=com)(memberOf=CN=jira-users,CN=Users,DC=test,DC=mydomain,DC=com)(memberOf=CN=confluence-administrators,CN=Users,DC=test,DC=mydomain,DC=com)))
関連トピック
Restricting LDAP Scope for User and Group Search
Using Apache Directory Studio for LDAP Configuration
ユーザーディレクトリの設定 - Confluence ドキュメント