

# トラブルシューティング: ディストリビューション
<a name="troubleshooting-distributions"></a>

証明書エラーやアクセス拒否のほか、ウェブサイトやアプリケーションを使用した Amazon CloudFront ディストリビューションのセットアップ時の一般的な問題の解決方法については、以下の情報を参照してください。

**Topics**
+ [CloudFront が Access Denied エラーを返します](#access-denied)
+ [代替ドメイン名を追加しようとすると、CloudFront から InvalidViewerCertificate エラーが返される](#troubleshooting-distributions-certificates)
+ [新しい CNAME を追加しようとすると、DNS レコードが正しく設定されていないというエラーが CloudFront から返されます。](#troubleshoot-incorrectly-configured-DNS-record-error)
+ [ディストリビューション内のファイルを表示できません](#troubleshooting-web-distribution)
+ [エラーメッセージ: Certificate: <certificate-id> is being used by CloudFront (証明書: <certificate-id> は CloudFront で使用されています)](#troubleshooting-certificate-error)

## CloudFront が Access Denied エラーを返します
<a name="access-denied"></a>

CloudFront ディストリビューションのオリジンとして Amazon S3 バケットを使用している場合は、次の例にアクセス拒否 (403) エラーメッセージが表示されることがあります。

**Contents**
+ [Amazon S3 オリジンから欠落しているオブジェクトを指定しました](#missing-object-in-s3-bucket)
+ [Amazon S3 オリジンに IAM アクセス許可がありません](#access-denied-origin-missing-iam-permissions)
+ [無効な認証情報を使用しているか、十分なアクセス許可がありません](#access-denied-missing-iam-permissions)

### Amazon S3 オリジンから欠落しているオブジェクトを指定しました
<a name="missing-object-in-s3-bucket"></a>

バケットにリクエストされたオブジェクトが存在することを確認します。オブジェクト名では大文字と小文字が区別されます。無効なオブジェクト名を入力すると、アクセス拒否エラーコードが返される可能性があります。

例えば、[CloudFront チュートリアル](GettingStarted.SimpleDistribution.md)に従って基本的なディストリビューションを作成する場合は、オリジンとして Amazon S3 バケットを作成し、サンプル `index.html` ファイルをアップロードします。

ウェブブラウザで、`https://d111111abcdef8.cloudfront.net/index.html` の代わりに `https://d111111abcdef8.cloudfront.net/INDEX.HTML` を入力すると、URL パス内の `index.html` ファイルが大文字と小文字を区別するため、同様のメッセージが表示されることがあります。

```
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>22Q367AHT7Y1ABCD</RequestId>
<HostId>
ABCDE/Vg+7PSNa/d/IfFQ8Fb92TGQ0KH0ZwG5iEKbc6+e06DdMS1ZW+ryB9GFRIVtS66rSSy6So=
</HostId>
</Error>
```

### Amazon S3 オリジンに IAM アクセス許可がありません
<a name="access-denied-origin-missing-iam-permissions"></a>

オリジンドメインおよび名前として正しい Amazon S3 バケットが選択されていることを確認します。オリジン (Amazon S3) には正しいアクセス許可が必要です。

正しいアクセス許可を指定しない場合、ビューワーに対して `AccessDenied` メッセージが表示されることがあります。

Amazon S3 からコンテンツを配信し、AWS Key Management Service (AWS KMS) サービス側の暗号化 (SSE-KMS) も使用している場合は、KMS キーと Amazon S3 バケットに指定する必要がある追加の IAM アクセス許可があります。CloudFront ディストリビューションがオリジン Amazon S3 バケットの暗号化に使用される KMS キーを使用するには、これらのアクセス許可が必要です。

Amazon S3 バケットポリシーの設定により、CloudFront ディストリビューションはコンテンツ配信のために暗号化されたオブジェクトを取得できます。

**Amazon S3 バケットと KMS キーのアクセス許可を確認するには**

1. 使用している KMS キーが、Amazon S3 バケットがデフォルトの暗号化に使用するキーと同じであることを確認します。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[AWS KMS (SSE-KMS) によるサーバー側の暗号化の指定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)」を参照してください。

1. バケット内のオブジェクトが同じ KMS キーで暗号化されていることを確認します。Amazon S3 バケットから任意のオブジェクトを選択し、サーバー側の暗号化設定を確認して KMS キー ARN を検証できます。

1. Amazon S3 バケットポリシーを編集して、Amazon S3 バケットから `GetObject` API オペレーションを呼び出すアクセス許可を CloudFront に付与します。オリジンアクセスコントロールを使用する Amazon S3 バケットポリシーの例については、「[S3 バケットへのアクセス許可を CloudFront に付与する](private-content-restricting-access-to-s3.md#oac-permission-to-access-s3)」を参照してください。

1. KMS キーポリシーを編集して、`Encrypt`、`Decrypt`、および `GenerateDataKey*` に対してアクションを実行するアクセス許可を CloudFront に付与します。最小特権のアクセス許可に合わせて、指定した CloudFront ディストリビューションのみがリストされたアクションを実行できるように `Condition` 要素を指定します。既存の AWS KMS ポリシーに対してポリシーをカスタマイズできます。KMS キーポリシーの例については、「[SSE-KMS](private-content-restricting-access-to-s3.md#oac-permissions-sse-kms)」を参照してください。

OAC の代わりにオリジンアクセスアイデンティティ (OAI) を使用している場合、AWS のサービス ではなくアイデンティティにアクセス許可を付与するため、Amazon S3 バケットへのアクセス許可が若干異なります。詳細については、「[Amazon S3 バケット内のファイルを読み取るアクセス許可をオリジンアクセスアイデンティティに付与する](private-content-restricting-access-to-s3.md#private-content-granting-permissions-to-oai)」を参照してください。

それでもディストリビューション内のファイルを表示できない場合は、「[ディストリビューション内のファイルを表示できません](#troubleshooting-web-distribution)」を参照してください。

### 無効な認証情報を使用しているか、十分なアクセス許可がありません
<a name="access-denied-missing-iam-permissions"></a>

アクセス拒否エラーメッセージは、AWS SCT 認証情報 (アクセスキーとシークレットキー) が正しくないか、有効期限が切れている場合、または IAM ロールまたはユーザーが CloudFront リソースでアクションを実行するために必要なアクセス許可を保有していない場合に表示されることがあります。アクセス拒否エラーメッセージの詳細については、「*IAM ユーザーガイド*」の「[アクセス拒否エラーメッセージのトラブルシューティング](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_access-denied.html)」を参照してください。

IAM と CloudFront が連携する仕組みの詳細については、「[Amazon CloudFront のアイデンティティとアクセス管理](security-iam.md)」を参照してください。

## 代替ドメイン名を追加しようとすると、CloudFront から InvalidViewerCertificate エラーが返される
<a name="troubleshooting-distributions-certificates"></a>

代替ドメイン名 (CNAME) をディストリビューションに追加しようとするときに CloudFront が `InvalidViewerCertificate` エラーを返す場合、この問題のトラブルシューティングについては、以下の情報を参照してください。このエラーは、代替ドメイン名を正常に追加できる前に次のいずれかの問題を解決する必要があることを示している可能性があります。

以下のエラーは、代替ドメイン名を追加することを認可されているかどうかを CloudFront が確認する順序で示されています。これによって、CloudFront が返すエラーに基づいてどの確認が正常に完了したかがわかるため、問題の解決に役立ちます。

**ディストリビューションにアタッチされた証明書はありません。**  
代替ドメイン名 (CNAME) を追加するには、信頼された、有効な証明書をディストリビューションにアタッチする必要があります。前提条件を確認し、これを満たす有効な証明書を取得してディストリビューションにアタッチしてから、操作をやり直してください。詳細については、「[代替ドメイン名を使用するための要件](CNAMEs.md#alternate-domain-names-requirements)」を参照してください。

**アタッチした証明書の証明書チェーンに多すぎる証明書があります。**  
証明書チェーンには最大 5 つの証明書のみを含むことができます。チェーンの証明書の数を減らしてから、操作をやり直してください。

**証明書チェーンには 1 つまたは複数の現在の日付には有効ではない証明書が含まれています。**  
追加した証明書の証明書チェーンに、証明書がまだ有効ではないあるいは有効期限切れの 1 つ以上の証明書が含まれています。証明書チェーンの証明書の **[Not Valid Before]** (有効期限開始日) フィールドおよび **[Not Valid After]** (失効日) フィールドをチェックし、リストした日付に基づいてすべての証明書が有効であることを確認します。

**アタッチした証明書は、信頼される認証機関 (CA) によって署名されていません。**  
代替ドメイン名を確認するために CloudFront にアタッチした証明書を自己署名証明書にすることはできません。信頼される認証機関によって署名される必要があります。詳細については、「[代替ドメイン名を使用するための要件](CNAMEs.md#alternate-domain-names-requirements)」を参照してください。

**アタッチした証明書が、正しくフォーマットされない**  
証明書に含まれているドメイン名と IP アドレス形式、および証明書自体の形式は、証明書の標準に従っている必要があります。

**CloudFront の内部エラーが発生しました。**  
CloudFront が内部の問題によってブロックされ、証明書を検証できませんでした。このシナリオでは、CloudFront は HTTP 500 ステータスコードを返し、証明書のアタッチについて CloudFront 内部の問題があることを示します。数分間待機してから、証明書に代替ドメイン名の追加を再試行します。

**アタッチした証明書が、追加しようとしている代替ドメイン名を対象としていません。**  
追加する代替ドメイン名ごとに、そのドメイン名を使用することを認可されているかどうかを検証するために、CloudFront は、ドメイン名を対象とする信頼された認証機関 (CA) の有効な SSL/TLS 証明書のアタッチを求めます。証明書を更新して、追加しようとしている CNAME を対象とするドメイン名を含めてください。ワイルドカードがあるドメイン名を使用する詳細と例については、「[代替ドメイン名を使用するための要件](CNAMEs.md#alternate-domain-names-requirements)」を参照してください。

## 新しい CNAME を追加しようとすると、DNS レコードが正しく設定されていないというエラーが CloudFront から返されます。
<a name="troubleshoot-incorrectly-configured-DNS-record-error"></a>

CloudFront ディストリビューションをポイントする既存のワイルドカード DNS エントリがある場合、新しい CNAME をより具体的な名前で追加しようとすると、次のエラーが発生することがあります。

```
One or more aliases specified for the distribution includes an incorrectly configured DNS record that points to another CloudFront distribution. You must update the DNS record to correct the problem. 
```

このエラーは、CloudFront が CNAME に対して DNS をクエリし、ワイルドカード DNS エントリが別のディストリビューションに解決されるために発生します。

これを解決するには、まず別のディストリビューションを作成し、次にこの新しいディストリビューションをポイントする DNS エントリを作成します。最後に、より具体的な CNAME を追加します。CNAME を追加する方法の詳細については、「[代替ドメイン名を追加する](CreatingCNAME.md)」を参照してください。

## ディストリビューション内のファイルを表示できません
<a name="troubleshooting-web-distribution"></a>

CloudFront ディストリビューション内のファイルを表示できない場合の一般的な解決方法を以下のトピックで説明します。

### CloudFront と Amazon S3 の両方にサインアップしましたか?
<a name="Troubleshooting.SigningUp"></a>

Amazon S3 オリジンで Amazon CloudFront を使用するには、CloudFront と Amazon S3 の両方に個別にサインアップする必要があります。CloudFront と Amazon S3 のサインアップの詳細について、「[AWS アカウント のセットアップ](setting-up-cloudfront.md)」を参照してください。

### Amazon S3 バケットとオブジェクトのアクセス許可は正しく設定されていますか?
<a name="Troubleshooting.Permissions"></a>

CloudFront を Amazon S3 オリジンで使用する場合、コンテンツのオリジナルバージョンは S3 バケットに保存されます。ビューワーにコンテンツを配信するには、CloudFront オリジンアクセスコントロール (OAC) を使用して Amazon S3 バケットへのアクセスを保護することをお勧めします。これにより、S3 バケットには CloudFront 経由でのみアクセスできます。OAC はビューワーのアクセスを制御し、CloudFront 経由の配信を保護します。OAC の詳細については、「[Amazon S3 オリジンへのアクセスを制限する](private-content-restricting-access-to-s3.md)」を参照してください。

バケットアクセスの管理の詳細については、「*Amazon S3 ユーザーガイド*」の「[Amazon S3 ストレージへのパブリックアクセスのブロック](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)」を参照してください。

オブジェクトのプロパティとバケットのプロパティはそれぞれ独立しています。権限は Amazon S3 のオブジェクトそれぞれに対して明示的に付与する必要があります。オブジェクトのプロパティはバケットから取得できないので、別途設定する必要があります。

### 代替ドメイン名 (CNAME) が正しく設定されていますか?
<a name="Troubleshooting.CNAME"></a>

お使いのドメイン名に対応する CNAME レコードがすでに存在する場合は、そのレコードを更新または変更して、レコードがディストリビューションのドメイン名を指すようにしてください。

CNAME レコードが、Amazon S3 バケットではなく、ディストリビューションのドメイン名を指していることも確認してください。DNS システムの CNAME レコードがディストリビューションのドメイン名を指していることを確認することができます。そのためには、**dig** などの DNS ツールを使用します。

以下は、`images.example.com` というドメイン名に対する dig リクエストと、レスポンスのうち関連する部分のサンプルです。`ANSWER SECTION` の下で、`CNAME` が含まれる行を探します。CNAME の右側にある値が、CloudFront ディストリビューションのドメイン名であれば、ドメイン名の CNAME レコードが正しく設定されています。もしそれが Amazon S3 のオリジンサーバーのバケットや他のドメイン名になっている場合は、その CNAME レコードは正しく設定されていません。

```
 1. [prompt]> dig images.example.com
 2. 
 3. ; <<> DiG 9.3.3rc2 <<> images.example.com
 4. ;; global options:	printcmd
 5. ;; Got answer:
 6. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15917
 7. ;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 2, ADDITIONAL: 0
 8. ;; QUESTION SECTION:
 9. ;images.example.com.		 IN		A
10. ;; ANSWER SECTION:
11. images.example.com. 10800 IN	CNAME	d111111abcdef8.cloudfront.net.
12. ...
13. ...
```

CNAME の詳細については、「[代替ドメイン名 (CNAME) を追加することによって、カスタム URL を使用する](CNAMEs.md)」を参照してください。

### 参照している CloudFront ディストリビューションの URL は正しいですか?
<a name="Troubleshooting.URL"></a>

参照している URL が、Amazon S3 バケットやカスタムオリジンではなく、CloudFront ディストリビューションのドメイン名 (または CNAME) を使用していることを確認してください。

### カスタムオリジンに関するトラブルシューティングでサポートが必要ですか?
<a name="Troubleshooting.CustomOrigin"></a>

カスタムオリジンのトラブルシューティングで AWS のサポートが必要な場合は、おそらくリクエストからの `X-Amz-Cf-Id` ヘッダーエントリの調査が必要になります。現在ヘッダーエントリのログを記録していない場合は、将来に備えて記録することをお勧めします。詳しくは、「[Amazon EC2 (または別のカスタムオリジン) を使用する](DownloadDistS3AndCustomOrigins.md#concept_CustomOrigin)」を参照してください。詳細については、[AWS サポートセンター](https://console.aws.amazon.com/support/home?#/)までお問い合わせください。

## エラーメッセージ: Certificate: <certificate-id> is being used by CloudFront (証明書: <certificate-id> は CloudFront で使用されています)
<a name="troubleshooting-certificate-error"></a>

**問題**: IAM 証明書ストアから SSL/TLS 証明書を削除しようとすると、メッセージ「Certificate: <certificate-id> is being used by CloudFront.」が表示されます。

**解決方法**: 各 CloudFront ディストリビューションは、デフォルトの CloudFront 証明書または独自 SSL/TLS 証明書のいずれかと関連付けられている必要があります。SSL/TLS 証明書を削除する前に、SSL/TLS 証明書を更新するか (現行の独自 SSL/TLS 証明書を別の独自 SSL/TLS 証明書に置き換える)、または使用する証明書を独自 SSL/TLS 証明書からデフォルトの CloudFront 証明書に戻してください。この問題を解決するには、次のいずれかの手順のステップを実行します。
+ [SSL/TLS 証明書をローテーションする](cnames-and-https-rotate-certificates.md)
+ [カスタム SSL/TLS 証明書からデフォルト CloudFront 証明書に戻す](cnames-and-https-revert-to-cf-certificate.md)