Amazon CloudFront ディストリビューションのコンテンツへのアクセスを制限したいです。
簡単な説明
CloudFront ディストリビューションのプライベートコンテンツへのアクセスを制限するには、署名付き URL または署名付き Cookie を使用します。
ユーザー名とパスワードによるベーシック認証のみが必要な場合は、Lambda@Edge または CloudFront Functions を使用して基本認証を設定します。
IP アドレスまたは地理的位置に基づいてアクセスを制限するには、CloudFront でリクエストを許可またはブロックする設定を行います。
ID プロバイダーによる安全なユーザー認証を設定するには、Lambda@Edge を使用して CloudFront を OpenID Connect (OIDC) と統合します。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
署名付き URL または署名付き Cookie を使用する
署名付き URL は、暗号化された署名を URL に埋め込むことで、個々のファイルへの一時的なアクセスを付与します。署名付き URL を使用すると、特定のリソースへのアクセスを保護できます。
CloudFront は署名付き Cookie をクライアントに発行することで、パスに含まれる複数のファイルへのアクセスを許可します。広範なアクセス制御を行う場合は、署名付き Cookie を使用してください。
注: 署名付き URL と署名付き Cookie は、暗号キーペアを使用します。このキーペアは、ユーザーが作成してディストリビューションに関連付けたものです。
署名付き URL または署名付き Cookie を使用するには、次の手順を実行します。
キーペアを作成する
キーペアを作成し、そのキーペアを CloudFront にアップロードします。
信頼されたキーグループを作成する
- CloudFront コンソールを開きます。
- ナビゲーションペインの [キー管理] で [キーグループ] を選択します。
- [キーグループを作成] を選択します。
- [名前] にキーグループ名を入力します。
- [パブリックキー] で鍵を選択します。
- [キーグループを作成] を選択します。
ディストリビューションを設定する
ディストリビューションを更新し、署名付き URL または署名付き Cookie に信頼されたキーグループを使用する設定を行います。ディストリビューションの設定方法に関する詳細については、「キャッシュ動作の設定」を参照してください。
署名付き URL または署名付き Cookie を生成する
署名付き URL を生成するには、次の AWS CLI コマンドAWS CLI コマンド sign を実行します。
aws cloudfront sign \
--url "https://your-distribution-domain.cloudfront.net/path/to/file.pdf" \
--key-pair-id "YOUR_KEY_PAIR_ID" \
--private-key file://path/to/your/private-key.pem \
--date-less-than "2024-12-31T23:59:59"
IP 制限などの追加オプションについては、AWS CLI コマンドリファレンスの「オプション」を参照してください。
注: サードパーティツールに対する署名付き URL を作成することもできます。
署名付き Cookie を生成するには、使用する言語に応じた AWS SDK を使用してください。コード例については、「PHP を使用して署名付き Cookie を作成する」および「AWS SDK を使用して署名付き URL と Cookie を作成する」を参照してください。
署名付き URL または署名付き Cookie を使用する
署名付き URL または署名付き Cookie を CloudFront へのリクエストに含めます。
Lambda@Edge を使用してベーシック認証を設定する
注: Lambda@Edge を使用して認証ロジックを実装するには、カスタムコードを作成する必要があります。
次の手順を実行します。
- ビューワーリクエストの認証を処理する AWS Lambda 関数を作成します。
- 関数のコードでリクエストヘッダーを調査し、認証情報を検証し、リクエストを許可または拒否します。関数の例については、「例: 未認証ユーザーをログインページにリダイレクトする」を参照してください。
- トリガーを使用し、関数をディストリビューションの動作に関連付けます。
CloudFront 関数を使用してベーシック認証を設定する
注: CloudFront Functions を使用して認証ロジックを実装するには、カスタムコードを作成する必要があります。
次の手順を実行します。
- ビューワーリクエストを認証する CloudFront 関数を作成します。
- 関数のコードでヘッダーを調査し、認証情報を検証し、リクエストを許可または拒否します。関数の例については、「CloudFront Functions のビューワーリクエストに含まれるシンプルなトークンを検証する」を参照してください。
- 関数をディストリビューションの動作に関連付けます。
CloudFront でクライアントの IP アドレスまたは地理的位置に基づいてリクエストを許可またはブロックする設定を行う
次のいずれかの手順を実行します。
- IP アクセスコントロールに基づく制限を実装するには、ディストリビューションに対する IP アドレス許可リストと拒否リストを AWS WAF を使用して定義します。
- 地理的な場所に基づく制限を実装するには、リクエストの送信元である国を基準にコンテンツへのアクセスを制限します。
注: AWS WAF と地理的制限は配信レベルにのみ適用されます。キャッシュ動作には適用されません。
Lambda@Edge を使用して CloudFront と OIDC を統合する
注: 統合を行うには、アプリケーションに OIDC 認証フローを実装し、CloudFront へのリクエストに含める ID トークンを取得する必要があります。
次の手順を実行します。
- ビューワーリクエストの OIDC ID トークンを検証するための Lambda 関数を作成します。
- 関数のコードで認証ヘッダーを調査し、ID トークンを検証し、リクエストを許可または拒否します。
- 関数をディストリビューションの動作に関連付けます。
関連情報
@Edge での認証 - Lambda@Edge と JSON ウェブトークンを使用してウェブアプリケーションのセキュリティを強化する方法
Lambda @Edge による外部サーバー認証
OpenID Connect と AWS Secrets Manager を使用して CloudFront ディストリビューションを保護する