今回はGCE(google compute engine)からGCS(google cloud storage)上のSSL証明書を参照する方法についての備忘録です。
【事の発端は、、】
Google Cloud Platform上でwebサービスを構成する上でインスタンスグループに対してSSLを行いたいとき、基本的にはインスタンスグループにHTTPS ロードバランサを接続し、Google マネージド証明書をHTTPS ロードバランサに適用することで、これを可能にします。
今回は訳あって上記の方法が使用できないケースのお話です。
まずインスタンス単体(1機)の場合、インスタンス内にSSL証明書を配置すれば問題なくSSLが行えます。
しかしインスタンスグループのようにGCEを複数使用しているとき、同じ証明書を参照するためには、、同じものを2つ配置するの??となってしまいます。
そのため今回はSSL証明書を外部のGCSに配置してそれを両インスタンスから参照する作業に取り掛かりました。
【GCEからGCSへのマウント】
こちらにはCloud Storage FUSEを使用しました。
インストール等は公式のドキュメントを見るだけで難なく行えます。
ドキュメントにもありますが、
gcsfuse {GLOBAL_OPTIONS} {BUCKET_NAME} {MOUNT_POINT}
だけでGCSのバケットがGCE内にマウントされます。
【SSL証明書周りのコピー】
こちらはcpコマンドで行います。
今回はletsencryptを採用していますので、
/etc/letsencrypt 以下のディレクトリをそのままマウント先にコピーします。
それだけでGCSへのアップロードが完了します。
前回cloud functionsからGCEへsshコマンドを飛ばす記事を書きました。
こちらはletsencrypt(certbot)の更新用に使用していますので、このコマンドの後に上記のcpコマンドも飛ばしてあげることでSSL証明書の更新とGCSへのアップロードが同時にできます。
【SELinuxの設定を変更する】
nginx.confのSSL証明書の位置をマウント先へ変えていざ起動!!
実はこのままでは起動しません。。
SE Linuxが邪魔しているからです。
lsコマンドに – Z オプションを付けてマウント先のファイルのタイプを見ると、
system_u:object_r:fusefs_t:s0
となっています。
fuseによってマウントしたファイルのタイプは上記のようになるそうです。
それによってSE Linuxにはじかれてしまします。
そのため
sudo setsebool -P httpd_use_fusefs on
/* 結果確認用 */
getsebool httpd_use_fusefs
httpd_use_fusefs --> on /* onならOK */
これでfusefs_tのタイプがSE Linuxによってはじかれなくなります。
【Cloud Storage FUSEによるマウントの永続化】
公式ドキュメントにある方法で起動時に自動的にマウントを行うように設定します。
ネットワーク起動タイミングの後にあるように_netdevを入力します。
/* /etc/fstabに追記 */
# # /etc/fstab
# Created by anaconda on Wed May 18 17:47:57 2022
# # Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f9701201-0ee2-4d41-921e-xxxxxxxxxxxx / xfs defaults 0 0
UUID=xxxx-xxxx /boot/efi vfat defaults,uid=0,gid=0,umask=0077,shortname=winnt 0 0
{バケット名} {マウント先} gcsfuse rw,_netdev,allow_other /* <---ここを追記 */
systemd-analyze plot
のコマンドを叩くとグラフ表示されますのでこれを確認して行うと進めやすいです。