Amazon CloudFront ディストリビューションを使用していますが、ドメインネームシステムセキュリティ拡張 (DNSSEC) を使用するという組織の規制要件に準拠する必要があります。
簡単な説明
デフォルトの CloudFront ドメイン cloudfront.net では、DNSSEC は許可されていません。ドメインの DNSSEC を有効にするには、まず DNSKEY リソースレコードセットを作成する必要があります。ただし、AWS は CloudFront ドメインの DNS レコードを管理しているため、DNSKEY レコードを設定することはできません。つまり、CloudFront ドメインの DNSSEC を直接有効化することはできません。代わりに、代替ドメインを使用して有効にする必要があります。
組織で DNSSEC の使用が必要な場合は、まず CloudFront ドメインからのディストリビューションへのアクセスをブロックします。次に、CloudFront ディストリビューションにアタッチされている代替ドメイン名または Canonical Name Record (CNAME) で DNSSEC を有効にします。
解決策
CloudFront からのアクセスをブロックする
ホストヘッダーに cloudfront.net ドメインを含むリクエストをブロックするには、AWS WAF または関数を使用します。
AWS WAF を使用する
以下のリクエストタイプのいずれかをブロックする AWS WAF ルールを使用します。
- cloudfront.net で終わるホストヘッダー。
- ディストリビューションのドメイン (d123abc.cloudfront.net など) が単一のヘッダー内にあるすべてのリクエスト。
関数を使用する
CloudFront 関数または AWS Lambda@Edge 関数を使用して、ホストヘッダーに cloudfront.net で終わる値が含まれるリクエストをすべてブロックします。コストが低く、パフォーマンスが速いため、CloudFront 関数を使用することをお勧めします。
次の CloudFront 関数の例では、ホストヘッダーに CloudFront ドメイン cloudfront.net を含むリクエストをブロックします。
function handler(event) {
var request = event.request;
// Extract the host header value
var host = request.headers.host.value;
// Check if the host header value ends with "cloudfront.net"
if (host.endsWith('cloudfront.net')) {
// Return a response to block the request
return {
statusCode: 403,
statusDescription: 'Forbidden',
headers: {
'content-type': {
value: 'text/plain'
}
},
body: 'Access to this resource is forbidden.'
};
}
// Allow the request to proceed
return request;
}
代替ドメイン名で DNSSEC を有効にする
CloudFront ドメインからのアクセスをブロックすると、代替ドメイン名 (CNAME) で DNSSEC を有効にできます。これを行うには、「Activating DNSSEC signing and establishing a chain of trust」(DNSSEC 署名を有効にし、信頼チェーンを確立する) の手順に従ってください。
ドメインをテストする
DNSSEC がご利用のドメインで正しく機能することを確認するには、Verisign のウェブサイトにある DNSSEC アナライザーを使用します。