EC2でもLet’s Encrypt!! Amazon Linux2での失敗をご紹介


こんにちは、TAMの石川です!

Let’s Encryptって便利ですよね。

便利なので、本日使おうとしたところAmazon Linux2では、Let’s Encrypt公式からインストール手順をたどり行きついたアナウンス(そもそもAmazonLinux2用のものは無い)のCentOS用を利用してもうまく入らず、あきらめたところAWS公式に案内があることが発覚しました!

本日は、その顛末を書いていきたいと思います。

なぜ今更、Let’s Encrypt?

「技術的にそんなに面白くないのに、なぜに今さらっ!??」と思われるかもしれません。

先日、AWS中国でCloudFrontの検証を進めていたのですが、CloudFrontでCNAMEを登録する際にその証明書をACMで作ろうとしたら、なんと!中国リージョンでは、IAMへ証明書を登録する方法しか対応していないようでした…。

でもACMで作ったら証明書・Keyを取り出すことはできないので…ということで、Let’s Encryptでサクッと作成することにしました。

中国リージョンでのCloudFront+S3を利用したWebサイト公開については、別の記事でご紹介します。

 

その前に、前提環境

利用環境はAmazonLinux2なのですが、私の場合、以下のインスタンスを起動させて使います。

インスタンスサイズ
ほとんどがa1.medium(1vCPU、2Gメモリ)を使います。スポットで。

アーキテクチャ:
インスタンスサイズでお気づきの方もいると思いますが、armを利用してます。

ディスクサイズ
8GB

リージョン:
オレゴン(全体的にインスタンス等の価格が一番安いため。)
中国国内でインスタンス立てると高そうなのでグローバルの方で立ててしまいました。

DNSは中国AWSのRoute53を利用していて、TXTレコードを登録してグローバル側で認証という構成で中国AWSで利用する証明書を発行しました。
当局から怒られないことを祈っております…

誤ったやり方

Let’s Encrypt公式から、Certbotのインストールへ誘導され、snapdをインストールするように促される。

「なるほど、EPEL入れてyumれば良いわけっすね。かんたんだ。まず、EPELはamazon-linux-extrasから入れて…

使えるようになってることをチェックして・・・

snapdをインストール♪

ん?バージョン?いったん無視して入れてみました。

依存のメッセージが増えてしまいました。

ということで、早々に撤退しました。

当初はarmの影響(以前、unboundのコンパイルができなかったので、それの類似)かと思っていたのですが、ちゃんと調べたらAmazon公式からインストール手順が出ており、確認したところインストールの手順がだいぶ省略されておりました。

なので、次はその方法でサクッとインストールしたいと思います。

正しいやり方

まずは、上記同様EPELをインストールします。

AWS公式はrpmパッケージを拾ってきてインストールを実施していますが、こちらは、amazon-linux-extrasを利用してインストールで問題ありません。

インストール後の確認。

AWS公式とも同じ結果が出てきます。

そして、ここでLet’s Encrypt公式(certbot公式?)にあるsnapdは飛ばして、certbotをインストールします。

・・・( ゚д゚)ポカーン

snapdいらんのかい ノ ̄□ ̄)ノ ~┻━┻ドガシャーン!!

結論、snapdがいらないことが発覚しましたが、ここまでがインストールとなります。

ドメイン認証でワイルドカード証明書を発行

ついでなので次はドメイン認証でワイルドカード証明書を発行してみたいと思います。

証明書の発行

certbotまでのインストールが完了したら、あとは、いつものLet’s Encryptを実行するだけです。

今回、ワイルドカード証明書を作りたかったのと、Route53の権限をもらっていたので、DNS認証で作成しました。

certbotコマンドをsudoで実行すると、EFFにメールアドレスを登録するかどうかを聞かれます。

特に不要なので、今回は「N」としていますが、必要に応じて登録をいただければと思います。

ここまでくると、AWSコンパネ(Route53)で以下のレコードを登録するように促されます。

登録レコード:_acme-challenge.bjnetworks.cn (bjnetworksはクララの中国でのパートナー会社の社名です。)

レコードタイプ:TXT

値:gfgFdGH684MdnBpIPcIwdfHXXXXXXXXXXXXXXXXXXXX

指示通り、Route53に登録します。

dig等で確認し、登録が確認できたら、certbotの続きに移ります。

※certbotを起動したプロンプトとは別のものや、端末を変えて確認をお願いします。

certbotを起動したプロンプトは「Press Enter to Continue」のまま、作業を止めておいてください。

certbotを実行したプロンプトが「Press Enter to Continue」で入力待ちとなっているので、エンターキーを入力し、先に進めてください。

処理が進み、以下の出力があれば、正常に完了しています。

成功した場合、keyと証明書は以下の場所に設置されています。

証明書ファイル:/etc/letsencrypt/live/bjnetworks.cn/fullchain.pem

鍵ファイル  :/etc/letsencrypt/live/bjnetworks.cn/privkey.pem

以上!

 

今回はEC2を使って、Let’s Encrypt証明書の発行を行う方法をメモ代わりに残してみました。

これがコンテナ化してEventBridgeでキックさせて…と自動で回るようになるとまた便利になりますが、それはまた別の機会にご紹介したいと思います!


おすすめ