このページでは、非公開送信元の認証の概要と、Cloud CDN で使用する場合の手順について説明します。
非公開送信元の認証を使用すると、Cloud CDN は限定公開 Amazon S3 バケットまたは互換性のある他のオブジェクト ストアに長期間リソース アクセスできます。非公開送信元を使用すると、クライアントは 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 で認証する] を選択します。次に、次の情報を指定します。
- Key ID: Amazon S3 バケットまたは他の互換性のあるオブジェクト ストアのアクセスキー。
- Key: オブジェクト ストアの認証に使用される秘密鍵。限定公開の 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
は、アーティファクト ファイルの名前に置き換えます。
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
ヘッダーが送信元から提供されるコンテンツで正しく設定されていることを確認します。