すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:NGINX Ingressコントローラの暗号化

最終更新日:Jan 24, 2025

NGINX Ingressコントローラーは、外部リクエストを処理し、Kubernetesクラスター内のサービスにトラフィックをルーティングするために使用される重要なコンポーネントです。 データ転送のセキュリティを強化する必要がある場合は、NGINX Ingressコントローラーの暗号化を設定することを推奨します。 このトピックでは、NGINX Ingressコントローラーのセキュリティ設定と検証の方法について説明します。

E ncryption設定

NGINX Ingressコントローラーでは、ConfigMapのssl-protocolフィールドとssl-ciphersフィールドを設定することでセキュリティを強化できます。

名前

説明

実装フィールド

カスタムTLSプロトコルバージョン

許可されるSSLプロトコルを指定します。 デフォルトでは、TLSv1.2とTLSv1.3が使用されます。

ssl-protocols: "TLSv1.2 TLSv1.3" 詳細については、「ssl-protocol」をご参照ください。

カスタム暗号スイート

有効にする暗号のリストを設定します。 暗号は、OpenSSLライブラリで認識できる形式である必要があります。 NGINX Ingressコントローラーには、複数のTLSクライアントをサポートするデフォルトの暗号スイート構成があります。 より安全な暗号スイートを指定するには、ConfigMapssl-ciphersを指定してデフォルト値を上書きします。 現在の暗号スイートの構成を表示する方法の詳細については、「構成済みの暗号スイートの表示」をご参照ください。

ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" (デフォルトの暗号リスト) 。 詳細については、「ssl-ciphers」をご参照ください。

説明

暗号スイートの順序は、どのアルゴリズムが好ましいかを決定するので重要である。 特別な要件がない場合は、デフォルトの設定を維持することを推奨します。

前提条件

手順

コンソールまたはkubectlを使用して暗号化を設定できます。

コンソールの使用

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[設定] > [設定] を選択します。

  3. ConfigMapページの上部で、名前空間ドロップダウンリストからkube-systemを選択します。 次に、[名前] 検索ボックスにnginx-configurationと入力し、検索アイコンをクリックします。 nginx-configurationを見つけ、[操作] 列の [編集] をクリックします。

  4. 編集ページで、[+ 追加] をクリックし、プロンプトに従って名前を入力し、[OK] をクリックします。

kubectlを使用する

次のコマンドを実行して、ConfigMapを更新します。

kubectl edit cm -n kube-system nginx-configuration
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: kube-system
data:
  ssl-protocols: "TLSv1.2 TLSv1.3"  # Only allow TLSv1.2 and TLSv1.3.
  ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"  # Default cipher suite list.

TLSバージョンと暗号スイートのセキュリティを確認する

  • 方法1: testssl.shからtestssl.shツールをダウンロードし、次のコマンドを実行します。

    ./testssl.sh <your site domain name>

    期待される出力:

    堅牢でない暗号スイートまたは安全でない (より低い) TLSプロトコルバージョンが検出された場合、警告として赤で強調表示されます。

     Testing protocols via sockets except NPN+ALPN
     SSLv2      not offered (OK)
     SSLv3      not offered (OK)
     TLS 1      not offered
     TLS 1.1    not offered
     TLS 1.2    offered (OK)
     TLS 1.3    offered (OK): final
     NPN/SPDY   not offered
     ALPN/HTTP2 h2, http/1.1 (offered)
     Testing cipher categories
     NULL ciphers (no encryption)                  not offered (OK)
     Anonymous NULL Ciphers (no authentication)    not offered (OK)
     Export ciphers (w/o ADH+NULL)                 not offered (OK)
     LOW: 64 Bit + DES, RC[2,4] (w/o export)       not offered (OK)
     Triple DES Ciphers / IDEA                     not offered
     Obsolete CBC ciphers (AES, ARIA etc.)         not offered
     Strong encryption (AEAD ciphers)              offered (OK)
     Testing robust (perfect) forward secrecy, (P)FS -- omitting Null Authentication/Encryption, 3DES, RC4
     PFS is offered (OK)          TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-CHACHA20-POLY1305
                                  TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256
     Elliptic curves offered:     prime256v1 secp384r1 secp521r1 X25519 X448
     Finite field group:          ffdhe2048 ffdhe3072 ffdhe4096 ffdhe6144 ffdhe8192
     Testing server preferences
     Has server cipher order?     yes (OK) -- TLS 1.3 and below
     Negotiated protocol          TLSv1.3
     Negotiated cipher            TLS_AES_256_GCM_SHA384, 253 bit ECDH (X25519)
     Cipher order
        TLSv1.2:   ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-CHACHA20-POLY1305
        TLSv1.3:   TLS_AES_256-GCM-SHA384 TLS_CHACHA20-POLY1305-SHA256 TLS_AES_128-GCM-SHA256
    ...
  • 方法2: 確認のためにオンラインWebサイトにサイトドメイン名を入力します。

設定済み暗号スイートの表示

次のコマンドを実行して、設定された暗号スイートを表示します。

kubectl -n kube-system exec deploy/nginx-ingress-controller -- nginx -T  |grep ssl_ciphers

期待される出力:

Defaulted container "nginx-ingress-controller" out of: nginx-ingress-controller, init-sysctl (init)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
nginx: configuration file /etc/nginx/nginx.conf test is successful

よくある質問

ShangMi (SM) アルゴリズムはサポートしていますか?

ACK NGINX Ingressコントローラーは、コミュニティが提供するNGINX Ingressコントローラーを使用します。

SMアルゴリズム

NGINX Ingressコントローラーでどの暗号スイートアルゴリズムがサポートされていますか?

