文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

GAEのマネージドセキュリティで無料の自動更新SSL証明書を適用しよう!

今まで手動でLet's encryptを定期実行していた苦労はいったい・・・・

f:id:treeapps:20170917230836p:plain

とうとう来てしまいました。

というか、いつの間にか来ていました。

なんと、

Google App EngineがSSL証明書(Let's encrypt)をサイトに適用し、更に証明書の自動更新までしてくれるマネージドセキュリティという機能をリリースしました

AWS Certificate Managerみたいなやつ(もっと簡単)が、ついにGAEにもやってきたというわけです!

マネージドセキュリティを利用するには

サイトに独自ドメインを設定し、GCPのGAE管理画面からカスタムドメインを設定していればすぐに利用可能です。

何が嬉しいのか

無料でSSL証明書が利用できる点と、その証明書が自動更新される(期限切れで失効する事が無くなる)点です。凄いですね!

今までGAEに対してSSL証明書をcliから設定する事ができなかったため、GAEでSSLを利用しているサイトは手動更新しているサイトが多かったと思います。(GCPと連動すれば自動更新できたかもしれませんが無料ではない)

そしてマネージドサービスなので、基本的に利用側はほとんどメンテナンスフリーになる(筈)と思われます。

つい先月手動でLet's encryptでSSL証明書を更新した私の苦労は一体・・・(15分の苦労ですが)

早速SSL証明書を登録してみる

前提条件として、カスタムドメインを既に登録済みとします。

まず、GCP管理画面を開き、GAEの設定を表示します。

続いて、カスタムドメインタブを選択し、SSL証明書を適用したいドメインにチェックを付けます。チェックが付いたら「マネージドセキュリティを有効にする」ボタンをクリックします。

f:id:treeapps:20170917232605p:plain

切り替えるけどいいか?と聞かれるので「OK」をクリックします。

f:id:treeapps:20170917232845p:plain

何やら適用が終わるまでローディングのぐるぐるが表示されるので、ぐるぐるしなくなるまで待ちます。

f:id:treeapps:20170917233014p:plain

お連れさまでした。設定完了です!

終わっちゃいました。所要時間は何分でしたでしょうか。

この設定をする際は、既に手動で登録したLet's encryptがあったのですが、それは自動で剥がされるようです。

f:id:treeapps:20170917233310p:plain

剥がされた状態で更にマネージドセキュリティを無効にすると、手動適用した証明書も反映されていないので、完全にSSL未対応サイトになってしまうので注意して下さい。

では証明書を確認してみましょう。

f:id:treeapps:20170917233554p:plain

ばっちり今日の日付+3ヶ月後になってますね!やりました!


もしGAEを使ってカスタムドメインを適用しているけど、証明書の適用は面倒臭くてやってねーぜ、というサイトをお持ちの方は、GAEの管理画面から僅か数分で無料自動更新SSL証明書が適用できちゃうので、是非やってしまいましょう!

Search Consoleへの登録もお忘れなく

ご存知かと思いますが、GoogleのSearch Consoleは、httpのサイトとhttpsのサイトは別物として管理されます。

なので、サイトをhttps対応させたら、httpsとしてプロパティを登録しましょう。両方登録されている状態で問題ありません。

雑感

私はGAE大好きなのですが、GAEのニュースってなかなかキャッチアップできなくて、ニュースを見逃すどころか知る事すらできず、超便利な機能追加も知らなかったりするんですよね。

今回のマネージドセキュリティは本当にありがたい機能です。今まで3ヶ月毎にLet's encryptで手動でSSL証明書を生成し、GAE管理画面からチマチマ適用していたのですが、3ヶ月毎ですら煩わしかったのです。Let's encryptから「あと◯日で証明書期限切れるぞ〜」とメールで知らせてくるのもウザかったので、ようやくそれらから解放されたわけです。


ここで、折角なのでマネージドセキュリティ以外で最近キャッチアップできたGAEのニュースも書いておこうと思います。

GAEスタンダード環境のJava1.8対応(ベータ版)

cloudplatform-jp.googleblog.com

まだベータではありますが、GAE/Jユーザには待ちに待ったお知らせですね。

中でも以下は非常に興味深いです。

  • App Engine スタンダード環境は、Spring Boot のような既製のフレームワークや、Kotlin、Apache Groovy のような代替言語をフルにサポートします
  • わずか数秒での迅速なデプロイ
  • ほぼ瞬時のスケールアップとスケールダウン(トラフィックが検出されないときはゼロ インスタンスにスケールダウンされます)
  • ネイティブ マイクロサービスとバージョニングのサポート
  • 任意の 2 言語(Java 7 と Java 8 を含む)間のトラフィック スプリッティング
  • ローカル開発ツール
  • App Engine API

Spring bootが動くのは、嬉しいようなそうでもないような。最新版では解りませんが、Spring bootの起動は非常に遅く、GAEでなくても起動に20〜30秒はかかります。その状態でGAEに乗せると、スピンダウンが発生すると、都度数十秒のFW初期化時間が発生するのでは?と考えてしまいます。

↑をみるとスピンアップが速くなる?と読み取れるのですが、スピンアップよりもFWの初期化時間の方が遥かに時間がかかるので、起動時間がネックになりそうではあります。

そこでSpark frameworkですよ。javaのマイクロフレームワークで、以前私が試してみた時、hello worldを返すだけのwebサーバを起動すると、400ms前後で起動できたので、このSparkフレームワークを使い、更にこれから物凄くシェアを増やすであろうkotlinで記述すれば、GAE/Jが蘇るかもしれません。現状スピンアップ+FW初期化時間を考えると、私的にはGAE/Golang一択なのですが、Golangは死ぬ程書きにくく、GOPATH等の面倒な事があるので、可能な限り使いたくない言語の一つです。それをSpark + kotlinで代用できそうなら、それが私的にはベストです。

Spring boot, sparkフレームワークに対して、それぞれkotlin版と通常版の2種類づつ既にサンプルが用意されているので、以下を読んでおくとよさそうです。

github.com

あと、さり気なくかいてある「代替言語をフルにサポート」という言葉も非常に興味深いですね。これってもしかして、JVM系言語は対応できるようになるという事なのですかね。だとすると、kotlin、groovyだけでなく、scalaも動くのかもしれませんね。色々な言語が動くようになる=活発になる=GAEの進化が速まるので、それは非常に嬉しい事です。

GAEスタンダード環境のPython3.6対応

Google Cloud Platform Japan 公式ブログ: App Engine の Python サポートを強化

最近というか昔からですが、Python熱が世界中で巻き起こっており、3.6に対応したというのは大きいでしょう。

ファイヤーウォールに対応

japan.zdnet.com

f:id:treeapps:20170918001849p:plain
f:id:treeapps:20170918002015p:plain

IPで拒否・許可が設定できるようです。しかしapacheやnginxのように、URLのパス単位で設定できるわけではないようですね。



こんな感じでしっかりランタイムの追加や基本機能追記も行われているのです。

GAEはサーバーレスなので、ハードウェア故障を心配したり、OpenSSLのセキュリティアップデート祭りに悩まされたり、負荷によるサーバダウンを気にしたり、それらを気にする必要がほぼ無いサービスです。皆過去の苦い経験で見向きもしないと思いますが、最近のGAEは様々な弱点を克服しており、非常に有用なものになっています。

スーパーマリオランでGAEが採用されており、任天堂にも信頼されているようです。
cloud-ja.googleblog.com

今年フルリニューアルを済ませたサイト、tree-mapsもGAE/Golangで作ったサイトです。
www.tree-maps.com
tree-mapsは無料枠で全て収まっているので、勿論サーバ維持費は0円で、オートスケールも勝手に行われ、セキュリティスキャンも定期実行され、(一応)無停止デプロイが標準で行われ、非常に簡単で安定して金銭問題も起きない開発が可能になっています。

GAEにはあとは「スタンダード環境にNode.jsランタイム追加」と「マネージドrewrite engine機能」があれば最高なのですけどね。Node.jsだけは切実に欲しいです。これがあればReact・Angular・Vue等のSSRが簡単に行えるようになり、GAEサイトのPWA化の促進やユニバーサルjavascriptなサイトも増えるでしょうから、是非とも対応して欲しいですね!