そのワイルドカード必要ですか?CloudFront の CNAME でワイルドカード指定時の制限を理解する
みなさん、CloudFront は利用されてますか?CloudFront を独自ドメインでアクセスする場合、CNAME の設定が必要となりますよね。通常は実際に使用するドメイン名(例えば、www.example.com)のように指定すると思いますが、よく解らずにワイルドカードを使っていることはないでしょうか?ワイルドカード指定でもアクセスそのものに問題はないので、あまり気にせず使用されているケースは少なくないかもしれません。今回は、CNAME にワイルドカードを指定した場合の制限について、ご紹介したいと思います。
CNAME の例
まず、基本のおさらいとして、ワイルドカードを使わない例です。
アカウント A で CNAME に example.com
を指定していたとします。この場合、別のディストリビューションで同じドメイン名 example.com
を設定することは出来ません。図では別の AWS アカウントになっていますが、もちろんアカウント A 内の他のディストリビューションでも設定することは出来ません。(ちなみに、example.com
のような Zone Apex を CNAME に設定する場合、Route 53 の エイリアスリソースレコードセットをご利用ください。その他の DNS では、対応している・していないをご確認ください。)
アカウント B で重複しない CNAME www.example.com
は設定することが可能です。
CNAME にワイルドカードを指定した例
次に、ワイルドカードを指定した例です。
例えばアカウント A で CNAME にワイルドカードで *.example.com
を指定したディストリビューションが存在していたとします。この場合、他の AWS アカウントでは、example.com
ドメイン内の CNAME を指定することは出来ません。www.sub.example.com
などのサブドメインも含めて指定出来ません。設定しようとした場合は、以下のように CNAMEAlreadyExistsException
のエラーが表示されます。
com.amazonaws.services.cloudfront.model.CNAMEAlreadyExistsException: One or more of the CNAMEs you provided are already associated with a different resource. (Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
公式のガイドでは、以下の記載がこの制限に該当します。
*.example.com などのワイルドカードの代替ドメイン名には、example.com のような別の代替ドメイン名を、両方が同じ CloudFront ディストリビューション、または同じ AWS アカウントを使用して作成されたディストリビューションにあるかぎり含めることができます。
「同じ AWS アカウントを使用して作成されたディストリビューションにあるかぎり」、つまり既にワイルドカードを使用しているディストリビューションが存在する場合、別の AWS アカウントでは同ドメインの CNAME は利用できないということです。この制限を知らないまま、なんとなくワイルドカードを指定していると、例えば同じ社内の別部署で異なる AWS アカウントを取得し、CloudFront を利用しようとしたところ 「あれ?ウチのドメイン指定できない。。」 ということが起こります。
CNAMEAlreadyExistsException 時の対処
ワイルドカードに限らずですが、CNAMEAlreadyExistsException
のエラーになる場合の対処についてご紹介します。まずは、所属組織内の他の AWS アカウントで CloudFront の利用を確認してください。CloudFront の利用が確認できた場合は、所属組織内で CNAME 設定を重複しないように調整すれば解決できますね。(例えば、ワイルドカードを廃止して特定の FQDN に変更してもらう、など)
次に、所属組織内での利用は確認できず、第3者によって使用されている場合。どこの誰かも判らないのでは調整のしようがありません。この場合は、TXT レコードを使ってドメイン所有者である証拠を AWS に示す必要があります。手順は以下の公式 FAQ がありますので、万が一、そのようなケースに遭遇した場合は、参考にしてください。
さいごに
いかがだったでしょうか? CloudFront の CNAME にワイルドカードを指定した場合の制限について、理解したうえで設定されていますでしょうか?単一の AWS アカウントで利用されている場合、あまり気にする必要はないかと思いますが、部門ごと、サービスごとに AWS アカウントを分けられているケースも少なくないと思います。複数の AWS アカウントを利用する場合、不用意なワイルドカード利用は避けたほうが良いでしょう。また、「あれ? CNAME の設定できないぞ、、」という時は、この記事を思い出し、参考にしていただければと思います!
以上!大阪オフィスの丸毛(@marumo1981)でした!