# LDAP認証

KeeperコネクションマネージャーはLDAP認証に対応しています。

## Docker環境変数

`keeper/guacamole` イメージは、環境変数を使用してLDAPに対応するように変更できます。[ドキュメント](/keeper-connection-manager/jp/installation/docker-compose-install/keeper-guacamole.md)のLDAP\_\*変数の定義をご参照ください。

## Docker自動インストールおよびDocker Composeインストール

Dockerインストールメソッドを使用してKeeperコネクションマネージャーをインストールした場合、LDAPサポートが予め設定されていませんので、以下の手順でLDAPを有効にします。

1. ローカルインスタンスで、コンテナを停止します。

#### Dockerの自動インストール

```
sudo ./kcm-setup.run stop
```

#### Docker Composeのインストール

```
cd /path/to/docker-compose.yml
docker-compose stop
```

2. docker-composeファイルを編集します。

シンプルdockerメソッドまたはカスタムdockerメソッドを使用するには、`docker-compose.yml` ファイルを修正してLDAPサポートを追加します。rootとして `docker-compose.yml` ファイルを編集し、「`guacamole`」セクションを特定します。

```
    guacamole:
        image: keeper/guacamole:2
        environment:
            ACCEPT_EULA:"Y"
            GUACD_HOSTNAME: "guacd"
            MYSQL_HOSTNAME: "db"
            MYSQL_DATABASE: "guacamole_db"
            MYSQL_USERNAME: "guacamole_user"
            MYSQL_PASSWORD: "xxxxxxx"
            
            # LDAP Connection
            LDAP_HOSTNAME: "localhost"
            LDAP_PORT:389
            LDAP_ENCRYPTION_METHOD: "none"
            
            # Mapping Guacamole usernames to LDAP DN’s
            LDAP_USER_BASE_DN: "ou=people,dc=example,dc=net"
            
            ## Optional Settings ##
            LDAP_USERNAME_ATTRIBUTE: "sAMAccountName"
            
            # Indirect Username Mapping
            LDAP_SEARCH_BIND_DN: "cn=someUser,ou=people,dc=example,dc=net"
            LDAP_SEARCH_BIND_PASSWORD: "some_password"
            
            # Mapping Guacamole groups to LDAP DN's
            LDAP_GROUP_BASE_DN: "ou=groups,dc=example,dc=net"
            LDAP_GROUP_NAME_ATTRIBUTE: "cn"
```

### オプション設定

<details>

<summary>Guacamoleユーザー名をLDAP DNにマッピング</summary>

LDAPを使用してユーザーを認証するには、Guacamoleでユーザー名を対応するLDAP DNに変換する必要があります。LDAPディレクトリの複雑度に応じて、共通のベースDNに単一の属性を追加する方法や、LDAPクエリを使用する方法があります。

ユーザー名マッピングを有効にするには、`docker-compose.yml`に以下のオプションを追加します。

```
            # Mapping Guacamole usernames to LDAP DN’s
            LDAP_USER_BASE_DN: "ou=people,dc=example,dc=net"
            LDAP_USERNAME_ATTRIBUTE: "sAMAccountName"
```

`LDAP_USER_BASE_DN`プロパティによって定義されるベースDNは、LDAPディレクトリ内のすべてのGuacamoleユーザーによって共有される共通ベースを指定する必要があります。一方、ユーザー名を含む属性は`LDAP_USERNAME_ATTRIBUTE`によって定義されます。**LDAPを使用している場合は、このベースDNは常に必須です。**

**ユーザー名の直接マッピング**

デフォルトでは、GuacamoleはベースDNの前にユーザー名属性を付加することで、ユーザーのDNを直接取得しようとします。たとえば、ユーザーが「`someUser`」というユーザー名でログインしようとしているとします。ベースDNが「`ou=people, dc=example, dc=net`」で、ユーザー名属性が「`uid`」 (デフォルト) の場合、Guacamoleは以下の手順を実行してユーザーを認証します。

1. 「`uid`」属性を使用してベースDNの前にユーザー名を付加し、「`uid=someUser, ou=people, dc=example, dc=net`」というDNを生成します。
2. DN「`uid=someUser, ou=people, dc=example, dc=net`」とユーザーが設定したパスワードを使用してバインドを試みます。
3. バインドの試行が成功すると、認証は成功します。

