はじめに

セキュリティ製品を導入するためにパケットキャプチャを行う必要が有ったので、CloudFrontディストリビューションのオリジンドメインプロトコルをHTTP/443に設定しようとしました。
しかし、AWSコンソールにて以下のエラーが出て設定の変更を保存できない事象が起きました。(2024/2/9時点)


※現在はエラーが解消されており、AWSコンソールで設定出来ます。

このようなエラーに遭遇した際にAWS CLIによる設定で回避出来るとのことなので、AWS CLIを利用してCloudFrontディストリビューションのオリジンドメインプロトコルをHTTP/443に変更してみます。

AWS CLIによるポート変更

手順

AWS CLIでの設定変更手順は以下となります。
1.CloudFrontディストリビューションの設定をエクスポートします。エクスポートしたら、JSONファイルに保存します。

$ aws cloudfront get-distribution-config --id <ディストリビューション ID> | jq '.DistributionConfig'

2.前の手順で保存したJSONファイルのオリジンドメインプロトコルを変更します。オリジンドメインプロトコルの設定箇所はこちらです。

"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginProtocolPolicy": "https-only",
"OriginSslProtocols": {
"Quantity": 1,
"Items": [
"TLSv1.2"
]
},
"OriginReadTimeout": 30,
"OriginKeepaliveTimeout": 5
},

3.Etag 情報を取得します。

$ aws cloudfront get-distribution-config --id <ディストリビューション ID>| jq '.ETag'

4.設定したJSONファイルをCloudFrontディストリビューションに適用します。

$ aws cloudfront update-distribution --id <ディストリビューション ID> --distribution-config file://<2.で編集した json ファイルのパス> --if-match <3.で取得した ETag 情報>

実際に設定してみた

CloudFrontディストリビューションのオリジンドメインプロトコルをHTTP/443に変更します。
設定を変更するCloudFrontディストリビューションを用意しました。

現在のオリジンプロトコルの設定はデフォルト(HTTPS/443)です。

CloudFrontディストリビューションの情報をエクスポートし、JSONファイルで保存しました(ファイル名はcf.json)。
※情報量が多いため、必要な部分のみ抜粋します。

$ aws cloudfront get-distribution-config --id E2xxxxxxxxxxHN | jq '.DistributionConfig'
{
  "CallerReference": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "Aliases": {
    "Quantity": 0
  },
  "DefaultRootObject": "",
  "Origins": {
    "Quantity": 1,
    "Items": [
      {
        "Id": "ip-xx-x-x-xxx.ap-northeast-1.compute.internal",
        "DomainName": "ip-xx-x-x-xxx.ap-northeast-1.compute.internal",
        "OriginPath": "",
        "CustomHeaders": {
          "Quantity": 0
        },
        "CustomOriginConfig": {
          "HTTPPort": 80,
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "https-only",
          "OriginSslProtocols": {
            "Quantity": 1,
            "Items": [
              "TLSv1.2"
            ]
          },

オリジンドメインプロトコルをHTTP/443に変更します。
具体的には”HTTPPort”を443、”OriginProtocolPolicy”を”http-only”に設定します。
※必要な部分のみ抜粋します。

       "CustomOriginConfig": {
          "HTTPPort": 443,
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "http-only",
          "OriginSslProtocols": {
            "Quantity": 1,
            "Items": [
              "TLSv1.2"
            ]
          },

ETagの情報を取得します。

$ aws cloudfront get-distribution-config --id E2xxxxxxxxxxHN | jq '.ETag'
"ExxxxxxxxxxxxM"

変更したjsonファイルの内容をCloudFrontディストリビューションに適用します。
※実行結果については情報量が多いので、一部抜粋となります。

aws cloudfront update-distribution --id E2xxxxxxxxxxHN --distribution-config file:///Users/xxxx/xxxxxx/cf.json --if-match ExxxxxxxxxxxxM
{
    "ETag": "Exxxxxxxxxxxx6",
    "Distribution": {
        "Id": "E2xxxxxxxxxxHN",
        "ARN": "arn:aws:cloudfront::xxxxxxxxxxxx:distribution/E2xxxxxxxxxxHN",

ちょっとした余談ですが、CloudFrontディストリビューションの内容を変更するとEtagの内容まで変わるようです…

aws cloudfront get-distribution-config --id E2xxxxxxxxxxHN | jq '.ETag'
"Exxxxxxxxxxxx6"

AWSコンソールでCloudFrontディストリビューションのオリジンプロトコルがHTTP/443に変更されていることを確認出来ました。

CloudFrontディストリビューションのオリジンプロトコル変更は以上で完了です。

さいごに

AWS CLIでCloudFrontディストリビューションの設定を実施しましたが、オリジンプロトコル以外の変更にも利用出来ます。
本記事を参考にして色々と試してみてください。

参考資料

AWS CLI Command Reference(CloudFront)
https://docs.aws.amazon.com/cli/latest/reference/cloudfront/