NetScaler Ingress Controller で NetScaler 証明書検証を有効にする
NetScaler Ingress Controller は、HTTPS プロトコルを使用して NetScaler Ingress Controller と NetScaler 間の安全な通信を確保するオプションを提供します。これは、NetScaler に事前にロードされた証明書を使用することで実現できます。考えられる中間者 (MITM) 攻撃を回避するための追加措置として、NetScaler Ingress Controller は NetScaler によって提供される SSL サーバー証明書を検証することもできます。
NetScaler Ingress Controller による ADC サーバー証明書の証明書署名と共通名検証を有効にするには、セキュリティ管理者はオプションで署名済み (または自己署名) 証明書を NetScaler にインストールし、対応する CA 証明書バンドルで NetScaler Ingress Controller を構成できます。検証が有効になり、CA 証明書バンドルが構成されると、NetScaler Ingress Controller は証明書の検証 (証明書名検証を含む) を開始します。検証が失敗した場合、NetScaler Ingress Controller はその旨をログに記録し、構成は安全でないチャネルでは使用されません。
この検証はデフォルトで無効になっており、管理者は次のように NetScaler Ingress Controller で検証を有効にすることを選択できます。
前提条件
-
証明書検証を有効にするには、適切な SSL サーバー証明書 (証明書のサブジェクトに適切なサーバー名または IP アドレスを含む) を持つ NetScaler を構成する必要があります。詳細については、NetScaler ドキュメント を参照してください。
-
インストールされているサーバー証明書とキーのペアの CA 証明書は、これらの証明書の検証を有効にするために NetScaler Ingress Controller を構成するために使用されます。
証明書検証のために NetScaler Ingress Controller を構成する
CA 証明書を構成で利用できるようにするには、NetScaler Ingress Controller がマウントされたストレージボリュームでアクセスできるように、CA 証明書を Kubernetes シークレットとして構成する必要があります。
既存の証明書に対して Kubernetes シークレットを生成するには、次の
kubectl コマンドを使用します。
$ kubectl create secret generic ciccacert --from-file=path/myCA.pem –namespace default
secret “ciccacert” created
または、次の YAML 定義を使用して Kubernetes シークレットを生成することもできます。
apiVersion: v1
kind: Secret
metadata:
name: ciccacert
data:
myCA.pem: <base64 encoded cert>
以下は、証明書検証を有効にするための NetScaler Ingress Controller 構成を含むサンプル YAML ファイルです。
kind: Pod
metadata:
name: cic
labels:
app: cic
spec:
serviceAccountName: cpx
# Make secret available as a volume
volumes:
- name: certs
secret:
secretName: ciccacert
containers:
- name: cic
image: "xxxx"
imagePullPolicy: Always
args: []
# Mounting certs in a volume path
volumeMounts:
- name: certs
mountPath: <Path to mount the certificate>
readOnly: true
env:
# Set NetScaler Console Management IP
- name: "NS_IP"
value: "xx.xx.xx.xx"
# Set port for Nitro
- name: "NS_PORT"
value: "xx"
# Set Protocol for Nitro
- name: "NS_PROTOCOL"
# Enable HTTPS protocol for secure communication
value: "HTTPS"
# Set username for Nitro
- name: "NS_USER"
value: "nsroot"
# Set user password for Nitro
- name: "NS_PASSWORD"
value: "nsroot"
# Certificate validation configurations
- name: "NS_VALIDATE_CERT"
value: "yes"
- name: "NS_CACERT_PATH"
value: " <Mounted volume path>/myCA.pem"
サンプル YAML ファイルで指定されているように、NetScaler Ingress Controller で証明書検証を有効にするために必要な特定の変更は次のとおりです。
Kubernetes シークレットをボリュームとして構成する
-
secretをソースとして宣言されたボリュームセクションを構成します。ここで、secretNameは CA 証明書用に作成された Kubernetes シークレット名と一致する必要があります。
CA証明書のボリュームマウント場所を構成する
-
ボリュームセクションの
secretNameと同じ名前のvolumeMountsセクションを構成します。 -
CA証明書をマウントするための
mountPathディレクトリを宣言します。 -
ボリュームを
ReadOnlyとして設定します。
セキュアな通信を構成する
-
環境変数
NS_PROTOCOLをHTTPSとして設定します。 -
環境変数
NS_PORTをADC HTTPSポートとして設定します。
CA検証と証明書パスを有効にして構成する
-
環境変数
NS_VALIDATE_CERTをyesに設定します(無効にする場合はno)。 -
環境変数
NS_CACERT_PATHをマウントパス(volumeMounts->mountPath)/ PEMファイル名(シークレット作成時に使用)として設定します。