このページでは、プライベート オリジンの認証の概要と、Cloud CDN で使用する場合の手順について説明します。
プライベート オリジンの認証を使用すると、Amazon S3 のプライベート バケットまたは互換性のあるオブジェクト ストアに対する長期のリソース アクセス権が Cloud CDN に付与されます。プライベート オリジンを使用すると、クライアントは Cloud CDN をバイパスできず、送信元に直接アクセスできなくなります。
この機能は、グローバル外部アプリケーション ロードバランサまたは従来のアプリケーション ロードバランサを使用する Cloud CDN でサポートされています。
プライベート オリジンの認証は送信元向けであり、署名付き URL と署名付き Cookie はクライアント向けです。同じコンテンツに対して両方を有効にできます。プライベート オリジンの認証では、送信元とコンテンツに対する CDN 以外のアクセスを制限します。署名付き URL と Cookie は、Cloud CDN にアクセスできるユーザーを制御します。
始める前に
リクエストを認証するためのハッシュベースのメッセージ認証コード(HMAC)キーを作成して、サービス アカウントに関連付けます。アクセスキーとシークレットをメモしておきます。
AWS のドキュメントの AWS 認証情報を使用した AWS へのアクセス: プログラムによるアクセスをご覧ください。
外部バックエンドを使用するようにロードバランサを構成します。
オブジェクト ストアが HTTP リクエストの
Host
ヘッダーに特定の値を想定している場合は、その値がバックエンド サービスで構成されていることを確認します。カスタム リクエスト ヘッダーを構成しない場合、バックエンド サービスは、クライアントが外部アプリケーション ロードバランサへの接続に使用したHost
ヘッダーを保持します。構成手順については、カスタム リクエスト ヘッダーの操作をご覧ください。具体的な例については、外部バックエンドでロードバランサの構成をご覧ください。
必要に応じて、次のコマンドで Google Cloud CLI を最新バージョンに更新します。
gcloud components update
プライベート オリジンの認証を構成する
プライベート オリジンの認証を構成するには、次の操作を行います。
コンソール
Google Cloud コンソールで、[Cloud CDN] ページに移動します。
構成する送信元の名前をクリックします。送信元は、カスタム送信元タイプである必要があります。
[送信元の詳細] ページで、[編集] ボタンをクリックします。
[ホストとパスのルール] セクションに移動するために、[次へ] をクリックします。
[キャッシュ パフォーマンス] セクションに移動するために、[次へ] をクリックします。
[プライベート オリジンの認証] セクションで、[この送信元に対するリクエストを AWS 署名バージョン 4 で認証する] を選択します。次に、以下の情報を指定します。
- 鍵 ID: Amazon S3 バケットまたは他の互換性のあるオブジェクト ストアのアクセスキー。
- 鍵: オブジェクト ストアの認証に使用される秘密鍵。プライベート Cloud Storage バケットを使用している場合は、HMAC キーを指定します。
- 鍵バージョン: 鍵のバージョンを表す一意の名前。
- リージョン: オブジェクト ストアが配置されているリージョン(
us-east-1
など)。
[完了] をクリックします。
gcloud
プライベート オリジンのバックエンド構成を YAML ファイルにエクスポートするには、
gcloud compute backend-services export
コマンドを使用します。gcloud compute backend-services export BACKEND_SERVICE_NAME \ [--destination=DESTINATION]
DESTINATION
は、YAML ファイルの名前に置き換えます(例:my-private-origin.yaml
)。HMAC キーを使用してバックエンド リクエストを認証するには、
backendServices
のsecuritySettings
セクションで、追加の構成オプションを指定します。securitySettings: awsV4Authentication: accessKeyId: ACCESS_KEY_ID accessKey: ACCESS_KEY [accessKeyVersion: ACCESS_KEY_VERSION] originRegion: REGION …]
次のように置き換えます。
ACCESS_KEY_ID
: HMAC アクセスキー IDACCESS_KEY
: HMAC アクセスキーACCESS_KEY_VERSION
(省略可): 鍵バージョンを表すために設定できる一意の名前REGION
: ストレージ プロバイダに有効なリージョン。Amazon S3 の場合、値は Google Cloudリージョンではありません。
次のスニペットは、サンプル
my-private-origin.yaml
ファイルの内容を示しています。name: shopping-cart-services backends: - description: cart-backend-1 group: 'https://www.googleapis.com/compute/v1/projects/my-project-id/global/networkEndpointGroups/my-network-origin-group' securitySettings: awsV4Authentication: accessKeyId: AKIDEXAMPLE accessKey: c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9 accessKeyVersion: prod-access-key-v1.2 originRegion: us-east-2
プライベート オリジンを更新するには、
gcloud compute backend-services import
コマンドを使用してバックエンド サービスに構成をインポートします。gcloud compute backend-services import BACKEND_SERVICE_NAME \ [--source=SOURCE]
SOURCE
は、YAML ファイルの名前に置き換えます。
API
HMAC キーを使用してバックエンド リクエストを認証するには、backendServices
の securitySettings
セクションで、追加の構成オプションを指定します。
Method: backendServices.insert
または Method: backendServices.update
API 呼び出しを使用します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
JSON リクエストの本文に次のスニペットを追加します。
securitySettings: { awsV4Authentication: { accessKeyId: ACCESS_KEY_ID, accessKey: ACCESS_KEY, [accessKeyVersion: ACCESS_KEY_VERSION], originRegion: REGION } }
次のように置き換えます。
ACCESS_KEY_ID
: HMAC アクセスキー IDACCESS_KEY
: HMAC アクセスキーACCESS_KEY_VERSION
(省略可): 鍵バージョンを表すために設定できる一意の名前REGION
: ストレージ プロバイダに有効なリージョン。Amazon S3 の場合、値は Google Cloudリージョンではありません。
次のスニペットは、サンプル JSON リクエスト本文の内容を示しています。
securitySettings: { awsV4Authentication: { accessKeyId: "AKIDEXAMPLE", accessKey: "c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9", accessKeyVersion: "prod-access-key-v1.2", originRegion: "us-east-2" } }
署名を作成するため、サービス名は自動的に s3
に設定されます。これらの構成が完了すると、Cloud CDN は送信元へのすべてのリクエストに対して HTTP Authorization ヘッダーを生成します。
非公開で認証されたレスポンスをキャッシュに保存する
非公開で認証されたコンテンツが Cloud CDN によってキャッシュに保存されるようにすることもできます。
これを行うには、キャッシュ モードを [すべてのコンテンツを強制的にキャッシュします] に設定して TTL を指定し、送信元から提供されるすべてのコンテンツがキャッシュに保存されるようにします。
あるいは、すべてのコンテンツを同じ方法で強制的にキャッシュに保存しない場合は、キャッシュ モードを [Cache-Control ヘッダーに基づいて送信元の設定を使用する] または [静的コンテンツをキャッシュします] に変更し、Cache-Control
ヘッダーが送信元から提供されるコンテンツで正しく設定されていることを確認します。