

# ファイルへのアクセスを制限する
<a name="private-content-overview"></a>

プライベートコンテンツへのユーザーアクセスは 2 つの方法を使用して制御可能です。
+ [CloudFront キャッシュ内のファイルへのアクセスを制限します](#private-content-overview-edge-caches)。
+ 次のいずれかを実行して、オリジン内のファイルへのアクセスを制限します。
  + [Amazon S3 バケットのオリジンアクセスコントロール (OAC) のセットアップ](private-content-restricting-access-to-s3.md)
  + [プライベート HTTP サーバー (カスタムオリジン) のカスタムヘッダーの設定](#forward-custom-headers-restrict-access)

## CloudFront キャッシュ内のファイルへのアクセスを制限する
<a name="private-content-overview-edge-caches"></a>

ユーザーがファイルにアクセスする際に、*署名付き URL* または*署名付き Cookie* の使用が求められるように CloudFront を設定することができます。次に、署名付き URL を作成して認証されたユーザーに配信するか、認証されたユーザーの署名付き Cookie を設定する `Set-Cookie` ヘッダーを送信するアプリケーションを開発します (少数のファイルへの長期的なアクセスを数人のユーザーに付与するために、署名付き URL を手動で作成することもできます)。

ファイルへのアクセスを制御するための署名付き URL または署名付き Cookie を作成するときに、次の制限を指定できます。
+ 最終日時。この日時以降、URL が有効ではなくなります。
+ (オプション) URL が有効になる日時。
+ (オプション) コンテンツへのアクセスに使用可能なコンピュータの IP アドレスまたはアドレス範囲。

署名付き URL または署名付き Cookie では、パブリックとプライベートのキーペアのプライベートキーを使用して、一部がハッシュ化され、署名が行われます。ユーザーが署名付き URL や署名付き Cookie を使用してファイルにアクセスすると、CloudFront は URL や Cookie の署名部分と無署名部分を比較します。これらが一致しない場合、CloudFront はファイルを供給しません。

URL または Cookie の署名には、RSA 2048 または ECDSA 256 プライベートキーを使用する必要があります。

## Amazon S3 バケット内のファイルへのアクセスを制限する
<a name="private-content-overview-s3"></a>

オプションで、Amazon S3 バケット内のコンテンツを保護することで、ユーザーが指定された CloudFront ディストリビューションを介してアクセスできても、Amazon S3 URL を使用して直接アクセスすることはできないように設定できます。これにより、アクセスを制限するコンテンツについては、CloudFront のバイパスと Amazon S3 URL の使用による取得を防止できます。署名付き URL を使用するためにこの手順を実行する必要はありませんが、推奨します。

CloudFront URL を使用してコンテンツにアクセスすることをユーザーに要求するには、次のタスクを実行します。
+ CloudFront に、S3 バケット内のファイルを読み取る*オリジンアクセスコントロール*アクセス許可を付与します。
+ オリジンアクセスコントロールを作成し、CloudFront ディストリビューションに関連付けます。
+ Amazon S3 URL を使用してファイルを読み取るためのアクセス許可を、他のすべてのユーザーから削除します。

詳細については、「[Amazon S3 オリジンへのアクセスを制限する](private-content-restricting-access-to-s3.md)」を参照してください。

## カスタムオリジンのファイルへのアクセスを制限する
<a name="forward-custom-headers-restrict-access"></a>

カスタムオリジンを使用する場合は、カスタムヘッダーをオプションで設定して、アクセスを制限できます。CloudFront がカスタムオリジンからファイルを取得するには、標準の HTTP (または HTTPS) リクエストを使用して CloudFront からファイルにアクセスできる必要があります。しかし、カスタムヘッダーを使用することで、コンテンツへのアクセスをさらに制限して、ユーザーが直接アクセスするのではなく CloudFront を通してのみアクセスできるようにすることができます。署名付き URL を使用するためにこの手順を実行する必要はありませんが、推奨します。

ユーザーに CloudFront を経由してコンテンツにアクセスするよう要求するには、CloudFront ディストリビューションで次の設定を変更します。

**オリジンのカスタムヘッダー**  
カスタムヘッダーがオリジンに転送されるように CloudFront を設定します。「[オリジンリクエストにカスタムヘッダーを追加するように CloudFront を設定する](add-origin-custom-headers.md#add-origin-custom-headers-configure)」を参照してください。

**ビューワープロトコルポリシー**  
ビューワーから CloudFront へのアクセス時に HTTPS の使用が求められるようにディストリビューションを設定します。「[ビューワープロトコルポリシー](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy)」を参照してください。

**オリジンプロトコルポリシー**  
CloudFront がリクエストをオリジンに転送する際にビューワーと同じプロトコルの使用が求められるように、ディストリビューションを設定します。「[プロトコル (カスタムオリジンのみ)](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy)」を参照してください。

これらの変更を行った後、CloudFront で送信するように設定したカスタムヘッダーを含むリクエストのみを受け入れるように、カスタムオリジンでアプリケーションを更新します。

**ビューワープロトコルポリシー**と**オリジンプロトコルポリシー**の組み合わせにより、カスタムヘッダーが転送中に暗号化されます。ただし、定期的に以下を実行して、CloudFront がオリジンに転送するカスタムヘッダーをローテーションすることをお勧めします。

1. CloudFront ディストリビューションを更新して、カスタムオリジンへの新しいヘッダーの転送を開始します。

1. アプリケーションを更新して、リクエストが CloudFront からのものであることの確認として新しいヘッダーを受け入れます。

1. 置き換えるヘッダーが今後リクエストに含まれないようにする場合は、アプリケーションを更新して、リクエストが CloudFront からのものであることの確認として古いヘッダーを受け入れないようにします。