keeper/guacamole-ssl-nginx

SSLターミネーションのためのKeeper Connection Managerを使用したNGINXのDockerによるデプロイ

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

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

このイメージは、Keeper Connection Managerの一部として作成され、同じEULAで利用できるようになっています。通常は、keeper/guacamoleイメージを使用して、コンテナにSSLターミネーションを提供するために使用します。

サポートされているSSL証明書の種類

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

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

  • ACCEPT_EULA - Keeper Connection ManagerのEULAに同意するか否か(このイメージを使用するにはEULAに同意する必要があります)。

  • GUACAMOLE_HOSTNAME - Guacamoleインスタンスのホスト名/アドレス。

  • SSL_HOSTNAME - Guacamoleへのアクセスに使用される公開ドメイン名。

Let's Encrypt

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

Let's Encrypt証明書を使用する場合は、Let's Encrypt固有の環境変数で必須なのは以下の1つだけです。

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

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

  • LETSENCRYPT_EMAIL - 証明書を要求する場合に、Let's Encryptに登録するメールアドレス。

Let's Encryptの使用方法をテストするだけの場合は、本番環境ではなくLet's Encryptのステージング/テスト環境を使用する必要があります。

  • 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から取得した既存の証明書

認証局から取得した証明書がすでにある場合は、環境変数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/"

自己署名証明書

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

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

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

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

環境変数

公式のNGINXイメージがベースのため、以下に記載した環境変数に加えて、公式のDocker Nginxイメージでサポートされているすべての環境変数が利用できます。

ACCEPT_EULA

環境変数ACCEPT_EULAは「Y」に設定して、Keeper Connection ManagerのEULAに同意したことを示す必要があります。このDockerイメージは、EULAの条件に従わないと使用できません。

SSL_HOSTNAME

Dockerをホストするサーバーの公開ホスト名。この環境変数は必須であり、インターネットでGuacamoleにアクセスするために使用される完全な公開ドメイン名である必要があります。この名前は、Dockerとこのイメージを実行しているサーバーに到達するIPアドレスにすでに関連付けられています。

GUACAMOLE_HOSTNAME

Guacamoleサーバーの内部ホスト名またはIPアドレス。この環境変数は必須であり、接続サービスを提供するときにNGINXが内部的に接続するホスト名/アドレスである必要があります。

ここにホスト名/アドレスが設定されているGuacamoleサービスは、_内部ネットワークでのみ_到達可能である必要があります。SSL終端サービス(このイメージ) のみを公開する必要があります。

GUACAMOLE_PORT

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

GUACAMOLE_CONTEXT_PATH

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

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

SELF_SIGNED

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

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

CERTIFICATE_FILEおよびPRIVATE_KEY_FILE

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

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

LETSENCRYPT_ACCEPT_TOS

Let's Encryptを使用する場合は、Let's Encryptの利用規約に同意したことを示すために、LETSENCRYPT_ACCEPT_TOS環境変数を「Y」に設定する必要があります。Let's Encryptは、該当する利用規約に同意しないと利用できません。

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

LETSENCRYPT_EMAIL

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

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

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

LETSENCRYPT_STAGING

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

Dockerシークレット

環境変数でデータを直接渡すのではなく、このイメージでサポートされている任意の環境変数に_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

Last updated