Google Kubernetes EngineでIngressのSSLポリシー設定をTLS1.2以上に制限する

このエントリーは、GMOアドマーケティング Advent Calendar 2018 の 【12/23】 の記事です。
GMOアドマーケティングとしては初のAdvent Calendar参戦です。

 

こんにちは。GMOアドマーケティングのmizkichです。

この記事では、「GKE(Google Kubernetes Engine)上のIngress(Load Balancer)に対して脆弱性のあるSSL/TLSを無効化する方法」について紹介します。

KubernetesにはSSLを実装する方法が複数存在しますが、今回はingress-gceでの設定方法を紹介します。

 

目的

GMOグループでは、2018年7月より脆弱性のあるSSL/TLSプロトコルを順次無効化する方針となりました。

 

私が担当しているGKEのシステムも対象です。

ingress-gceを使った場合は初期状態でTLS1.0やTLS1.1が利用可能になっていたため、これを無効化する必要があります。

TLS1.2の内部で利用される暗号化方式(Cipher)で強度の弱い方式が有効になっているため、これも無効化する必要があります。

KubernetesでのSSL設定方法

ingress-nginxを使う場合には、こちらに設定方法がありました。

aws-alb-ingress-controllerを使う場合には、こちらに設定方法がありました。

ingress-gceだけ設定方法が存在しない様で、ingress-gceで何をしているのかを仕組みから分解していくことにしました。

 

ingress-gceが展開するロードバランシングサービスの全容

GKEでIngressを作成すると、GLB(Google Load Balancing)にLoad Balancerが自動生成されます。

さらにLoad Balancerの中を追っていくと、forwarding ruleの配下に”GCP Default”と言う名前でSSL Policyが定義されているのを見つけました。

SSL Policyを変更することで、SSL/TLSプロトコルを変更することが出来そうです。

when create GKE Ingress, Load Balancer is created automatically.

 

SSL Policiesの設定方法

SSL Policyは、Network SecurityのSSL Policies画面で作成します。

Minimum TLS versionには、”TLS 1.2″を指定します。

Profileには、弱い暗号化方式(Cipher)を無効化するため、”Modern”を指定します。

作成したSSL Policyは、Apply to targetsから直接、GKE Ingressが生成したLoad Balancerへ紐付けることが出来ます。

SSL Policyが正しくFrontend(forwarding rule)に紐付いているかは、Network servicesのLoad Balancing画面で確認できます。

 

スクリプトでの設定方法

コマンドラインからSSL Policyを作成し、Load BalancerのFrontendへ紐付けるには、gcloudコマンドを利用します。

Frontendはgcloudではtarget-https-proxiesと名前を変えます。

GCPコンソールとは異なり、SSL Policyの作成とtarget-https-proxiesとの紐付けは、同時に行うことが出来ません。

 

結果確認

変更前は有効になっていたTLS1.1とTLS1.0が無効に変わっていることを確認しました。

併せて、TLS1.2のCipherから強度の弱い暗号化方式が消えていることを確認できました。

TLS1.1とTLS1.0が無効に変わっている。TLS1.2で強度の弱い暗号化方式が消えている。

最後に

SSL Policyの設定は、KubernetesのYaml定義やkubectlでは設定することが出来ませんでした。

LoadBalancer名が乱数なので、LoadBalancerが複数ある場合にはスクリプトでのSSL Policy紐付けは非常に困難そうです。

GKEのバージョンアップでコッソリ機能追加されそうですが、今時点だとGCPコンソールからの適用が一番確実だと思います。

 

明日は、【T.Sさん】の【聖なる夜に贈るインフラ事件簿】についてのお話です。
お楽しみに。

クリスマスまで続くGMOアドマーケティング Advent Calendar 2018
ぜひ今後も投稿をウォッチしてください!

■エンジニアによるTechblog公開中!
https://techblog.gmo-ap.jp/
■Wantedlyページ ~ブログや求人を公開中!~
https://www.wantedly.com/projects/199431
■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~
https://www.gmo-ap.jp/engineer/
■エンジニア学生インターン募集中! ~有償型インターンで開発現場を体験しよう~
https://hrmos.co/pages/gmo-ap/jobs/0000027