# keeper/guacamole-ssl-nginx

**イメージ:** `keeper/guacamole-ssl-nginx`

`keeper/guacamole-ssl-nginx`はNGINXのDocker化されたデプロイで、[Dockerの公式Nginxイメージ](https://hub.docker.com/_/nginx)で構築され、GuacamoleにSSLターミネーションを提供するように事前に設定されています。以下の機能をサポートしています。

* [Let's Encryptからの証明書の自動取得。](#id-.glyptodon-guacamolesslnginxv2.x-lets-encryptletsencrypt)
* [自己署名証明書の自動生成。](#id-.glyptodon-guacamolesslnginxv2.x-self-signed-certificatesself-signedcertificates)
* 認証局からすでに取得した[既存の証明書の使用](#id-.glyptodon-guacamolesslnginxv2.x-existing-certificate-from-an-arbitrary-caexistingcertificatefrom)。

このイメージは、Keeperコネクションマネージャーの一部として作成され、同じ[EULA](https://www.keepersecurity.com/en_GB/termsofuse.html?t=v)で利用できるようになっています。通常は、[`keeper/guacamole`イメージ](https://docs.keeper.io/keeper-connection-manager/installation/docker-compose-install/keeper-guacd)を使用して、コンテナにSSLターミネーションを提供するために使用します。

## サポートされているSSL証明書の種類 <a href="#id-.glyptodon-guacamolesslnginxv2.x-supportedtypesofsslcertificates" id="id-.glyptodon-guacamolesslnginxv2.x-supportedtypesofsslcertificates"></a>

`keeper/guacamole-ssl-nginx`では、既存のSSL証明書を生成、取得、使用するためのメカニズムがいくつかサポートされています。使用されるメカニズムは、Dockerコンテナの作成時に指定した環境変数によって異なります。

これらのメカニズム固有の環境変数に加えて、**必ず指定する必要のある以下の環境変数のセットがあります**。

* [`ACCEPT_EULA`](#id-.glyptodon-guacamolesslnginxv2.x-accept_eulaaccept_eula) - KeeperコネクションマネージャーのEULAに同意するか否か (このイメージを使用するにはEULAに同意する必要があります)。
* [`GUACAMOLE_HOSTNAME`](#id-.glyptodon-guacamolesslnginxv2.x-guacamole_hostnameguacamole_hostname) - Guacamoleインスタンスのホスト名とアドレス。
* [`SSL_HOSTNAME`](#id-.glyptodon-guacamolesslnginxv2.x-ssl_hostnamessl_hostname) - Guacamoleへのアクセスに使用される公開ドメイン名。

## Let's Encrypt <a href="#id-.glyptodon-guacamolesslnginxv2.x-lets-encryptletsencrypt" id="id-.glyptodon-guacamolesslnginxv2.x-lets-encryptletsencrypt"></a>

既存の証明書が指定されず、自己署名証明書の生成も求められない場合は、Let's Encryptがデフォルトで使用されます。`keeper/guacamole-ssl-nginx`イメージは、「certbot」ツールを使用してLet's Encryptサービスに接続し、SSL証明書を取得します。

Let's Encrypt証明書を使用する場合は、以下のLet's Encrypt固有の環境変数が必須となります。

* `LETSENCRYPT_ACCEPT_TOS` - Let's Encryptの利用規約に同意するか否か (サービスを使用するには、Let's Encryptの利用規約に同意する必要があります)。

利用規約への同意に加えて、証明書に関する重要なアラートを受信できるようにメールアドレスの登録が強く推奨されています。登録しない理由がない限り、メールアドレスを登録するようにしましょう。

* `LETSENCRYPT_EMAIL` - 証明書を要求する際にLet's Encryptに提出するメールアドレス。

Let's Encryptの使用方法をテストするだけの場合は、本番環境ではなく[Let's Encryptのステージング (テスト) 環境](https://letsencrypt.org/docs/staging-environment/)を使用する必要があります。

* `LETSENCRYPT_STAGING` - 本番環境ではなく、Let's Encryptのステージング環境を使用するには、「Y」に設定します。

取得した証明書は必要に応じてこのイメージによって自動的に更新されます。取得に失敗した場合、コンテナは停止し、失敗の詳細がログに記録され、次にコンテナが起動したときに取得プロセスが再試行されます。

`keeper/guacamole-ssl-nginx`イメージでは、Dockerボリュームを使用してLet's Encryptの証明書や状態を保存し、コンテナを再作成してもそれらが失われないようにします。

たとえば、以下の例では、`docker-compose.yml`ファイルにLet's Encrypt証明書が生成されます。

```
    ssl:
        image: keeper/guacamole-ssl-nginx:2
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        environment:
            ACCEPT_EULA:"Y"
            GUACAMOLE_HOSTNAME: guacamole
            SSL_HOSTNAME: keeper.mycompany.com
            LETSENCRYPT_ACCEPT_TOS:"Y"
            LETSENCRYPT_EMAIL: you@company.com
```

## 任意のCAから取得した既存の証明書 <a href="#id-.glyptodon-guacamolesslnginxv2.x-existing-certificate-from-an-arbitrary-caexistingcertificatefrom" id="id-.glyptodon-guacamolesslnginxv2.x-existing-certificate-from-an-arbitrary-caexistingcertificatefrom"></a>

認証局から取得した証明書がすでにある場合は、環境変数`CERTIFICATE_FILE`および`PRIVATE_KEY_FILE`で関連するファイルを指定することで、その証明書を使用できます。関連するファイルは、Dockerボリュームマウントを使用してイメージに開示する必要があります。

* `CERTIFICATE_FILE` - 証明書PEMファイルへのフルパス。
* `PRIVATE_KEY_FILE` - 秘密鍵PEMファイルへのフルパス。

CAによる証明書の更新時期が来たら、証明書と秘密鍵を交換してNGINXをリロードする必要があります。証明書が更新されたら、Docker Composeを停止して起動します。

Docker Composeの設定に関する以下の例では、鍵を保持する共有ボリュームからカスタム証明書を読み込みます。

```
    ssl:
        image: keeper/guacamole-ssl-nginx:2
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        environment:
            ACCEPT_EULA:"Y"
            GUACAMOLE_HOSTNAME: guacamole
            SSL_HOSTNAME: keeper.mycompany.com
            CERTIFICATE_FILE: "/path/in/container/mycert.pem"
            PRIVATE_KEY_FILE: "/path/in/container/mykey.pem"
        volumes:
            - "/local/path/to/keys:/path/in/container/"
```

## 自己署名証明書 <a href="#id-.glyptodon-guacamolesslnginxv2.x-self-signed-certificatesself-signedcertificates" id="id-.glyptodon-guacamolesslnginxv2.x-self-signed-certificatesself-signedcertificates"></a>

テスト用にデプロイする場合、独自の自己署名証明書を自動的に生成して維持することができます。

* `SELF_SIGNED` - 「Y」に設定すると、テスト用に自己署名証明書を自動的に生成します。

`keeper/guacamole-ssl-nginx`イメージが、起動時に自己署名証明書を再生成します。証明書は生成後30日で期限切れになるため、証明書が期限切れにならないように21日ごとに自動的に再生成します。

証明書の有効期限とフィンガープリントは、証明書が再生成されるたびにログに記録されるため、基本的なサーバーIDの検証が可能になります。

## 環境変数 <a href="#id-.glyptodon-guacamolesslnginxv2.x-environmentvariables" id="id-.glyptodon-guacamolesslnginxv2.x-environmentvariables"></a>

公式のNGINXイメージがベースとなっているため、以下に記載した環境変数に加えて、[公式のDocker Nginxイメージ](https://hub.docker.com/_/nginx)でサポートされているすべての環境変数が利用できます。

#### `ACCEPT_EULA` <a href="#id-.glyptodon-guacamolesslnginxv2.x-accept_eulaaccept_eula" id="id-.glyptodon-guacamolesslnginxv2.x-accept_eulaaccept_eula"></a>

環境変数`ACCEPT_EULA`は「Y」に設定して、[KeeperコネクションマネージャーのEULA](https://www.keepersecurity.com/en_GB/termsofuse.html?t=v)に同意したことを示す必要があります。このDockerイメージは、EULAの条件に従わないと使用できません。

#### `SSL_HOSTNAME` <a href="#id-.glyptodon-guacamolesslnginxv2.x-ssl_hostnamessl_hostname" id="id-.glyptodon-guacamolesslnginxv2.x-ssl_hostnamessl_hostname"></a>

Dockerをホストするサーバーの公開ホスト名。この環境変数は必須であり、インターネット経由でGuacamoleにアクセスする際に使用される完全な公開ドメイン名を指定する必要があります。このドメイン名は、Dockerおよびこのイメージをホスティングしているサーバーに到達するIPアドレスに既に関連付けられている必要があります。

#### `GUACAMOLE_HOSTNAME` <a href="#id-.glyptodon-guacamolesslnginxv2.x-guacamole_hostnameguacamole_hostname" id="id-.glyptodon-guacamolesslnginxv2.x-guacamole_hostnameguacamole_hostname"></a>

Guacamoleサーバーの内部ホスト名またはIPアドレスを指定します。この環境変数は必須であり、接続を処理する際にNGINXが内部的に接続するホスト名またはアドレスを設定する必要があります。

なお、ここで指定するGuacamoleサービスのホスト名やアドレスは内部ネットワークからのみ到達可能でなければなりません。外部に公開されるのは、SSLター未ネーションサービス (このイメージ) のみです。

#### `GUACAMOLE_PORT` <a href="#id-.glyptodon-guacamolesslnginxv2.x-guacamole_port" id="id-.glyptodon-guacamolesslnginxv2.x-guacamole_port"></a>

Guacamoleサーバーの待ち受けTCPポート番号。この環境変数はオプションで、省略した場合は標準ポート8080がデフォルトで使用されます。

#### `GUACAMOLE_CONTEXT_PATH` <a href="#id-.glyptodon-guacamolesslnginxv2.x-guacamole_context_path" id="id-.glyptodon-guacamolesslnginxv2.x-guacamole_context_path"></a>

Guacamoleサービスが提供されているパス。この環境変数はオプションです。デフォルトでは空白になり、Guacamoleサービスがルートパスから提供されていることを示します。`keeper/guacamole`イメージの`GUACAMOLE_CONTEXT_PATH`環境変数と同様に、このパラメータにスラッシュは使用できません。

たとえば、Guacamoleが`http://some-host/guacamole/`で内部的に実行されている場合は、`GUACAMOLE_CONTEXT_PATH`を `guacamole`に設定してください。

#### `SELF_SIGNED` <a href="#id-.glyptodon-guacamolesslnginxv2.x-self_signedself_signed" id="id-.glyptodon-guacamolesslnginxv2.x-self_signedself_signed"></a>

「Y」に設定すると、`SSL_HOSTNAME`に対する自己署名証明書の自動生成が要求され、既存の証明書の使用やLet's Encryptからの新しい証明書の取得は要求されません。

**自己署名証明書は基本的に安全ではありません。**&#x3053;のオプションはテストにのみご使用ください。

#### `CERTIFICATE_FILE`および`PRIVATE_KEY_FILE` <a href="#id-.glyptodon-guacamolesslnginxv2.x-certificate_file-and-private_key_filecertificate_fileandprivate" id="id-.glyptodon-guacamolesslnginxv2.x-certificate_file-and-private_key_filecertificate_fileandprivate"></a>

SSL証明書と関連する秘密鍵のそれぞれのPEMファイルのパス。これらは、Dockerコンテナのファイルシステムに対するパスです。外部から取得したSSL証明書のPEMファイルは、Dockerボリュームマウントを使用してコンテナ内で開示する必要があります。

これらの環境変数は、独自の証明書を設定する場合のみ必要となります。`SELF_SIGNED`を使用して自己署名証明書でテストする場合、これらは無視されます。

#### `LETSENCRYPT_ACCEPT_TOS` <a href="#id-.glyptodon-guacamolesslnginxv2.x-letsencrypt_accept_tosletsencrypt_accept_tos" id="id-.glyptodon-guacamolesslnginxv2.x-letsencrypt_accept_tosletsencrypt_accept_tos"></a>

Let's Encryptを使用する場合は、[Let's Encryptの利用規約](https://letsencrypt.org/repository/)に同意したことを示すために、`LETSENCRYPT_ACCEPT_TOS`環境変数を「Y」に設定します。Let's Encryptは、該当する利用規約に同意しないと利用できません。

この環境変数は、Let's Encryptを使用する場合のみ必要となります。`CERTIFICATE_FILE`および`PRIVATE_KEY_FILE`を使用して独自の証明書を設定する場合や`SELF_SIGNED`で自己署名証明書を使用してテストする場合は無視されます。

#### `LETSENCRYPT_EMAIL` <a href="#id-.glyptodon-guacamolesslnginxv2.x-letsencrypt_emailletsencrypt_email" id="id-.glyptodon-guacamolesslnginxv2.x-letsencrypt_emailletsencrypt_email"></a>

証明書を要求するときにLet's Encryptに登録するメールアドレス。この環境変数はオプションで、`CERTIFICATE_FILE`および`PRIVATE_KEY_FILE`を使用して独自の証明書を設定する場合や`SELF_SIGNED`で自己署名証明書を使用してテストする場合は無視されます。

この環境変数はオプションですが、Let's Encryptのサービスを使用して証明書を取得する場合は、メールアドレスの登録が強く推奨されています。certbotツールのヘルプには以下のように記載されています。

> 鍵の紛失やアカウントの侵害が発生した場合、アカウントへのアクセスを永久に失うことになるため、決してお勧めできません。また、証明書の失効または取り消しが近いことを知らせる通知も受信できなくなります。それでも利用規約の更新が適用され、ウェブサイトに更新が投稿されてから14日後にその効力が発生します。

#### `LETSENCRYPT_STAGING` <a href="#id-.glyptodon-guacamolesslnginxv2.x-letsencrypt_stagingletsencrypt_staging" id="id-.glyptodon-guacamolesslnginxv2.x-letsencrypt_stagingletsencrypt_staging"></a>

「Y」に設定した場合、本番環境ではなく[Let's Encryptのステージング環境](https://letsencrypt.org/docs/staging-environment/)を使用してSSL証明書を取得するように要求します。Let's Encryptの機能をテストするだけの場合は、このオプションをご使用ください。

### コンテンツセキュリティポリシー (CSP) <a href="#id-.glyptodon-guacamolesslnginxv2.x-dockersecrets" id="id-.glyptodon-guacamolesslnginxv2.x-dockersecrets"></a>

コンテンツセキュリティポリシー (CSP) は、ブラウザ機能の一つで、KCMのようなウェブアプリケーションが、そのウェブアプリケーションの文脈内で許可される操作の種類をブラウザに宣言できる仕組みです。特にCSPを使用することで、ウェブアプリケーションが安全でない、または予期しないとみなすリソースの読み込みやスクリプトの実行をブラウザにブロックするよう要求できます。具体的にはHTTPレスポンスに`Content-Security-Policy`ヘッダを追加することで実現されます。

デフォルトの`Content-Security-Policy`ヘッダは、既知の初期値で設定されており、特別な設定がない限り、`keeper/guacamole-ssl-nginx`イメージによって自動的に適用されます。この設定は、`CONTENT_SECURITY_POLICY`環境変数を使用して変更できます。

{% hint style="danger" %}
通常、この環境変数を設定する必要はありませんが、カスタムのKCM/Guacamole拡張機能がより緩やかなポリシーを必要とする場合に限り設定が必要となります。

**デフォルトのポリシーを上書きする必要がある場合はご注意ください。**&#x904E;度に厳しいCSPを設定すると、KCMがグラフィカルデータのデコードや独自のREST APIへのリクエストといった重要なタスクを実行できなくなる可能性があります。
{% endhint %}

#### `CONTENT_SECURITY_POLICY`

Nginxから送信されるレスポンスに含まれる`Content-Security-Policy`ヘッダの値を設定します。

* **「Y」に設定した場合**: ほとんどのKCMインストール環境で動作することが確認されている適切なデフォルト値が設定されます。\
  デフォルト値: `script-src 'self' 'unsafe-eval'; default-src 'self' data:; style-src 'self' 'unsafe-inline';`\
  この構成により、KCMと同じドメインからのアセットの読み込み、翻訳用の`eval()`の使用、JavaScriptによる動的なCSSの読み込みが許可されます。
* **「N」に設定した場合**: ヘッダはレスポンスに追加されません。
* **他の値に設定された場合**: 環境変数に設定された値がそのままレスポンスのヘッダとして送信されます。

### HTTP Strict Transport Security (HSTS)

HTTP Strict Transport Security (HSTS) は、ドメイン所有者がブラウザに対して接続をHTTPSのみに限定するよう通知するためのブラウザ機能です。HSTSを有効にすると、HTTP接続は送信される前に自動的にHTTPSにアップグレードされます。

{% hint style="info" %}
HSTSはすべてのKCMのデプロイメントに適しているというわけではありません。特に、KCMが他のすべてが HTTPSをサポートしていないウェブアプリケーションとドメインを共有する場合には適していません。そのため、KCMのインストールではデフォルトでHSTSが有効になっていません。

**HSTSを有効にするには、`STRICT_TRANSPORT_SECURITY`環境変数に値を設定する必要があります。**&#x4FBF;利な推奨デフォルト値が用意されています。
{% endhint %}

#### `STRICT_TRANSPORT_SECURITY`

Nginxが送信するレスポンスに含まれる`Strict-Transport-Security`ヘッダの値を設定します。

* **「Y」に設定した場合**: 推奨されるデフォルト値 `max-age=31536000; includeSubDomains; preload;` が常に設定されます。この値は <https://https.cio.gov/hsts/>に基づいて推奨されています。
* **「N」に設定された場合**: ヘッダはレスポンスに追加されません。
* **その他の値が設定された場合**: 設定された値がそのままレスポンスに含まれるヘッダとして送信されます。

### Dockerシークレット <a href="#id-.glyptodon-guacamolesslnginxv2.x-dockersecrets" id="id-.glyptodon-guacamolesslnginxv2.x-dockersecrets"></a>

環境変数でデータを直接渡すのではなく、このイメージでサポートされている任意の環境変数に`_FILE`サフィックスを付加して、コンテナ内の指定されたファイルからその変数を強制的に読み込ませることができます。Dockerシークレットは機密データをコンテナ内の`/run/secrets/`配下のファイルに格納するため、これを使用して機密データをDockerシークレットから読み込めます。

たとえば、DockerシークレットからLet's Encryptアカウントのメールを読み込むには、以下のようにします。

```
docker run --name some-guacamole-ssl \
    -e ACCEPT_EULA=Y \
    -e LETSENCRYPT_ACCEPT_TOS=Y \
    -e LETSENCRYPT_EMAIL_FILE=/run/secrets/letsencrypt-email \
    -d keeper/guacamole-ssl-nginx
```

### 高度な設定

{% hint style="danger" %}
このセクションの環境変数は、非標準のポートから KCM を提供する場合や、古い暗号スイートや SSL バージョンを有効にする必要がある特殊なケースでのみ必要です。**これらの変数を設定する場合は、その必要性を十分に理解したうえで行ってください。**
{% endhint %}

#### `SSL_CIPHERS`

Nginx インスタンスで許可される SSL 暗号スイートを設定します。このパラメータの許可される値については、[Nginx のドキュメント](https://nginx.org/)を参照してください。値が指定されない場合、デフォルトで `"HIGH:!aNULL:!MD5"` が使用されます。

#### `SSL_PROTOCOLS`

Nginx インスタンスで許可される SSL プロトコルを設定します。このパラメータの許可される値については、[Nginx のドキュメント](https://nginx.org/)を参照してください。値が指定されない場合、TLS 1.2 および 1.3 が有効になります。

#### `SSL_EXTERNAL_PORT`

Nginx が KCM Web アプリケーションにリクエストを送信する際に使用する `X-Forwarded-Port` ヘッダーの値を設定します。このヘッダーは、非標準ポートで SSL リクエストを受信していることを KCM サーバーに通知します。

{% hint style="info" %}
非標準ポートを使用する場合、そのポートは標準ポートにマッピングする必要があります（例: `-p 8443:443`）。この変数を設定しても、イメージ内で Nginx が内部的に使用するポートには影響しません。
{% endhint %}

値が指定されない場合、KCM は受信リクエストが標準 HTTPS ポート (443) から来ていると想定します。

#### `ADDITIONAL_CONFIG`

この変数は、イメージによって生成されたNginx設定ファイル内で KCMウェブアプリケーションを指す`server`ブロックに任意の構成を追加するためのものです。

この変数は、`keeper/guacamole-ssl-nginx`イメージで対応する環境変数が用意されていないNginx設定オプションを適用するための汎用的な手段として機能します。

`ADDITIONAL_CONFIG`環境変数で指定された値は、KCMウェブアプリケーションを指すメイン`server`ブロックに含まれます。ただし、Nginxが`server`ブロック内で受け入れる設定オプションのみを記述します。


---

# 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/jp/keeper-connection-manager/installation/docker-compose-install/ssl-termination/keeper-guacamole-ssl-nginx.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.
