このエントリーは、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プロトコルを変更することが出来そうです。
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との紐付けは、同時に行うことが出来ません。
1 2 3 |
gcloud compute ssl-policies create policy-for-tls12 --min-tls-version="1.2" --profile="MODERN" gcloud compute target-https-proxies list gcloud compute target-https-proxies update $FRONTEND_NAME --ssl-policy="policy-for-tls12" |
結果確認
変更前は有効になっていたTLS1.1とTLS1.0が無効に変わっていることを確認しました。
併せて、TLS1.2のCipherから強度の弱い暗号化方式が消えていることを確認できました。
最後に
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
Full Stack Engineer @ GMO AD Marketing, Inc.
DMP(Data Management Platform)の開発運用担当してます。
(Java x Ruby x Kubernetes x BigQuery x Hazelcast x etc)
マイブームは犬と車と登山とスノボ。