Nginxは、暗号化と復号化にOpenSSLを使用します。 nginx -Vコマンドを実行してNginxおよび対応するOpenSSLバージョンを表示し、openssl ciphersコマンドを実行してサポートされている暗号スイートを表示できます。 kubectl exec -itn kube-system <nginx-ingress-pod-name> bashコマンドを実行し、コンテナーを入力します。

  • NGINX Ingressコントローラコンテナに入り、nginx -Vコマンドを実行します。

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ nginx -V

    期待される出力:

    nginx version: nginx/1.21.6
    built by gcc 12.2.1 20220924 (Alpine 12.2.1_git20220924-r10)
    built with OpenSSL 3.1.3 19 Sep 2023 (running with OpenSSL 3.1.5 30 Jan 2024)
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --modules-path=/etc/nginx/modules --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_geoip_module --with-http_gzip_static_module --with-http_sub_module --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_ssl_preread_module --with-threads --with-http_secure_link_module --with-http_gunzip_module --with-file-aio --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --without-http_uwsgi_module --without-http_scgi_module --with-cc-opt='-g -O3 -flto -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wno-deprecated-declarations -fno-strict-aliasing -D_FORTIFY_SOURCE=2 --param=ssp-buffer-size=4 -DTCP_FASTOPEN=23 -fPIC -I/root/.hunter/_Base/d45d77d/aab92d8/3b7ee27/Install/include -Wno-cast-function-type -m64 -mtune=generic' --with-ld-opt='-flto -fPIE -fPIC -pie -Wl,-z,relro -Wl,-z,now -L/root/.hunter/_Base/d45d77d/aab92d8/3b7ee27/Install/lib' --user=www-data --group=www-data --add-module=/tmp/build/ngx_devel_kit-0.3.2 --add-module=/tmp/build/set-misc-nginx-module-0.33 --add-module=/tmp/build/headers-more-nginx-module-0.34 --add-module=/tmp/build/ngx_http_substitutions_filter_module-b8a71eacc7f986ba091282ab8b1bbbc6ae1807e0 --add-module=/tmp/build/lua-nginx-module-0.10.25 --add-module=/tmp/build/stream-lua-nginx-module-0.0.13 --add-module=/tmp/build/lua-upstream-nginx-module-8aa93ead98ba2060d4efd594ae33a35d153589bf --add-dynamic-module=/tmp/build/nginx-http-auth-digest-1.0.0 --add-dynamic-module=/tmp/build/nginx-opentracing-0.19.0/opentracing --add-dynamic-module=/tmp/build/ModSecurity-nginx-1.0.3 --add-dynamic-module=/tmp/build/ngx_http_geoip2_module-a26c6beed77e81553686852dceb6c7fdacc5970d --add-dynamic-module=/tmp/build/ngx_brotli
  • NGINX Ingressコントローラコンテナに入り、openssl ciphersコマンドを実行します。

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ openssl ciphers

    期待される出力:

    TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:RSA-PSK-AES256-GCM-SHA384:DHE-PSK-AES256-GCM-SHA384:RSA-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20-POLY1305:AES256-GCM-SHA384:PSK-AES256-GCM-SHA384:PSK-CHACHA20-POLY1305:RSA-PSK-AES128-GCM-SHA256:DHE-PSK-AES128-GCM-SHA256:AES128-GCM-SHA256:PSK-AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:ECDHE-PSK-AES256-CBC-SHA384:ECDHE-PSK-AES256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:RSA-PSK-AES256-CBC-SHA384:DHE-PSK-AES256-CBC-SHA384:RSA-PSK-AES256-CBC-SHA:DHE-PSK-AES256-CBC-SHA:AES256-SHA:PSK-AES256-CBC-SHA384:PSK-AES256-CBC-SHA:ECDHE-PSK-AES128-CBC-SHA256:ECDHE-PSK-AES128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:SRP-AES-128-CBC-SHA:RSA-PSK-AES128-CBC-SHA256:DHE-PSK-AES128-CBC-SHA256:RSA-PSK-AES128-CBC-SHA:DHE-PSK-AES128-CBC-SHA:AES128-SHA:PSK-AES128-CBC-SHA256:PSK-AES128-CBC-SHA
  • NGINX Ingressコントローラーコンテナーに入り、openssl ciphers -tls1_2 -vコマンドを実行します。 次の出力は、TLS 1.2を持つ暗号スイートのみがサポートされていることを示しています。

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ openssl ciphers -tls1_2 -v

    期待される出力:

    TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
    TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
    TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD
    ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
    ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(256)            Mac=AEAD
    DHE-RSA-AES256-GCM-SHA384      TLSv1.2 Kx=DH       Au=RSA   Enc=AESGCM(256)            Mac=AEAD
    ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
    ECDHE-RSA-CHACHA20-POLY1305    TLSv1.2 Kx=ECDH     Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
    ...

IANA/RFC標準名を使用して対応するOpenSSL名を取得する方法?

暗号スイートの命名は2つのルールに従います。OpenSSLの命名は簡潔ですが、IANA/RFCの命名はより詳細です。 例えば、OpenSSLにおけるAES128 − SHAは、IANA/RFCにおけるTLS_RSA_WITH_AES_128_CBC_SHAに対応する。

IANA暗号スイート名を知っていて、そのOpenSSL名を取得する必要がある場合は、次の2つの方法を使用できます。

  • OpenSSLサイトから対応するOpenSSL名を取得します。

  • openssl ciphers -convert <known IANA cipher suite name> コマンドを実行して、対応する変換名を取得します。

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ openssl ciphers -convert TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    OpenSSL cipher name: ECDHE-RSA-AES128-GCM-SHA256