AWS Lightsail で運用してた個人用ブログの終活作業履歴① の続きです
前回実施したのは以下の4手順です
1. 切替先となる Route 53 のホストゾーン作成
2. 既存の DNS レコード設定情報を参考に Route 53 のレコード設定
3. ネームサーバーを お名前.com → Route 53 に切り替え
4. ACM 証明書を発行
今回は続きとしてACM関連の残作業を実施します
5. 既存のサーバーレスアプリケーションに設定中のACM証明書の切替
6. 不要となった方のACM証明書を削除
以下は残課題
7. Lightsail内で稼働中のWordPressサイト、その他をバックアップ
8. WordPressサイトについてローカルでの動作環境を構築
9. Lightsailインスタンスを削除
10. Route 53 レコード設定から Lightsail インスタンスのIPv6に向けた設定を削除
5. 既存のサーバーレスアプリケーションに設定中のACM証明書の切替、不要となった方のACM証明書を削除
既存の CloudFront ディストリビューションに設定中のカスタムSSL証明書について、certbotで発行し手動インポートしたものから、ACMのサービス上で発行した証明書に付け替えます。
最初に CloudFront ディストリビューションの一覧情報の中からディストリビューションごとの一意なIDを取得
$ aws cloudfront list-distributions | jq '.DistributionList.Items[].Id'
"E************1"
- 私の AWS アカウントには CloudFront ディストリビューションは1つのみ存在するため、↑のコマンドで更新対象のIDを取得できました
次に CloudFront ディストリビューションの ID を元に ETag という一意なタグを取得
$ aws cloudfront get-distribution-config --id E************1 | jq '.ETag'
"E***********3"
- この値は後述する
update-distribution
コマンドで ID とは別に必要となる
再度 get-distribution-config
コマンドを実行し、今度は Etag とは異なるキーで管理されている DistributonConfig 情報を取得
$ aws cloudfront get-distribution-config \
--id E************1 \
| jq '.DistributionConfig' > config.json
- DistributionConfig の情報は更新コマンドの中で入力として必要となるため
config.json
という名前でカレントに保管します
CloudShell 上で config.json
を編集
{
~~~ 省略 ~~~
"ViewerCertificate": {
"CloudFrontDefaultCertificate": false,
"ACMCertificateArn": "arn:aws:acm:us-east-1:************:certificate/********-****-****-****-************",
"SSLSupportMethod": "sni-only",
"MinimumProtocolVersion": "TLSv1.2_2021",
"Certificate": "arn:aws:acm:us-east-1:************:certificate/********-****-****-****-************",
"CertificateSource": "acm"
}
~~~ 省略 ~~~
}
-
ViewerCertificate.ACMCertificateArn
とViewerCertificate.Certificate
に記載されている ARN についてACMサービス上で新規作成したARNに差し替えて保存 - エディタは nano と vi が使えたので好きな方を使っていいと思います(vi を使用)
編集した config.json
を元に CloudFront ディストリビューションを更新
$ aws cloudfront update-distribution \
--id E************1 \
--if-match E***********3 \
--distribution-config file://config.json
-
--id
で渡している値が CloudFront ディストリビューションのID -
--if-match
で渡してる値が ETag
ACM の証明書一覧で「使用中ですか?」の列の表示が切り替わったことを確認できました
- 更新の適格性もACMのサービス上で発行した証明書のため「対象(自動更新が可能な状態)」となりました
- CloudFront ディストリビューションの方でも切り替わってることを確認
- アプリケーション自体にもブラウザアクセスして問題なく閲覧できることを確認
ブラウザでアクセスしたときのSSL証明書の様子
- 認証局がLetsEncrypt ⇒ Amazon になりました
6. 不要となった方のACM証明書を削除
acm list-certificates
コマンドを使用して削除対象のACM証明書のARNを確認します
$ aws acm list-certificates \
--includes keyTypes=RSA_2048,EC_prime256v1 \
| jq '.CertificateSummaryList[] | select(.Type == "IMPORTED")'
{
"CertificateArn": "arn:aws:acm:us-east-1:************:certificate/********-****-****-****-************",
"DomainName": "imo-tikuwa.com",
"SubjectAlternativeNameSummaries": [
"imo-tikuwa.com",
"*.imo-tikuwa.com"
],
"HasAdditionalSubjectAlternativeNames": false,
"Status": "ISSUED",
"Type": "IMPORTED",
"KeyAlgorithm": "EC-prime256v1",
"KeyUsages": [
"DIGITAL_SIGNATURE"
],
"ExtendedKeyUsages": [
"TLS_WEB_SERVER_AUTHENTICATION",
"TLS_WEB_CLIENT_AUTHENTICATION"
],
"InUse": false,
"RenewalEligibility": "INELIGIBLE",
"NotBefore": "2025-03-30T12:19:41+00:00",
"NotAfter": "2025-06-28T12:19:40+00:00",
"CreatedAt": "2023-06-01T14:51:27.469000+00:00",
"ImportedAt": "2025-03-31T12:53:16.301000+00:00"
}
- ドキュメントによるとデフォルトで一覧情報として取得可能なACM証明書はキーアルゴリズムが
RSA_1024
とRSA_2048
のいずれかのもののみに限定されてました-
--includes
オプションでkeyTypes=RSA_2048,EC_prime256v1
のように取得したいキーアルゴリズムを明示することで certbot で発行してACMに手動インポートした方の証明書情報を取得できました
-
- CertificateSummaryList リスト内の Type が
IMPORTED
となっているのが手動インポートした証明書です。jq コマンドによるフィルタリングによって削除対象を抽出しました- ちなみにACMサービス上でリクエスト→検証を済ませた証明書は
AMAZON_ISSUED
になってました
- ちなみにACMサービス上でリクエスト→検証を済ませた証明書は
↑ で取得した情報に含まれる CertificateArn の値を元にACM証明書の削除を実施
$ aws acm delete-certificate \
--certificate-arn "arn:aws:acm:us-east-1:************:certificate/********-****-****-****-************"
削除後、ACM 証明書の一覧画面に表示される証明書が1つになったことを確認
ACM 証明書に関する作業が一通り完了しました。
参考サイト
今回使用した aws-cli に関するドキュメントは以下