AWS Cloud FrontでLet’s EncryptでSSL化
AWS Cloud FrontでLet’s Encryptの証明書を使いSSL化します。従量課金により破格で無料でSSL化のWebページの公開を始められます。Cloud Frontはアクセス数に応じて費用が発生し、SSL証明書を無料で手に入れることができれば、無料で始められます。爆速・安全なサイトをCloud Frontで提供する方法をご紹介します。
M1 MacでLet’s Encryptの証明書を取得
Let’s Encryptにて無料で証明書を取得しましょう。
M1 Mac環境での取得方法を紹介します。S3でウェブベージを公開できていることを前提とします。以下の記事でご紹介しています。
certbotをインストールします。
brew install certbot
インストール後は[/opt/homebrew/Cellar/certbot/2.1.0/bin/certbot]にインストールされています。
自身の環境ではbinにリンクが貼られませんでした。リンク貼らずにこのまま使ってみました。
/opt/homebrew/Cellar/certbot/2.1.0/bin/certbot --version
certbot 2.1.0
コマンドは使えるようです。シンボリックリンクを貼らずにこのまま証明書を作ってみます。
learning-english.algo-ai.workの証明書を発行する場合は以下のようなコマンドになります。
/opt/homebrew/Cellar/certbot/2.1.0/bin/certbot certonly --manual -d learning-english.algo-ai.work
打ってみると、「Create a file containing just this data」と表示されるので、認証のためにS3にファイル作って配置し認証します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
And make it available on your web server at this URL:
http://learning-english.com/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
ローカルで「.well-known/acme-challenge」のディレクトリを作り、ファイル内に「xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」をコピーして貼り付けます。S3に.well-knownごとアップロードしてから[Enter]を押すと承認されて証明書が発行されます。
証明書一式は「/etc/letsencrypt/live/learning-english.algo-ai.work/」に配置されます。
証明書一式をCloud Frontに送付する
Cloud Frontに証明書一式をAWSコマンドで送付します。
IAMユーザを作成
まずはIAMユーザに権限を付与するためのポリシーを作成します。JSONタブで以下を作成し、ビジュアルエディタに戻って、次へ進み続けて「ポリシー作成」ボタンを押します。画面にボタンがない場合は、Web画面の文字を小さくしていくとボタンが見えてくると思います。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iam:*ServerCertificate",
"iam:*ServerCertificates"
],
"Resource": "*"
}
]
}
ポリシーを作成したらIAMを開きユーザを作成します。
ユーザを追加します。
作成したポリシーでcertificateの権限を与えユーザを作成します。
作成したユーザを選択して、認証情報タブを選択します。
その中で、アクセスキー欄がありますので、アクセスキーの作成をします。
アクセスキーとシークレットアクセスが取得できますので、控えておきましょう。aws consoleにて後ほど使います。
aws cliで証明書をCloud Frontに送付
awscliコマンドをm1 macにインストールします。
brew install awscli
aws configureと打つと、Access Key IDやSecret Access Keyを求められますので、先ほど控えていたキーを打ち設定完了です。
aws configure
AWS Access Key ID [****************]:
AWS Secret Access Key [****************]:
Default region name [ap-northeast-1]:
Default output format [json]:
awsコマンドでcertificateをアップロードします。ディレクトリ名は自身のドメイン名に変更して実行してください。
aws iam upload-server-certificate --server-certificate-name learning-english.algo-ai.work-ssl \
--certificate-body file:///etc/letsencrypt/live/test.algo-ai.work/cert.pem \
--private-key file:///etc/letsencrypt/live/test.algo-ai.work/privkey.pem \
--certificate-chain file:///etc/letsencrypt/live/test.algo-ai.work/chain.pem \
--path /cloudfront/
Cloud Frontで証明書を設定
作成した証明書をCloud Frontに設定します。
ディストリビューションを作成して、公開したWebサーバの情報があるオリジンドメインを選択します。
独自ドメインを使うため代替ドメイン名(CNAME)を設定します。
SSL証明書を選択します。先ほどアップロードした証明書があれば成功です。
Cloud Frontでウェブサーバを公開できているはずですので、数分待ってからディストリビューションドメイン名をコピーして、ブラウザの別タブのURLでアクセスできれば成功です。
お名前.comで独自ドメインをCloudFrontに紐づける
お名前.comでcnameを設定して、独自ドメインからS3のURLへアクセスできるようにします。
DNSでCNAMEの設定を行います。
CNAMEレコードとは、別名に正式名を紐づけることができる仕組みです。AWSにFQDNでアクセスできている状態ですので、正式名と紐づけて独自ドメインでアクセスできるようにします。
お名前.comにアクセスして、ドメインタブから「ドメインのDNS設定」をクリックします。
DNSレコード設定を利用するの「設定する」ボタンをクリックします。
レコードの追加をします。TYPEの「CNAME」を選択して、ホスト名はサブドメインの任意の名前、VALUEにはAWS CloudFrontのURLを記載します。追加ボタンをクリックして、確認して設定します。
終わりに
AWSのCloud FrontでLet’s Encryptの証明書を使いSSL化する方法を紹介しました。これでセキュリティも強化され、CDN環境を構築で、爆速なウェブサイトが作れますね。
よろしければTwitterフォローしてください。