**ユーザー名の間接マッピング**

より複雑なケースでは、ユーザーDNがユーザー名属性をベースDNに追加するだけでは直接的に導出できない場合があります。そのような場合、GuacamoleはLDAPクエリを発行してユーザーDNを取得することが可能です。このプロセスには、検索用のDNとパスワードが必要です。それらは `LDAP_SEARCH_BIND_DN` と `LDAP_SEARCH_BIND_PASSWORD` プロパティで定義されます。Guacamoleはこれらを使用してバインドを行い、クエリを実行します。

```
            # Indirect Username Mapping
            LDAP_SEARCH_BIND_DN: "cn=someUser,ou=people,dc=example,dc=net"
            LDAP_SEARCH_BIND_PASSWORD: "some_password" 
```

検索DNとパスワードを設定すると、Guacamoleは以下の手順でユーザーを認証します。

1. 検索DNとパスワードを使用して、LDAPディレクトリにバインドします。
2. ベースDNのサブツリー内で、定義されたユーザー名属性内にユーザーのユーザー名を含むオブジェクトを照会するLDAPクエリを発行します。
3. 該当するオブジェクトが1つだけ見つかった場合は、そのオブジェクトのDNとユーザーが設定したパスワードを使用してバインドを試みます。
4. バインドの試行が成功すると、認証は成功します。

</details>

<details>

<summary>GuacamoleグループをLDAP DNにマッピング</summary>

Guacamoleでの接続へのアクセスは、LDAPユーザーグループを使って以下の2つの方法で制御できます。

1. [**LDAP内に接続を直接定義する方法**](/keeper-connection-manager/jp/authentication/authenticating-users-with-ldap/storing-connection-data-within-ldap.md)\
   スキーマを変更し、`seeAlso`属性を使ってグループアクセスを制御します。
2. [**LDAPグループをGuacamoleグループにマッピングする方法**](/keeper-connection-manager/jp/authentication/authenticating-users-with-ldap/using-ldap-with-a-database.md)\
   データベースを利用してアクセスを制御します。

通常、LDAPスキーマの変更を避ける方が望ましいため、**LDAPグループをGuacamoleグループにマッピングする方法**が推奨されます。この方法を利用するには、関連するLDAPグループが存在するベースDNを定義し、Guacamoleがグループの固有の名前を判断するために使用するLDAP属性を設定する必要があります。

```
            # Mapping Guacamole groups to LDAP DN's
            LDAP_GROUP_BASE_DN: "ou=groups,dc=example,dc=net"
            LDAP_GROUP_NAME_ATTRIBUTE: "cn"
```

接続がLDAP内にある「`guacConfigGroup`」オブジェクトとして保存されており、LDAPグループを使ってアクセスを制御したい場合は、標準の「`seeAlso`」属性を使用します。この場合、`LDAP_GROUP_BASE_DN`プロパティが必要となります。

一方、接続がLDAPの外部 (例: データベース) に保存されていて、LDAPグループを使ってアクセスを制御したい場合は、`LDAP_GROUP_BASE_DN`と`LDAP_GROUP_NAME_ATTRIBUTE`の両方が必要となります。

* **LDAP\_GROUP\_BASE\_DN**: ユーザーのグループメンバーシップを照会するために必要です。
* **LDAP\_GROUP\_NAME\_ATTRIBUTE**: Guacamoleがグループを固有に識別するために使用します。この属性がなければ、グループ名を正しく認識できません。

</details>

3. コンテナを再起動します。

#### 簡易インストール

```
sudo ./kcm-setup.run upgrade
```

アップグレード後にコンテナは再起動します。再起動しない場合:

```
sudo ./kcm-setup.run start
```

#### カスタムインストール

```
sudo su
docker-compose up -d
```

{% hint style="success" %}
設定が完了しました。
{% endhint %}

### **カスタムルート証明書**

LDAPサーバーでカスタムルート証明書を使用する必要がある場合は、`/etc/pki/ca-trust/extracted/java/cacerts` ファイルをDocker Composeでボリュームマウントして、guacamole dockerコンテナの証明書を上書きしてください。

* 「`keytool`」を使用して証明書をJavaトラストストアにインポートします。
* cacertsファイルを目的のguacamole dockerコンテナにボリュームマウントします。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeper-connection-manager/jp/authentication/authenticating-users-with-ldap.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
