担当しているプロダクトでセキュリティチェックの一環として現在受け付けているリクエストのTLSバージョンや暗号スイートを洗い出す必要がありました。
GCPのロードバランサのカスタムヘッダという機能から確認できたのでご紹介します。
システム構成は以下のような感じです。
External HTTP(S)load balancer → サーバレスNEG → Cloud Run(Goアプリ)
以下Cloudコンソールでの手順になります。
先に公式ドキュメントを読みたい方はこちら
1. ロードバランサ一覧より対象のロードバランサ名をクリックして詳細を開く。
![](https://techblog.gmo-ap.jp/wp-content/uploads/2023/03/TLS_custom_header_0.png)
2. 「ロードバランサの詳細」画面から「編集」を開く。
![](https://techblog.gmo-ap.jp/wp-content/uploads/2023/03/TLS_custom_header_1.png)
3. 「バックエンド サービス」で対象バックエンドの鉛筆アイコンから「バックエンド サービス」の編集を開く。
![](https://techblog.gmo-ap.jp/wp-content/uploads/2023/03/TLS_custom_header_2.png)
4. 下の方にスクロールして「高度な構成」を開く。
![](https://techblog.gmo-ap.jp/wp-content/uploads/2023/03/TLS_custom_header_4.png)
5. カスタムリクエスト ヘッダーの方で「+ヘッダーを追加」ボタンを押す。
![](https://techblog.gmo-ap.jp/wp-content/uploads/2023/03/TLS_custom_header_5.png)
6. TLSバージョンと暗号スイートが取れる変数を設定する。
![](https://techblog.gmo-ap.jp/wp-content/uploads/2023/03/TLS_custom_header_6.png)
7. ログを吐き出すスクリプトをアプリの中に仕込む。
1 2 3 4 5 6 7 8 |
tls_version := r.Header.Get("tls_version") if tls_version != "" { log.Printf("tls_version: %v", tls_version) } tls_cipher_suite := r.Header.Get("tls_cipher_suite") if tls_cipher_suite != "" { log.Printf("tls_cipher_suite: %v", tls_cipher_suite) } |
8. Cloud Runのログから確認。
![](https://techblog.gmo-ap.jp/wp-content/uploads/2023/03/TLS_custom_header_7.png)
簡単ではありますが以上となります。
最後まで読んでいただきありがとうございました。